2 votos

¿Cómo puedo exportar un shapefile desde PostGIS con una consulta GeoJSON?

He intentado exportar un shapefile desde mi instalación de PostGIS usando pgsql2shp como sigue

pgsql2shp -f tiles.shp -h <host> -u <user> -P <pass> <database> "SELECT id, the_geom FROM <table> WHERE ST_GeomFromGeoJSON('{ "type": "Polygon", "coordinates": [ [ [ -92.472398018272358, 18.086381878379395 ], [ -92.472398018272358, 21.705890714546868 ], [ -86.679183238981381, 21.705890714546868 ], [ -86.679183238981381, 18.086381878379395 ], [ -92.472398018272358, 18.086381878379395 ] ] ] }') && the_geom;"

y el comando da el error

Error executing user query: ERROR:  quoted object property name expected (at offset 2)

Supongo que es un problema relacionado con la consulta GeoJSON porque cuando ejecuto

pgsql2shp -f tiles.shp -h <host> -u <user> -P <pass> <database> "SELECT id, the_geom FROM <table> WHERE id = 1;"

el shapefile se genera sin error.

1 votos

Esto podría ser un problema con el escape de las comillas y apóstrofes en su consulta json. ¿ha intentado escaparlos con una barra invertida precedente (\)? Es posible que desee compruebe esta respuesta también.

0 votos

@StevenKay Tienes toda la razón. Es sólo un problema con las comillas en el geojson, se resolvió cuando se escapan las comillas, sólo comillas, los apóstrofes no son necesarios

1voto

Sigurd Puntos 11

Como mencionó @StevenKay, las comillas en el GeoJSON deben escaparse con la barra invertida anterior.

pgsql2shp -f tiles.shp -h <host> -u <user> -P <pass> <database> "SELECT id, the_geom FROM <table> WHERE ST_GeomFromGeoJSON('{ \"type\": \"Polygon\", \"coordinates\": [ [ [ -92.472398018272358, 18.086381878379395 ], [ -92.472398018272358, 21.705890714546868 ], [ -86.679183238981381, 21.705890714546868 ], [ -86.679183238981381, 18.086381878379395 ], [ -92.472398018272358, 18.086381878379395 ] ] ] }') && the_geom;"

Otra solución se presenta en esta pregunta .

0 votos

¡genial! Estaría bien que pgsql2shp permitiera realizar consultas desde archivos o stdin.. Si haces esto mucho, podría valer la pena escribir un corto python script para hacer el escape y llamarlo a través de os.system()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X