Como converter um par de latitude/longitude em um tipo de geografia do PostGIS?
-
22-09-2019 - |
Pergunta
Estou tentando carregar um monte de pares de latitude/longitude em um tipo de geografia do PostGIS para poder consultar por local.
Em particular eu tenho uma mesa com latitude de flutuação e colunas de longitude e um geography(Point, 4326)
coluna. eu gostaria de fazer
update mytable set geography = ???
A documentação parece sugerir que o seguinte deve funcionar:
update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
longitude || ')');
Não. Não sei o que está interpretando esse ponto como significado, mas apenas permite que a longitude esteja entre -90 e 90, por isso claramente não é uma longitude.
Então o que eu faço?
Solução
...suspirar. Estupidez da minha parte. Aparentemente, a ordem correta é longitude, latitude. Eu fui enganado ao pensar que ambas as coordenadas tinham o mesmo alcance (-180 a 180), então pensei que algo mais sutil estava acontecendo.
Outras dicas
Aqui estão algumas maneiras de fazer tipos de geografia:
Converter numérico
long
elat
colunas para ageog
Tipo de geografia:UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
Converter a
geom
coluna de geometria (Srid = 4326) para umgeog
Tipo de geografia usando um elenco simples:UPDATE mytable SET geog = geom::geography
Transformar um projetado
geom
coluna de geometria para umgeog
Tipo de geografia:UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
Observe que os dois últimos exemplos funcionam em qualquer tipo de geometria. Além disso, a conversão da geometria em geografia é frequentemente implícita, e esses exemplos funcionam sem ::geography
, no entanto, os elencos explícitos geralmente são uma boa prática para essas coisas.
Para realizar trocas entre LAT e GNL, você pode usar:
update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' || st_y(geom) || ')');
com ou sem srid.