¿Cómo convierto un par de latitud/longitud en un tipo de geografía posterior a la Geografía?

StackOverflow https://stackoverflow.com/questions/2523561

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?

¿Fue útil?

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:

  1. Convertir numérico long y lat columnas a un geog Tipo de geografía:

    UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
    
  2. Convertir un geom columna de geometría (SRID = 4326) a un geog Tipo de geografía usando un elenco simple:

    UPDATE mytable SET geog = geom::geography
    
  3. Transformar un proyectado geom columna de geometría a un geog 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top