Ich bin Neuling bei PostgreSQL und PostGIS. Ich möchte Breiten- und Längengrade in der PostgreSQL 9.1.1-Datenbanktabelle speichern. Ich werde die Entfernung zwischen zwei Punkten berechnen und anhand dieser Positionswerte nähere Punkte finden.
Welchen Datentyp soll ich für Längen- und Breitengrad verwenden?
postgresql
types
latitude-longitude
postgis
user1008404
quelle
quelle
Antworten:
Sie können den Datentyp verwenden
point
- Mähdrescher,(x,y)
die Ihr Lat / Long sein können. Belegt 16 Bytes: 2float8
Nummern intern.Oder machen Sie es zwei Spalten vom Typ
float
(=float8
oderdouble precision
). Jeweils 8 Bytes.Oder
real
(=float4
), wenn keine zusätzliche Genauigkeit erforderlich ist. Jeweils 4 Bytes.Oder auch
numeric
wenn Sie absolute Präzision brauchen. 2 Bytes für jede Gruppe von 4 Ziffern plus 3 - 8 Bytes Overhead.Lesen Sie das feine Handbuch über numerische Typen und geometrische Typen .
Die Datentypen
geometry
undgeography
werden vom Zusatzmodul PostGIS bereitgestellt und belegen eine Spalte in Ihrer Tabelle. Jeder belegt 32 Bytes für einen Punkt. Es gibt einen zusätzlichen Overhead wie bei einer SRID. Diese Typen speichern (long / lat), nicht (lat / long).Lesen Sie hier das PostGIS-Handbuch .
quelle
float
Datentyps nicht empfehlen . Dies macht die Berechnung mit den Koordinaten sehr kompliziert. Sie sollten PostGIS und dengeography
Datentyp für solche Berechnungen verwenden.In PostGIS gibt es für Punkte mit Längen- und Breitengrad einen geografischen Datentyp.
So fügen Sie eine Spalte hinzu:
So fügen Sie Daten ein:
4326 ist eine räumliche Referenz-ID, die angibt, dass es sich um Daten in Längen- und Breitengraden handelt, genau wie bei GPS. Mehr dazu: http://epsg.io/4326
Reihenfolge ist Längengrad, Breitengrad - wenn Sie es also als Karte zeichnen, ist es (x, y).
Um den nächstgelegenen Punkt zu finden, müssen Sie zuerst einen räumlichen Index erstellen:
und dann fordern Sie beispielsweise 5 an, die einem bestimmten Punkt am nächsten liegen:
quelle
Ich befürworte nachdrücklich PostGis . Es ist spezifisch für diese Art von Datentyp und verfügt über sofort einsatzbereite Methoden zur Berechnung der Entfernung zwischen Punkten sowie über andere GIS-Vorgänge, die Sie in Zukunft als nützlich erachten können
quelle
Wenn Sie nicht alle Funktionen von PostGIS benötigen, bietet Postgres (heutzutage) ein Erweiterungsmodul namens Erdabstand an . Es wird der Punkt oder Würfel verwendet - Datentyp auf Ihrer Genauigkeit Anforderungen für Abstandsberechnungen abhängig.
Mit der Funktion earth_box können Sie jetzt beispielsweise Punkte in einer bestimmten Entfernung von einem Ort abfragen.
quelle
In PostGIS wird Geometrie gegenüber Geographie (Round-Earth-Modell) bevorzugt, da die Berechnungen viel einfacher und daher schneller sind. Es hat auch VIELE mehr verfügbare Funktionen, ist aber über sehr große Entfernungen weniger genau.
Importieren Sie Ihre CSV in lange Lat-Felder in
DECIMAL(10,6)
Spalten. 6 Stellen sind 10 cm genau und sollten für die meisten Anwendungsfälle ausreichend sein.Dann wandeln Sie Ihre importierten Daten um
Stellen Sie sicher, dass die SRID nicht Null ist!
Überprüfen Sie die Reihenfolge Ihres Long Lat-Parameters mit einem WKT-Viewer und
ST_AsEWKT(target_table.geom)
.Indizieren Sie es dann für die beste Leistung
quelle