Я взял копию супер злой книги Эрика Вестры «Python Geospatial Development» ( ссылка на Amazon ) и прорабатываю ее. В настоящее время он учит меня загружать данные береговой линии GSHHS из шейп-файла в базу данных PostGIS при подготовке к созданию геопространственного веб-приложения.
Моя проблема заключается в следующем: когда я пытаюсь импортировать данные GSHHS в PostGIS, они отклоняются из-за того, что полигоны береговой линии не считаются «действительными». В частности, мне выдается сообщение об ошибке, описывающее некоторые (но не все) полигоны береговой линии как «незамкнутые кольца».
Я понимаю, что эта ошибка пытается сказать мне, что первая и последняя точки многоугольника не совпадают. Однако это просто неправда. Я изучил WKT-представление многих полигонов, и они верны. Они определенно начинаются и заканчиваются одной и той же координатой.
Полигоны извлекаются из шейп-файлов с использованием библиотеки OGR и экспортируют каждый объект полигона в WKT. Я пытался воссоздать полигон через Shapely и экспериментировал с WKB, но безрезультатно. Я уже был в состоянии загрузить одни и те же данные в PostGIS в виде таблицы MultiPolygon, используя shp2pgsql погрузчик.
Мне было интересно, если кто-то там:
(а) возможно, использовал ту же книгу, застрял в той же проблеме, и есть ли ответ для меня?
(б) столкнулся с подобной проблемой, и нашел решение?
(c) если это не удастся, есть ли рекомендации «передового опыта» для обеспечения правильной геометрии перед загрузкой в PostGIS?
ОБНОВЛЕНИЕ: коллега предположил, что проблема «незамкнутых колец» может быть просто симптомом другой проблемы. Возможно, что моя конфигурация PostGIS / PostgreSQL имеет ограничения по размеру (для транзакций вставки, полученных пакетов, текстовых строк и т. Д.).
Поскольку я использую очень длинные WKT-полигоны в качестве входных данных, PostGIS может обрезать их слишком рано, чтобы позволить завершить каждый полигон. Я проверю это завтра, но это звучит правдоподобно. Моя вставка границ страны принимала только некоторые записи, а не другие. По памяти принятые геометрии были для малых островных стран, таких как Антигуа (и поэтому, вероятно, имели короткие представления WKT).
Таким образом, это может оказаться скорее потоком администратора базы данных PostGIS, чем недопустимым потоком геометрии.
Ответы:
Я посмотрел на ваши данные и пример книги, проблема в том, что в книге обрабатываются три недопустимых полигона:
GSHHS_l_L1.shp
ID = 92-W
ID = 486-W
GSHHS_l_L2.shp
ID = 7333-W
Поскольку это пример, было бы проще удалить эти полигоны из набора данных или просто добавить оператор if в ваш код.
источник