我正在制作一个全景查看器,连接到一个 postgres 数据库,我需要下载给定范围内的建筑物名称、街道名称、兴趣点。 如果您能对此事有所了解,我将不胜感激。
问候,
最佳答案
由于您没有给我们一些表格规范,因此必须使用人工示例。
WITH yourpoint AS (
SELECT
st_transform(st_setsrid(st_makepoint(yourlon, yourlat), 4326), yourgeomsrid) AS point
)
SELECT
building.name
FROM
building, yourpoint
WHERE
ST_Dwithin(building.the_geom, yourpoint.point, 400)
现在,让我们来看看有趣的部分。首先,我们需要一个几何体来将您给定的点容纳在正确的坐标系中。我创建了一个生成这样一个点的子语句 (CTE)。不过,也许重点在您的数据库中。
重要提示:为了计算距离,您指定的点和几何图形必须位于同一坐标系中。因此,我用st_setsrid
封装了st_makepoint
,为point添加了坐标系信息。 GPS 通常采用具有 SRID 4326 的 WGS84 格式。现在,我们必须将该点转换为您的点数据的坐标系 - 因此您必须知道 SRID。
查找附近建筑物的所有魔法都发生在 WHERE
子句中。 ST_Dwithin
查找彼此距离小于 400(以坐标系单位测量)的所有几何图形。
参见 the postgis manual了解详情。
编辑
如果您的坐标采用 WGS84 格式,则应使用地理数据类型:
WITH yourpoint AS (
SELECT
geography(st_setsrid(st_makepoint(yourlon, yourlat), 4326)) AS point
)
SELECT
building.name
FROM
building, yourpoint
WHERE
ST_Dwithin(Geography(building.the_geom), yourpoint.point, 400)
关于postgresql - 如何从postGIS中的给定gps坐标获取范围内的所有建筑物名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666945/