Jestem nowicjuszem w PostgreSQL i PostGIS. Chcę przechowywać wartości szerokości i długości geograficznej w tabeli bazy danych PostgreSQL 9.1.1. Obliczę odległość między dwoma punktami, znajdę bliższe punkty, używając tych wartości lokalizacji.
Jakiego typu danych należy użyć w przypadku szerokości i długości geograficznej?
postgresql
types
latitude-longitude
postgis
user1008404
źródło
źródło
Odpowiedzi:
Możesz użyć typu danych
point
- kombinacje,(x,y)
które mogą być twoją szerokością / długością. Zajmuje 16 bajtów: 2float8
liczby wewnętrznie.Lub utwórz dwie kolumny typu
float
(=float8
lubdouble precision
). 8 bajtów każdy.Lub
real
(=float4
), jeśli dodatkowa precyzja nie jest potrzebna. 4 bajty każdy.Lub nawet
numeric
jeśli potrzebujesz absolutnej precyzji. 2 bajty na każdą grupę 4 cyfr plus 3 - 8 bajtów narzut.Przeczytaj dokładną instrukcję dotyczącą typów numerycznych i geometrycznych .
Te
geometry
igeography
typy danych są dostarczane przez dodatkowy moduł PostGIS i zajmują jedną kolumnę w tabeli. Każdy zajmuje 32 bajty na punkt. Jest tam dodatkowe obciążenie, takie jak SRID. Te typy przechowują (długie / szer.), A nie (szer./dług.).Zacznij czytać instrukcję PostGIS tutaj .
źródło
float
typu danych. To sprawia, że obliczenia ze współrzędnymi są bardzo skomplikowane. Dogeography
takich obliczeń należy używać PostGIS i typu danych.W PostGIS dla punktów o szerokości i długości geograficznej istnieje typ danych geograficznych.
Aby dodać kolumnę:
Aby wstawić dane:
4326 to przestrzenny identyfikator odniesienia, który podaje dane w stopniach długości i szerokości geograficznej, tak samo jak w GPS. Więcej na ten temat: http://epsg.io/4326
Kolejność to długość i szerokość geograficzna - więc jeśli narysujesz to jako mapę, to (x, y).
Aby znaleźć najbliższy punkt, musisz najpierw utworzyć indeks przestrzenny:
a następnie poproś, powiedzmy, o 5 najbliżej danego punktu:
źródło
Zdecydowanie opowiadam się za PostGis . Jest specyficzny dla tego rodzaju danych i ma nieszablonowe metody obliczania odległości między punktami, wśród innych operacji GIS, które mogą być przydatne w przyszłości
źródło
Jeśli nie potrzebujesz wszystkich funkcji oferowanych przez PostGIS, Postgres (obecnie) oferuje moduł rozszerzający o nazwie Earthdistance . Wykorzystuje typ danych punktowych lub sześciennych w zależności od potrzeb dokładności w obliczeniach odległości.
Możesz teraz użyć funkcji earth_box, aby na przykład zapytać o punkty w określonej odległości od lokalizacji.
źródło
W PostGIS Geometria jest preferowana w stosunku do Geografii (model okrągłej ziemi), ponieważ obliczenia są znacznie prostsze, a zatem szybsze. Posiada również WIELE więcej dostępnych funkcji, ale jest mniej dokładny na bardzo dużych odległościach.
Zaimportuj plik CSV do długich pól do
DECIMAL(10,6)
kolumn. 6 cyfr to dokładność 10 cm, w większości przypadków powinno wystarczyć.Następnie prześlij zaimportowane dane
Sprawdź, czy SRID nie wynosi zero!
Sprawdź kolejność parametru długiej szerokości geograficznej za pomocą przeglądarki WKT i
ST_AsEWKT(target_table.geom)
.Następnie zindeksuj go, aby uzyskać najlepszą wydajność
źródło