¿Cómo convierto un par de latitud/longitud en un tipo de geografía posterior a la Geografía?
-
22-09-2019 - |
Pregunta
Estoy tratando de cargar un montón de pares de latitud/longitud en un tipo de geografía posterior a la GEGIS para poder consultar por ubicación.
En particular, tengo una tabla con columnas de latitud y longitud flotante y un geography(Point, 4326)
columna. me gustaría hacer
update mytable set geography = ???
La documentación parece sugerir que lo siguiente debería funcionar:
update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
longitude || ')');
No lo hace. No sé qué está interpretando este punto como significado, pero solo permite que la longitud se encuentre entre -90 y 90, por lo que claramente no es una longitud.
¿Entonces qué hago?
Solución
...suspiro. Estupidez de mi parte. Aparentemente, el orden correcto es la longitud, la latitud. Me engañó pensando que ambas coordenadas tenían el mismo rango (-180 a 180), así que pensé que algo más sutil estaba sucediendo.
Otros consejos
Aquí hay algunas formas de hacer tipos de geografía:
Convertir numérico
long
ylat
columnas a ungeog
Tipo de geografía:UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
Convertir un
geom
columna de geometría (SRID = 4326) a ungeog
Tipo de geografía usando un elenco simple:UPDATE mytable SET geog = geom::geography
Transformar un proyectado
geom
columna de geometría a ungeog
Tipo de geografía:UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
Tenga en cuenta que los dos últimos ejemplos funcionan en cualquier tipo de geometría. Además, la conversión de la geometría a la geografía a menudo es implícita, y estos ejemplos funcionan sin ::geography
, sin embargo, los moldes explícitos suelen ser una buena práctica para estas cosas.
Para realizar el intercambio entre LAT y LNG, puede usar:
update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' || st_y(geom) || ')');
con o sin srid.