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

Chci zobrazit v postgis soubory, které jsou menší než 10 000 metrů a jejich vypočtenou vzdálenost

Nejjednodušší a nejrychlejší způsob, jak to udělat, by bylo uložit souřadnice jako geometry nebo geography místo oddělených dvojic souřadnic:

ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);

Poté vytvořte hlavní index nad tímto novým sloupcem:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Použijte ST_DWithin pro dotazování na vzdálenosti jako ST_DistanceSphere nebo ST_Distance nebude použijte prostorový index!

SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true); 
  • Poznámka:true ve funkcích ST_DWithin a ST_Distance znamená use_spheroid=true , což je výchozí hodnota pro geography parametry.

Demo:db<>fiddle

Viz také:Získání všech budov v dosahu 5 mil od zadaných souřadnic




  1. Jak získat datový typ sloupců tabulky mysql?

  2. DateTime dotaz na pouze rok na SQL Server

  3. vložit do uložené procedury s parametry MYSQL nefunguje

  4. Nejrychlejší způsob, jak provádět vnořené hromadné vkládání s použitím scope_identity()?