Recogí una copia del libro súper malvado 'Python Geospatial Development' de Erik Westra ( enlace de Amazon ), y estoy trabajando en ello. Actualmente, me está enseñando a cargar datos de la costa de GSHHS desde un shapefile a una base de datos PostGIS, en preparación para construir una aplicación web geoespacial.
Mi problema es este: cuando intento importar los datos de GSHHS en PostGIS, se rechaza debido a que los polígonos de la línea costera no se consideran "válidos". Específicamente, recibo un mensaje de error que describe algunos (pero no todos) de los polígonos de la costa como 'anillos no cerrados'.
Entiendo que este error está tratando de decirme que el primer y el último punto del polígono no son iguales. Sin embargo, esto simplemente no es cierto. He examinado la representación WKT de muchos de los polígonos, y son correctos. Ellos definitivamente comienzan y terminan con la misma coordenada.
Los polígonos se extraen de los archivos de forma utilizando la biblioteca OGR y exportando cada entidad poligonal a WKT. Intenté reconstituir el polígono a través de Shapely y experimenté con WKB, pero fue en vano. Yo he sido capaz de cargar los mismos datos en PostGIS como una tabla MULTIPOLYGON, usando el cargador shp2pgsql.
Me preguntaba si alguien por ahí:
(a) tal vez usó el mismo libro, se quedó atascado en el mismo problema y tiene la respuesta para mí.
(b) ha encontrado un problema similar y ha encontrado una solución?
(c) en su defecto, ¿tiene algún consejo de 'mejores prácticas' para garantizar una geometría válida antes de cargar en PostGIS?
ACTUALIZACIÓN: un colega ha sugerido que el problema de los "anillos no cerrados" puede ser solo un síntoma de otro problema. Es posible que mi configuración PostGIS / PostgreSQL tenga límites de tamaño (en transacciones de inserción, paquetes recibidos, cadenas de texto, etc.).
Como estoy usando polígonos WKT muy largos como entrada, PostGIS puede estar cortándolos demasiado pronto para permitir que se complete cada polígono. Lo probaré mañana, pero suena probable. Mi inserción de las fronteras del país solo aceptaba algunos registros y no otros. De memoria, las geometrías aceptadas eran para pequeñas naciones isleñas como Antigua (y probablemente tenían representaciones cortas de WKT).
Entonces, esto podría terminar siendo más un hilo de administración de la base de datos PostGIS, en lugar de un hilo de geometría no válido.
Respuestas:
He visto sus datos y el ejemplo del libro, el problema es que hay tres polígonos no válidos en los datos que se procesan en el libro:
GSHHS_l_L1.shp
ID = 92-W
ID = 486-W
GSHHS_l_L2.shp
ID = 7333-W
Debido a que este es un ejemplo, sería más fácil eliminar esos polígonos del conjunto de datos o simplemente agregar uno si la declaración en su código
fuente