Я пытаюсь импортировать некоторые шейп-файлы полигонов в Postgis в QGIS через SPIT. Один из них не может быть импортирован и возвращает эту ошибку:
ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)
Я пытался изменить атрибут "Класс объектов" в этой таблице в SPIT widnow, с MULTIPOLYGON на POLYGON, но ничего не произошло.
Есть ли способ заставить Postgis принимать оба типа (полигон и мультиполигон)? Или, может быть, как-то я могу преобразовать геометрию шейп-файла из многоугольника в многоугольник? Любые идеи?
Я пробовал Qgis 2.0.1 в Windows и Qgis 2.3 в ArchLinux.
Кажется, это известная проблема, которая не будет устранена: см. Http://hub.qgis.org/issues/5328.
Если вам нужен обходной путь, попробуйте изменить тип столбца геометрии вашей таблицы на общую «геометрию»:
После того как вы сделали свой импорт, вы можете вернуться к
MultiPolygon
:Или попробуйте загрузить ваши данные, используя ogr2ogr .
источник
Я использую ogr2ogr для автоматизации загрузки шейп-файлов в базу данных PostGIS. В частности, в отношении вопроса используйте опцию:
Это заставит ogr2ogr преобразовывать геометрию POLYGON в MULTIPOLYGON, избегая ошибки. Очень простой пример:
Я опустил детали хоста / аутентификации pgsql. Для пакетирования нескольких шейп-файлов вы можете сделать что-то вроде:
источник
Хотя я пытался решить эту проблему с помощью алгоритма «Импорт в PostGis», я не добился успеха (моя база данных не появилась в списке - я использую QGIS 2.10).
Вместо этого я использовал shp2pgsql , которая была простой задачей командной строки, как описано ниже:
C:\Program Files\PostgreSQL\9.4\bin>
.shp
файлы в этот каталог. (Я скопировал всю мою папку с моими.shp
файлами.shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql
гдеMyShpDir
ваш каталог, 4326 - это SRID WGS84, поэтому измените, если вы используете другой SSID,MySHPFile.shp
ваш конкретный файл (MYSQLFile
будет создан автоматически). Очевидно, сделайте это для всех файлов, которые вы хотите конвертировать. Файлы будут сохранены в вашем текущем каталоге (C:\Program Files\PostgreSQL\9.4\bin
в моем случае)Затем просто скопируйте и вставьте файлы SQL в базу данных PLSQL.
Кроме того, еще одна интересная вещь
shp2pgsql
заключается в том, что вы можете мгновенно создать индекс в своей таблице, просто добавивI
параметр в команду, например так:shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql
Прибыль! :)
источник
Да, вы можете указать PostGIS принять любой тип геометрии (полигон, мультиполигон, точка, линейная линия и т. Д.), Добавив в вашу таблицу следующее ограничение.
Для PostGIS 2.x (с использованием универсального Geometry typemod)
Предыдущий ответ (для PostGIS 1.x с использованием ограничений)
источник
enforce_geotype_geom
а неenforce_geometry_type
. дайте мне знать, если это сработает, и я отредактирую свой ответ, если это сработает.Я попробовал алгоритм «Импорт в PostGIS», но обнаружил, что это тоже не сработало. Самым простым решением, которое я нашел, было перейти в « База данных» > « Менеджер БД» , перейти к базе данных и нажать кнопку « Импортировать слой / файл» (стрелка вниз) .
источник