2015-04-23 5 views
0

Я пытаюсь создать базу данных для хранения координатИспользование PostgreSQL-PostGIS для координат

Допустим, X имеет: Широта 20 ° 20'20.00 '', долгота 20 ° 20'20.00''E, с 1 мили диапазон.

Y имеет: Широта 20 ° 21'21.00, Долгота 20 ° 21'21.00’ »

Я хочу знать, находится ли Y местоположение в пределах диапазона X.

Я пытался в течение нескольких дней, чтобы найти способ управления, что; Я столкнулся с деревом quad tree, k-d tree, но не смог найти способ представить его в базе данных.

я, наконец, наткнулся на PostGIS, но я не знаю, как создавать и управлять простыми взаимодействия широта и долгота йота его.

ответ

1

Первое, что вы хотите сделать, это узнать больше о PostGIS.

После установки расширения postgis, вы можете использовать geography тип для ваших целей:

CREATE TABLE locations (
    id  serial PRIMARY KEY, 
    loc  geography(POINT, 4326), -- See PostGIS docs for type modifiers 
    rng  double precision, -- in miles, PostGIS uses km 
    ... 
); 

CREATE INDEX locations_geo ON locations USING GIST (loc); 

Ваших латы, длинные пары идут в loc колонну в виде geography типа; PostGIS будет проводить пространственный анализ с этими данными. Теперь вы можете найти все точки в пределах диапазона Х-точки (например, id=12) следующим образом:

SELECT src.id AS src, src.rng, near.* 
FROM locations near 
JOIN locations src ON ST_DWithin(src.location, near.location, src.rng * 0.6215) -- miles to km 
WHERE src.id = 12; 
Смежные вопросы