it-swarm.com.de

Welcher Datentyp für Längen- und Breitengrad?

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 mit diesen Standortwerten nähere Punkte finden.

Welchen Datentyp sollte ich für Längen- und Breitengrad verwenden?

103
user1008404

Sie können den Datentyp point - kombiniert (x,y) verwenden, der Ihr Lat/Long sein kann. Belegt 16 Bytes: 2 float8 Zahlen intern.

Oder machen Sie zwei Spalten vom Typ float (= float8 oder double precision). Jeweils 8 Bytes.
Oder real (= float4), wenn keine zusätzliche Genauigkeit erforderlich ist. Jeweils 4 Bytes.
Oder sogar numeric , wenn Sie absolute Präzision benötigen. 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 und geography werden vom Zusatzmodul PostGIS bereitgestellt und belegen die Spalte one in Ihrer Tabelle. Jeder belegt 32 Bytes für einen Punkt. Es gibt einige zusätzliche Kosten wie eine SRID. Diese Typen speichern (long/lat), nicht (lat/long).

Lesen Sie hier das PostGIS-Handbuch .

112

Ich befürworte ausdrücklich PostGis . Es ist spezifisch für diese Art von Datentypen und verfügt über standardisierte Methoden zur Berechnung der Entfernung zwischen Punkten sowie für andere GIS-Vorgänge, die in Zukunft nützlich sein können

21
tvieira

In PostGIS gibt es für Punkte mit Längen- und Breitengrad einen geografischen Datentyp.

So fügen Sie eine Spalte hinzu:

alter table your_table add column geog geography;

Daten einfügen:

insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');

4326 ist eine räumliche Referenz-ID, die angibt, dass die Daten in Längen- und Breitengraden wie in GPS angegeben sind. Mehr darüber: http://epsg.io/4326

Reihenfolge ist Längengrad, Breitengrad - wenn Sie sie also als Karte darstellen, ist dies (x, y).

Um den nächstgelegenen Punkt zu finden, müssen Sie zuerst einen räumlichen Index erstellen:

create index on your_table using Gist (geog);

und dann fordern Sie an, sagen wir 5, die einem bestimmten Punkt am nächsten sind:

select * 
from your_table 
order by geog <-> 'SRID=4326;POINT(lon lat)' 
limit 5;
18

Wenn Sie nicht die gesamte Funktionalität von PostGIS benötigen, bietet Postgres (heutzutage) ein Erweiterungsmodul mit dem Namen earthdistance an. Abhängig von Ihren Genauigkeitsanforderungen für die Entfernungsberechnung wird der Datentyp Punkt oder Würfel verwendet.

Sie können jetzt die Funktion earth_box verwenden, um beispielsweise Punkte innerhalb einer bestimmten Entfernung eines Standorts abzufragen.

1