sql >> Database >  >> RDS >> PostgreSQL

Ik wil in postgis-bestanden weergeven die kleiner zijn dan 10.000 meter en hun berekende afstand

De gemakkelijkste en snelste manier om dit te doen, is door de coördinaten op te slaan als geometry of geography in plaats van gescheiden coördinatenparen:

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

Maak daarna een gist-index over deze nieuwe kolom:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Gebruik ST_DWithin voor het opvragen van afstanden, zoals ST_DistanceSphere of ST_Distance zal niet gebruik de ruimtelijke 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); 
  • Opmerking:de true in de functies ST_DWithin en ST_Distance betekent use_spheroid=true , wat de standaard is voor geography parameters.

Demo:db<>fiddle

Zie ook:Alle gebouwen binnen een bereik van 5 mijl van de opgegeven coördinaten krijgen




  1. Verbinding maken met een online MySQL-database met behulp van VB.Net

  2. Weergaven in SQL begrijpen

  3. Compatibiliteit van SQL Server 2008 met SQL Server 2005

  4. UTF-8-compatibele afkapfunctie