即时制作全景查看器,连接到postgres数据库,我需要下载给定范围内的建筑物名称,街道名称,兴趣点。 如果你能对这件事情有所了解,我真的很感激。
此致
答案 0 :(得分:3)
由于您没有给我们一些表规格,因此需要一个人为的例子。
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_makepoint
封装了st_setsrid
,它将坐标系信息添加到该点。 GPS通常在WGS84中,其SRID为4326.现在,我们必须将该点转换为点数据的坐标系 - 因此您必须知道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)
答案 1 :(得分:2)
尝试
select * FROM
LayerName
WHERE
ST_Dwithin(LayerName.the_geom,
GeomFromText('POINT(x,y)',-1)
, radius)
layerName是你的图层, 来自GPS的x,y, -1是你的srid, radius是缓冲区的半径(double)