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

намерете най-близкото местоположение по географска ширина и дължина в postgresql

PostGIS

Не съхранявайте шир и дължина на такава маса. Вместо това използвайте PostGIS геометрия или географски тип .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

INSERT INTO foo (geog)
  VALUES (ST_MakePoint(x,y));

Сега, когато трябва да го направите заявка, можете да използвате KNN (<-> ) което всъщност ще направи това на индекс.

SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Във вашата заявка изрично имате HAVING distance < 5 . Можете да направите това и в индекса.

SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Това гарантира, че нищо не се връща, ако всички точки се намират извън distance_in_meters .

Освен това x и y са десетични числа ST_MakePoint(46.06, 14.505)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите броя на INNER присъединяването и броя на броя на всички елементи?

  2. postgresql мигрира JSON към JSONB

  3. Как да избягате от низ, докато съвпадате с шаблон в PostgreSQL

  4. Променете типа на колоната и задайте не нула

  5. как да изключите Heroku SQL регистрационни файлове от postgres