sql >> Databáze >  >> RDS >> PostgreSQL

Jak nakonfigurovat PostgreSQL s Postgis pro výpočet vzdáleností

Krátká odpověď:

Stačí převést x,y hodnoty za běhu pomocí ST_MakePoint (pozor na režii!) a vypočítat vzdálenost od daného bodu, výchozí SRS bude WGS84 :

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

Pomocí GEOGRAPHY při použití GEOMETRY získáte výsledek v metrech dá to ve stupních. Znalost SRS párů souřadnic je samozřejmě pro výpočet vzdáleností nezbytná, ale pokud máte kontrolu nad kvalitou dat a souřadnice jsou konzistentní (v tomto případě vynechání SRS), není se čeho obávat. Začne to být složité, pokud plánujete provádět operace pomocí externích dat, ze kterých také neznáte SRS a mohou se lišit od vašich.

Dlouhá odpověď:

Pokud používáte PostGIS, neměli byste používat x,y na prvním místě v oddělených sloupcích. Sloupec geometrie / geografie můžete snadno přidat, když uděláte něco takového.

Toto je váš stůl ...

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

Obsahující následující údaje ..

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

Zde je návod, jak přidat sloupec typu geografie:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

Po přidání sloupce takto převedete souřadnice na geografii / geometrii a aktualizujete tabulku:

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

Pro výpočet vzdálenosti stačí použít funkci ST_Distance , takto (vzdálenost v metrech):

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

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

Pokud máte parametr polohy v WKT , můžete také použít:

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



  1. Řešení této snadné spouště

  2. Zámek metadat na MySQL 5.7, nemůžete najít proces zamykání?

  3. Volání členské funkce rowCount() na jiném než objektu

  4. Nainstalujte modul mysql pro python s pip