Fazendo POINT a partir de coordenadas de longitude / latitude na tabela existente usando o PostGIS?

10

Eu gostaria de fazer um PONTO usando as colunas de longitude e latitude de uma tabela existente .
Aqui está um link para a documentação do ST_MakePoint .

Aqui está a minha mesa:

CREATE TABLE sysinst.bio (  
    oid INTEGER PRIMARY KEY,  
    longitude FLOAT,  
    latitude FLOAT,  
        geom GEOMETRY(POINT, 26913)
);

Adicionando coluna Geometria:

SELECT AddGeometryColumn ('sysinst', 'bio', 'geom', 26913, 'POINT', 2);

Aqui está a minha consulta:

UPDATE sysinst.bio SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 26913);

Nenhum erro retornado, embora os PONTOS sejam plotados incorretamente quando visualizados no QGIS.

Pois (-97.5959, 21.1922)eu recebo(-109.4896, 0.0002)

Alguma sugestão?

Estou aberto a fazer isso de forma mais eficiente se houver uma maneira mais fácil.

Zach
fonte
Não estou vendo o problema com a consulta. Talvez você possa tentar diagnosticar o problema em partes - talvez tente eliminar a parte do QGIS e apenas usar a linha de comando para o postgis?
BradHards
Talvez eu não esteja entendendo, mas você parece estar inserindo as coordenadas de latitude da longitude (-97, 21) em graus, em um CRS baseado em UTM e que usa medidores. Se você estiver declarando isso como SRID 26918, os valores long / lat deverão estar nesse CRS. Se os valores Long / Lat estiverem em graus, será necessário criar a geometria como ST_SetSRID (MakePoint (...), 4326) e depois transformar a camada em 26913
Micha
@ Micha, você deve adicionar seu comentário como resposta. Espero que o SRID adequado resolva o problema dos OPs. Também pode ser útil incluir e exemplo de como adicionar um ST_Transform .
Katahdin

Respostas:

16

Talvez eu não esteja entendendo, mas você parece estar inserindo as coordenadas de latitude da longitude (-97, 21) em graus, em um CRS baseado em UTM e que usa medidores. Se você estiver declarando isso como SRID 26918, os valores long / lat deverão estar nesse CRS. Se os valores Long / Lat estiverem em graus, você precisará criar a geometria como ST_SetSRID (MakePoint (...), 4326) e depois transformar a camada em 26913. Portanto, juntando tudo, se você precisar da camada em 26913, mas suas colunas de longitude / latitude estão em graus, com o CRS 4326, então

UPDATE sysinst.bio SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326),26913);
Micha
fonte
Obrigado pela ajuda. Eu deveria ter pensado nisso antes ...
Zach