He conseguido una copia del súper estupendo libro 'Python Geospatial Development' de Erik Westra (enlace de Amazon), y estoy trabajando en él. Actualmente, me está enseñando a cargar datos costeros de GSHHS desde un shapefile a una base de datos PostGIS, en preparación para construir una aplicación web geoespacial.
Mi problema es el siguiente: cuando intento importar los datos de GSHHS a PostGIS, son rechazados debido a que los polígonos costeros no son considerados 'válidos'. Específicamente, recibo un mensaje de error que describe algunos (pero no todos) de los polígonos costeros como 'anillos no cerrados'.
Entiendo que este error está tratando de decirme que los primeros y últimos puntos del polígono no son los mismos. Sin embargo, esto simplemente no es verdad. He examinado la representación WKT de muchos de los polígonos, y son correctos. Definitivamente comienzan y terminan con las mismas coordenadas.
Los polígonos se extraen de los shapefiles utilizando la biblioteca OGR, y exportando cada característica del polígono a WKT. He intentado reconstituir el polígono a través de Shapely, y he experimentado con WKB, pero sin éxito. He logrado cargar los mismos datos en PostGIS como una tabla MULTIPOLYGON, utilizando el cargador shp2pgsql.
Me preguntaba si alguien allí había:
(a) quizás utilizado el mismo libro, se atascó en el mismo problema, y tiene la respuesta para mí?
(b) ha encontrado un problema similar, y ha encontrado una solución?
(c) de no ser así, ¿tiene algún consejo de 'mejores prácticas' para garantizar geometría válida antes de cargarla en PostGIS?
ACTUALIZACIÓN: un colega ha sugerido que el problema de 'anillos no cerrados' puede ser simplemente un síntoma de otro problema. Es posible que mi configuración de PostGIS/PostgreSQL tenga límites de tamaño (en transacciones de inserción, paquetes recibidos, cadenas de texto, etc).
Dado que estoy utilizando polígonos WKT muy largos como entrada, es posible que PostGIS los esté cortando demasiado pronto para permitir que cada polígono se complete. Lo probaré mañana, pero suena probable. Mi inserción de fronteras de países solo aceptaba algunos registros y no otros. Por lo que recuerdo, las geometrías aceptadas eran para pequeñas naciones isleñas como Antigua (y probablemente tenían representaciones WKT cortas).
Entonces, esto podría terminar siendo más un hilo de administración de base de datos de PostGIS, en lugar de un hilo de geometría inválida.
0 votos
¿Puede proporcionar un archivo shp de ejemplo?
0 votos
No hay problema. Los datos de líneas de costa de GSHHS que estoy utilizando son una descarga de 96mb de aquí. Los datos de límites mundiales que estoy utilizando son el Conjunto de datos de Límites Mundiales de thematicmapping.org