Sou novato no PostgreSQL e PostGIS. Quero armazenar os valores de latitude e longitude na tabela do banco de dados PostgreSQL 9.1.1. Vou calcular a distância entre dois pontos, encontrar pontos mais próximos usando esses valores de localização.
Que tipo de dados devo usar para latitude e longitude?
postgresql
types
latitude-longitude
postgis
user1008404
fonte
fonte
Respostas:
Você pode usar o tipo de dados
point
- combina,(x,y)
que pode ser o seu lat / long. Ocupa 16 bytes: 2float8
números internamente.Ou faça duas colunas do tipo
float
(=float8
oudouble precision
). 8 bytes cada.Ou
real
(=float4
) se não for necessária precisão adicional. 4 bytes cada.Ou mesmo
numeric
se você precisar de precisão absoluta. 2 bytes para cada grupo de 4 dígitos, mais 3-8 bytes de sobrecarga.Leia o manual fino sobre tipos numéricos e geométricos .
Os tipos de dados
geometry
egeography
são fornecidos pelo módulo adicional PostGIS e ocupam uma coluna na sua tabela. Cada um ocupa 32 bytes para um ponto. Há alguma sobrecarga adicional como um SRID lá. Esses tipos armazenam (longo / lat), não (lat / long).Comece a ler o manual do PostGIS aqui .
fonte
float
tipo de dados. Isso torna o cálculo com as coordenadas muito complicado. Você deve usar o PostGIS e ogeography
tipo de dados para esses cálculos.No PostGIS, para pontos com latitude e longitude, há um tipo de dados geográficos.
Para adicionar uma coluna:
Para inserir dados:
4326 é um código de referência espacial que indica os dados em graus de longitude e latitude, o mesmo que no GPS. Mais sobre isso: http://epsg.io/4326
A ordem é Longitude, Latitude - portanto, se você o traçar como mapa, será (x, y).
Para encontrar o ponto mais próximo, primeiro você precisa criar um índice espacial:
e então solicite, digamos, 5 o mais próximo de um determinado ponto:
fonte
Eu defendo fortemente o PostGis . É específico para esse tipo de dados e possui métodos prontos para calcular a distância entre pontos, entre outras operações GIS que você pode achar útil no futuro
fonte
Se você não precisa de todas as funcionalidades que o PostGIS oferece, o Postgres (atualmente) oferece um módulo de extensão chamado earthdistance . Ele usa o tipo de dados de ponto ou cubo, dependendo de suas necessidades de precisão para cálculos de distância.
Agora você pode usar a função earth_box para, por exemplo, consultar pontos a uma certa distância de um local.
fonte
No PostGIS, a geometria é preferida à geografia (modelo de terra redonda) porque os cálculos são muito mais simples e, portanto, mais rápidos. Ele também possui MUITAS funções mais disponíveis, mas é menos preciso em distâncias muito longas.
Importe seu CSV para campos latinos longos para
DECIMAL(10,6)
colunas. 6 dígitos tem 10 cm de precisão, deve ser suficiente para a maioria dos casos de uso.Em seguida, transmita seus dados importados
Verifique se o SRID não é zero!
Valide a ordem do seu parâmetro long lat usando um visualizador WKT e
ST_AsEWKT(target_table.geom)
.Em seguida, indexe-o para obter o melhor desempenho
fonte