Próbuję zaimportować niektóre kształty wielokątów do Postgis w QGIS za pomocą SPIT. Nie można zaimportować jednego z nich i zwraca ten błąd:
ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)
Próbowałem zmienić atrybut „Class Feature” w tej tabeli w SPIT widnow, z MULTIPOLYGON na POLYGON, ale nic się nie stało.
Czy jest jakiś sposób na to, aby Postgis akceptował oba typy (wielokąt i multipolygon)? A może w jakiś sposób mogę przekonwertować geometrię pliku kształtu z wielokąta na wielokąt? Jakieś pomysły?
Próbowałem Qgis 2.0.1 w systemie Windows i Qgis 2.3 w ArchLinux.
Wygląda na to, że jest to znany problem, który nie zostanie naprawiony: patrz http://hub.qgis.org/issues/5328
Jeśli potrzebujesz obejścia, spróbuj zmienić typ kolumny geometrii tabeli na ogólną „geometrię”:
Po zakończeniu importowania możesz wrócić do
MultiPolygon
:Alternatywnie spróbuj załadować swoje dane za pomocą ogr2ogr .
źródło
Używam ogr2ogr do automatyzacji przetwarzania plików kształtów w bazie danych PostGIS. W szczególności w odniesieniu do pytania użyj opcji:
Zmusi to ogr2ogr do promowania geometrii POLYGON do MULTIPOLYGON, unikając błędu. Bardzo prosty przykład:
Pominąłem szczegóły hosta / autoryzacji pgsql. Aby spakować wiele plików kształtów, możesz zrobić coś takiego:
źródło
Chociaż próbowałem go rozwiązać za pomocą algorytmu „Importuj do PostGis”, nie udało mi się (moja baza danych nie pojawiła się na liście - używam QGIS 2.10).
Zamiast tego użyłem shp2pgsql , które było prostym zadaniem wiersza polecenia, jak opisano poniżej:
C:\Program Files\PostgreSQL\9.4\bin>
.shp
pliki do tego katalogu. (Skopiowałem cały folder z moimi.shp
plikami.shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql
gdzieMyShpDir
twój katalog, 4326 jest SRID WGS84, więc zmień, jeśli używasz innego SSID,MySHPFile.shp
twój konkretny plik (MYSQLFile
zostanie utworzony automatycznie). Oczywiście zrób to dla wszystkich plików, które chcesz przekonwertować. Pliki zostaną zapisane w twoim bieżącym katalogu (C:\Program Files\PostgreSQL\9.4\bin
w moim przypadku)Następnie po prostu skopiuj i wklej pliki SQL do bazy danych PLSQL.
Co więcej, jedną dodatkową fajną rzeczą
shp2pgsql
jest to, że możesz natychmiast utworzyć indeks w swojej tabeli, po prostu dodającI
parametr w poleceniu, tak jak to:shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql
Zysk! :)
źródło
Tak, możesz nakazać PostGIS zaakceptowanie dowolnego typu geometrii (wielokąta, wieloboku, punktu, oznaczenia linii itp.), Dodając do tabeli następujące ograniczenie.
Dla PostGIS 2.x (przy użyciu typowego trybu geometrii)
Poprzednia odpowiedź (dla PostGIS 1.x przy użyciu ograniczeń)
źródło
enforce_geotype_geom
zamiastenforce_geometry_type
. daj mi znać, czy to zadziała, a jeśli tak, zmodyfikuję swoją odpowiedź.Próbowałem rozwiązania algorytmu „Importuj do PostGIS”, ale okazało się, że to też nie działa. Najprostszym rozwiązaniem, jakie znalazłem, było przejście do bazy danych > DB Manager , przejście do bazy danych i kliknięcie przycisku Importuj warstwę / plik (strzałka w dół) .
źródło