Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

406
Vistas
¿Cómo puedo exportar de manera eficiente una tabla grande de PostGIS (PostgreSQL) a un archivo GeoJSON?

He creado una base de datos PostgreSQL algo grande que contiene principalmente datos geoespaciales. Actualmente estoy tratando de exportar algunos de los datos a un formato GeoJSON para poder colocarlos en mosaico y usarlos con algunos mapas (Mapbox).

Para el primer conjunto de datos con el que estoy trabajando, escribí un script rápido que usa el siguiente comando ogr2ogr para exportar los datos al formato GeoJSON.

 ogr2ogr -f GeoJSON \ -progress \ nhd_$2.json \ "PG:dbname=$PG_DB host=$PG_HOST port=$PG_PORT user=$PG_USERNAME password=$PG_PASSWORD" \ -sql "select resolution, geom from nhd_hr_$2"

Debido al gran tamaño del archivo GeoJSON que se exportó, luego usé geojsplit para dividir el gran archivo GeoJSON en subarchivos más pequeños y luego pude usar la herramienta de mosaico Mapbox para crear mis mosaicos y luego crear una capa para mi mapa. .

Sin embargo, ahora que pasé a las bases de datos más grandes, sigo teniendo problemas en los que mi conexión a la base de datos se agota después de descargar solo 12-15 GB de datos.

Mi idea inicial fue dividir mi consulta en subconsultas, pero no estoy completamente seguro de cómo podría hacerlo. ¿Hay alguna forma en que pueda cambiar mi enfoque para exportar los datos? ¿O hay alguna manera de dividir esta consulta en partes más manejables?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Use seq para generar números, luego cambie su consulta para consultar un rango de valores de identificación.

Cambié $2 a $suffix en este ejemplo, e IRL soltará el echo una vez que esté satisfecho con la salida para ejecutar los comandos (o simplemente puede copiar/pegar la salida en otra terminal). Querrá cambiar 2000 a algo con seguridad por encima del máximo ogc_fid ( select ogc_fid from whatever order by 1 desc limit 1 para encontrarlo), y es posible que deba cambiar 1000 a algún otro tamaño de fragmento dependiendo de qué tan grande sea cada fila. Sin embargo, no olvide cambiar también el 1000 en la cláusula WHERE si lo hace.

 $ seq 0 500 1500 0 500 1000 1500 $ for suffix in foo bar; do > for each in $(seq 0 1000 2000); do > echo ogr2ogr -f GeoJSON -progress nhd_$suffix.json "PG:dbname=$PG_DB host=$PG_HOST port=$PG_PORT user=$PG_USERNAME password=$PG_PASSWORD" \ > -sql "select resolution, geom from nhd_hr_$suffix where ogc_fid>=$each and ogc_fid < ($each + 1000)" > done > done ogr2ogr -f GeoJSON -progress nhd_foo.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_foo where ogc_fid>=0 and ogc_fid < (0 + 1000) ogr2ogr -f GeoJSON -progress nhd_foo.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_foo where ogc_fid>=1000 and ogc_fid < (1000 + 1000) ogr2ogr -f GeoJSON -progress nhd_foo.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_foo where ogc_fid>=2000 and ogc_fid < (2000 + 1000) ogr2ogr -f GeoJSON -progress nhd_bar.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_bar where ogc_fid>=0 and ogc_fid < (0 + 1000) ogr2ogr -f GeoJSON -progress nhd_bar.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_bar where ogc_fid>=1000 and ogc_fid < (1000 + 1000) ogr2ogr -f GeoJSON -progress nhd_bar.json PG:dbname= host= port= user= password= -sql select resolution, geom from nhd_hr_bar where ogc_fid>=2000 and ogc_fid < (2000 + 1000)

Aquí está el comando en una línea para copiar/pegar más fácilmente en su shell:

 for suffix in foo bar; do for each in $(seq 0 1000 2000); do echo ogr2ogr -f GeoJSON -progress nhd_$suffix.json "PG:dbname=$PG_DB host=$PG_HOST port=$PG_PORT user=$PG_USERNAME password=$PG_PASSWORD" -sql "select resolution, geom from nhd_hr_$suffix where ogc_fid>=$each and ogc_fid < ($each + 1000)"; done; done
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda