sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL configureren met Postgis om afstanden te berekenen

Kort antwoord:

Converteer gewoon uw x,y waarden on-the-fly met behulp van ST_MakePoint (let op de overhead!) en bereken de afstand vanaf een bepaald punt, de standaard SRS is WGS84 :

SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
                   ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;

GEOGRAPHY gebruiken u krijgt het resultaat in meters, terwijl u GEOMETRY . gebruikt zal het in graden geven. Natuurlijk is het noodzakelijk om de SRS van coördinatenparen te kennen voor het berekenen van afstanden, maar als u de gegevenskwaliteit onder controle hebt en de coördinaten consistent zijn (in dit geval de SRS weglaten), hoeft u zich geen zorgen te maken. Het wordt lastig als u van plan bent om bewerkingen uit te voeren met externe gegevens, waarvan u ook niet op de hoogte bent van de SRS en deze kan verschillen van de uwe.

Lang antwoord:

Welnu, als u PostGIS gebruikt, zou u x,y niet moeten gebruiken in de eerste plaats in gescheiden kolommen. U kunt eenvoudig een kolom geometrie/geografie toevoegen door zoiets als dit te doen.

Dit is jouw tafel ...

CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);

Met de volgende gegevens ..

INSERT INTO places VALUES ('Budva',18.84,42.92),
                          ('Ohrid',20.80,41.14);

Zo voegt u een kolom voor het type geografie toe:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

Zodra uw kolom is toegevoegd, converteert u als volgt uw coördinaten naar geografie / geometrie en werkt u uw tabel bij:

UPDATE places SET geo = ST_MakePoint(lon,lat);

Om de afstand te berekenen hoef je alleen maar de functie ST_Distance te gebruiken , als volgt (afstand in meters):

SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;

   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)

Als u uw locatieparameter heeft in WKT , kunt u ook gebruiken:

SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)



  1. Geo-afstand MySQL

  2. ORA-1114 Datapatch uitvoeren

  3. Queryresultaten retourneren in een vooraf gedefinieerde volgorde

  4. Het aantal mislukte inlogpogingen beperken