PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Искам да покажа в postgis файлове, които са по-малки от 10 000 метра, и тяхното изчислено разстояние

Най-лесният и бърз начин да го направите би бил да съхраните координатите като geometry или geography вместо разделени координатни двойки:

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

След това създайте основен индекс върху тази нова колона:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Използвайте ST_DWithin за заявка за разстояния, като ST_DistanceSphere или ST_Distance щене използвайте пространствения индекс!

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); 
  • Забележка:true във функциите ST_DWithin и ST_Distance означава use_spheroid=true , което е по подразбиране за geography параметри.

Демонстрация:db<>fiddle

Вижте също:Получаване на всички сгради в обхват от 5 мили от определени координати




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете последните 3 часа и групирайте по 5 минути

  2. защо PG::UniqueViolation:ГРЕШКА:дублираната стойност на ключа нарушава уникалното ограничение?

  3. postgresql:Защо трябва да посочвам -h localhost, когато изпълнявам psql?

  4. Поръчката по in view гарантира ли реда на select?

  5. Първи стъпки с PostgreSQL поточно репликация