我正在尝试创建一个用于存储坐标的数据库
让我们说X有:纬度20°20'20.00'',经度20°20'20.00''E,1英里范围。
Y具有:纬度20°21'21.00,经度20°21'21.00''
我想知道Y位置是否在X范围内。
我一直在努力寻找管理方法;我遇到了四叉树,k-d树,但我找不到在数据库中表示它的方法。
我终于偶然发现了PostGIS,但我不知道如何创建和管理简单的纬度经度交互。
答案 0 :(得分:2)
您要做的第一件事是详细了解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);
您的lat,long对作为loc
类型进入geography
列; PostGIS将使用该数据进行空间分析。您现在可以找到X点范围内的所有点(例如,使用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;