使用PostgreSQL-PostGIS进行坐标

时间:2015-04-23 00:35:18

标签: postgresql postgis

我正在尝试创建一个用于存储坐标的数据库

让我们说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,但我不知道如何创建和管理简单的纬度经度交互。

1 个答案:

答案 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;