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?

Foi útil?

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:

  1. Converter numérico long e lat colunas para a geog Tipo de geografia:

    UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
    
  2. Converter a geom coluna de geometria (Srid = 4326) para um geog Tipo de geografia usando um elenco simples:

    UPDATE mytable SET geog = geom::geography
    
  3. Transformar um projetado geom coluna de geometria para um geog 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top