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

vyhledejte nejbližší polohu podle zeměpisné šířky a délky v postgresql

PostGIS

Neskladujte lat a long na takovém stole. Místo toho použijte geometrii PostGIS nebo typ geografie .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

INSERT INTO foo (geog)
  VALUES (ST_MakePoint(x,y));

Nyní, když se potřebujete dotazovat, můžete použít KNN (<-> ) který to ve skutečnosti provede na indexu.

SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

V dotazu máte explicitně HAVING distance < 5 . Můžete to udělat i na indexu.

SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

To zajistí, že se nic nevrátí, pokud všechny body leží mimo distance_in_meters .

Navíc x a y jsou desetinná čísla ST_MakePoint(46.06, 14.505)



  1. Použití konfiguračních tabulek k definování skutečného pracovního postupu

  2. Zobrazují se pouze data z databáze mysql, která je z dnešního data

  3. Funkce měsíců mezi dvěma daty

  4. Mysql měsíc - rok srovnání