postgresql - 如何从postGIS中的给定gps坐标获取范围内的所有建筑物名称?

标签 postgresql range coordinates distance postgis

我正在制作一个全景查看器,连接到一个 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/

相关文章:

postgresql - postgres中excel的hour()函数(等价)

sql - postgres 返回的结果不正确

java - 如何快速计算在我的点的给定距离内有哪些点

python - geopy.distance.geodesic() 但它说 TypeError : unsupported operand type(s) for +=: 'int' and 'tuple'

python - 是否可以在没有迭代器变量的情况下实现 Python for range 循环?

rust - 我是否需要担心将Z轴用作上/下的任何问题?

postgresql - Postgres 大文本搜索建议

postgresql - 是否可以在 Heroku Postgresql 上创建数据库角色?

python - "for i in range (...)"之前是什么

c++ - 循环范围内的初始化列表