PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Chcę wyświetlać w plikach postgis, które mają mniej niż 10 000 metrów i ich obliczoną odległość

Najłatwiejszym i najszybszym sposobem na to byłoby zapisanie współrzędnych jako geometry lub geography zamiast rozdzielonych par współrzędnych:

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

Następnie utwórz indeks gist dla tej nowej kolumny:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Użyj ST_DWithin dla zapytań o odległości, jak ST_DistanceSphere lub ST_Distance nie użyj indeksu przestrzennego!

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); 
  • Uwaga:true w funkcjach ST_DWithin i ST_Distance oznacza use_spheroid=prawda , który jest domyślny dla geography parametry.

Demo:db<>fiddle

Zobacz też:Zdobywanie wszystkich budynków w zasięgu 5 mil od określonych współrzędnych




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. funkcje tablicy biginteger

  2. PostgreSQL/JDBC i TIMESTAMP vs. TIMESTAMPTZ

  3. Jak podzielić tabelę postgres za pomocą tabeli pośredniej

  4. Nie można wstawić JSON z PostgreSQL do Elasticsearch. Pojawia się błąd — „Wyjątek podczas wykonywania zapytania JDBC”

  5. PHP Postgres:Uzyskaj identyfikator ostatniego wstawienia