PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgis SQL dla najbliższych sąsiadów

Po pierwsze, jeśli używasz szerokości i długości geograficznej, musisz użyć 4326.

UPDATE season SET geom = ST_PointFromText ('POINT(' || longitude || ' ' || latitude || ')' , 4326 ) ;

Następnie tworzysz indeks na polu geom

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

Wtedy dostaniesz sąsiadów kNN:

SELECT *,ST_Distance(geom,'SRID=4326;POINT(newLon newLat)'::geometry) 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

To zapytanie będzie korzystać z funkcji kNN indeksu gist (http://workshops. boundlessgeo.com/postgis-intro/knn.html ).

Jednak zwrócona odległość będzie wyrażona w stopniach, a nie metrach (projekcja 4326 używa stopni).

Aby to naprawić:

SELECT *,ST_Distance(geography(geom),ST_GeographyFromText('POINT(newLon newLat)') 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

Podczas obliczania ST_distance użyj typu geography. Odległość jest zawsze w metrach:

http://workshops.boundlessgeo.com/postgis-intro/geography.html

Cała ta funkcjonalność będzie prawdopodobnie wymagała najnowszej wersji Postgis (2.0+). Nie jestem jednak pewien.

Sprawdź to w celach informacyjnych https:// gis.stackexchange.com/questions/91765/improve-speed-of-postgis-nearest-neighbor-query/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić wartość do instrukcji select za pomocą JavaScript, szczególnie w przypadku korzystania z express i postgres?

  2. Zbiorcza funkcja INSERT Postgres przy użyciu argumentów JSON

  3. Importuj dane z Excela do PostgreSQL

  4. Znajdź nazwę hosta w postgresql

  5. Wydajność aplikacji opartych na PostgreSQL:opóźnienia i ukryte opóźnienia