sql >> Databasteknik >  >> RDS >> PostgreSQL

Jag vill visa i postgis filer som är mindre än 10 000 meter och deras beräknade avstånd

Det enklaste och snabbaste sättet att göra det är att lagra koordinaterna som geometry eller geography istället för separerade koordinatpar:

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

Efter det skapar du ett huvudindex över den här nya kolumnen:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Använd ST_DWithin för att söka avstånd, som ST_DistanceSphere eller ST_Distance kommer inte använd det rumsliga indexet!

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); 
  • Obs:den true i funktionerna ST_DWithin och ST_Distance betyder use_spheroid=true , vilket är standard för geography parametrar.

Demo:db<>fiddle

Se även:Hämta alla byggnader inom räckvidd av 5 miles från angivna koordinater




  1. php Fråga INNER gå med i tabeller

  2. Migrera en Oracle-databas till MySQL på AWS, del 2

  3. matchande tabellnamn med visa tabeller

  4. ALTER TABLE-satsen stod i konflikt med FOREIGN KEY-begränsningen