Más

¿Cargar Shapefiles en una base de datos PostGIS remota usando la línea de comando?

¿Cargar Shapefiles en una base de datos PostGIS remota usando la línea de comando?


¿Podemos importar un Shapefile de un sistema que no tiene PostgreSQL instalado (máquina cliente) a un sistema que tiene PostGIS instalado?

Tengo un problema con 'shp2pgsql' y 'psql' ya que ambos no se reconocen en la máquina cliente.

Estoy intentando esto usando la consola.


No es una solución de línea de comando, pero desde que etiquetó la pregunta QGIS:

Recomiendo usar el complemento QGIS PostGIS Manager, que es una GUI para shp2pgsql que le permite cargar Shapefiles en una base de datos remota.


Creo que si tiene qgis instalado, también tendrá ogr2ogr (se proporciona con el paquete gdal-bin). Con el siguiente comando creará una tabla llamada yousahpefile en su base de datos:

ogr2ogr -f PostgreSQL PG: "host = servidor_ip usuario = nombre_bd = nombre_bd contraseña = contraseña" yourshapefile.shp;

Existen algunas soluciones si encuentra problemas con la codificación.


Deberá instalar shp2psql en la máquina cliente o copiar el shapefile en una máquina que lo tenga instalado.


Creo que solo necesitas copiar los archivos relevantes. He hecho esto en ewindows. No lo he probado en Linux. Para Windows, copio shp2pgsql.exe, libpq.dll, libiconv-2.dll, comerr32.dll, msvcr71.dll, un par de otros, pero esos son los clave: estos se encuentran en la carpeta bin de PostgreSQL

Los de Linux serían diferentes, pero definitivamente se requieren libpq y shp2pgsql


Puede usar shp2pgsql en su copia local de la base de datos, crear un volcado de la nueva base de datos y cargarla… o instalar shp2pgsql en la máquina remota, scp el shapefile y shp2pgsql desde allí (como recomienda iant).

AFAIK, no hay forma de hacer esto de forma remota en un solo paso. Esto se debe a que incluso si tiene acceso a la base de datos remota desde donde se encuentra, las funciones que está utilizando (como shp2pgsql) son las que están instaladas en el servidor, independientemente de lo que haya en su máquina local.


Estoy desarrollando una aplicación de mapas web que usa geoserver + express como su servidor y postgreSQL + postGIS como su base de datos. En una parte, quería agregar algunas funcionalidades para que los usuarios puedan cargar sus archivos .shp de forma remota. Después de pasar días, descubrí que es posible ejecutar comandos de shell simplemente usando ejecutivo función que ambos php y Rápido nos proporciona. Entonces por psql y shp2pgsql son comandos que se pueden ejecutar en la línea de comandos del sistema operativo, ejecutivo la función es una solución.

Aunque utilizo javascript en el cliente y el servidor, a continuación he proporcionado un código simple para ambos php y Rápido basado en su necesidad:

1) PHP

Esta es una parte de su código php que se envía su formulario html.

$ nombre de usuario = 'su_nombre_de_usuario'; $ contraseña = 'su_contraseña'; $ dbname = 'target_databasename'; $ tbname = 'target_tablename'; $ srsname = 'sistema_de_referencia'; $ fileName = 'shapefile_name'; $ directorio = ' directorio '. $ fileName. '.shp'; $ shellCommand = "shp2pgsql -I -s". $ srsname. "". $ directorio. "público". . $ tbname. "| psql -U". $ nombre de usuario. "-d". $ nombrebd. ""; $ shapfileLoader = exec ($ shellCommand, $ stdOut, $ stdErr); if (! $ stdErr) {echo $ stdOut; } else {echo $ stdErr; }

2) Expresar

Después de definir una ruta en su servidor express, simplemente agregue este código js:

var express = require ('express'); var enrutador = express.Router (); var {exec} = require ('child_process'); router.post ("/", function (_req, _res, _next) {const postGISdb = 'db_name'; const user = 'your_username'; exec ('psql -U $ {user} -d $ {postGISdb}', ( err, stdOut, stdErr) => {console.log (stdOut)})}); module.exports = enrutador;

1) No olvide reemplazar la información de configuración de la base de datos por la suya propia.

2) Ya no necesitas QGIS.

3) Al usar la función exec, debe ingresar la contraseña de postgreSQL, por lo que debe crear un archivo .pgpass para establecer la contraseña de forma no interactiva y automática. Para obtener más información, consulte este enlace.


Ver el vídeo: Cómo cargar un shapefile a una base de datos PostGIS