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

Jak mohu zadat dotaz na všechny řádky v okruhu 5 mil od mých souřadnic?

Chcete „všechny řádky v okruhu 5 mil od souřadnice“ , takže to není přesně problém K-nearest-neighbour (KNN). Souvisí, ale váš případ je jednodušší. "Najít 10 řádků nejblíže mým souřadnicím" by byl problém KNN.

Převeďte své souřadnice na geography hodnoty:

ST_SetSRID(ST_MakePoint(longitude, latitude),4326)::geography

Případně můžete použít jednodušší geometry typ. Zvažte:
4.2.2. Kdy použít typ geografických dat před datovým typem geometrie

Pak máme tabulku jako:

CREATE TABLE tbl (
  tbl_id serial PRIMARY KEY
, geog geography NOT NULL
);

Vše, co potřebujete, je ST_DWithin() - a prostorový index aby to bylo rychlé:

CREATE INDEX tbl_geog_gist ON tbl USING gist(geog);

Dotaz:

SELECT *, ST_Distance(c.x, geog) AS distance  -- distance is optional
FROM   tbl t, (SELECT ST_GeographyFromText('SRID=4326;POINT(-72.63 42.06)')) AS c(x)
WHERE  ST_DWithin(c.x, geog, 8045)  -- distance in meter
ORDER  BY distance; -- order is optional, you did not ask for that

Nebo můžete použít své původní sloupce a vytvořit funkční index ...Toto a další podrobnosti v této úzce související odpovědi na dba.SE:

  • Seřadit podle vzdálenosti


  1. Získání a instalace Microsoft SQL Server Management Studio

  2. Oznámení ClusterControl 1.4.1 - vydání ProxySQL

  3. Počítání počtu spojených řádků v levém spojení

  4. Analýza I/O výkonu pro SQL Server