Pregunta:
¿Cuál es la forma correcta de insertar un punto en una base de datos PostGIS usando Python?
Respuesta:
Primero, instale el paquete psycopg2 , una interfaz Pythonic para PostgreSQL.
Luego, use ST_MakePoint
:
>>> import psycopg2
>>> conn = psycopg2.connect(dbname=..., port=..., user=...,
password=..., host=...)
>>> cur = conn.cursor()
>>> x, y, z, = 32, 34, 0
>>> cur.execute("SELECT ST_SetSRID(ST_MakePoint(%s, %s, %s),4326);", (x, y, z))
>>> cur.fetchall()
[('01010000A0E6100000000000000000404000000000000041400000000000000000',)]
ST_AsText
se puede utilizar para validar los valores:
>>> cur.execute("SELECT ST_AsText(ST_SetSRID(ST_MakePoint(%s, %s, %s),4326));", (x, y, z))
>>> cur.fetchall()
[('POINT Z (32 34 0)',)]
Notas
- Recuerda que
(lat, lon)
es(y, x)
, no(x, y)
. - Utilice siempre parámetros, en lugar de manipulaciones de cadenas, para evitar la inyección de SQL . En estos ejemplos, hicimos una tupla
(x, y, z)
al final para quepsycopg2
pueda manejar la sustitución.