database - examples - ¿Cómo convierto un par de latitud/longitud en un tipo de geografía PostGIS?
postgis qgis (3)
...suspiro. Estupidez de mi parte Aparentemente, el orden correcto es longitud, latitud. Me engañaron y pensé que ambas coordenadas tenían el mismo rango (-180 a 180), así que pensé que algo más sutil estaba ocurriendo.
Estoy intentando cargar un grupo de pares de latitud / longitud en un tipo de geografía PostGIS para poder consultar por ubicación.
En particular, tengo una tabla con columnas de latitud y longitud de flotador y una columna de geography(Point, 4326)
. 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 es así No sé lo que 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?
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.
Aquí hay algunas maneras de hacer tipos de geografía:
Convierta columnas numéricas
long
ylat
a un tipogeog
geográfico:UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
Convierta una columna de geometría
geom
( SRID = 4326 ) en un tipogeog
geográfico usando un molde simple:UPDATE mytable SET geog = geom::geography
Transforme una columna de geometría
geom
proyectada a un tipo degeog
geográfico: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 es a menudo implícita, y estos ejemplos funcionan sin ::geography
, sin embargo, los moldes explícitos suelen ser una buena práctica para estas cosas.