Postgresql 如何获取postGIS中给定gps坐标范围内的所有建筑物名称?
我正在制作一个全景查看器,连接到postgres db,我需要下载给定范围内的建筑物名称、街道名称、兴趣点。 如果你能解释一下这件事,我真的很感激Postgresql 如何获取postGIS中给定gps坐标范围内的所有建筑物名称?,postgresql,range,coordinates,distance,postgis,Postgresql,Range,Coordinates,Distance,Postgis,我正在制作一个全景查看器,连接到postgres db,我需要下载给定范围内的建筑物名称、街道名称、兴趣点。 如果你能解释一下这件事,我真的很感激 关于,由于您没有给我们提供一些表格规格,因此必须提供一个人工示例 WITH yourpoint AS ( SELECT st_transform(st_setsrid(st_makepoint(yourlon, yourlat), 4326), yourgeomsrid) AS point ) SELECT buil
关于,由于您没有给我们提供一些表格规格,因此必须提供一个人工示例
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_setrid
封装了st_makepoint
,将坐标系信息添加到该点。GPS通常位于WGS84中,其SRID为4326。现在,我们必须将该点转换为点数据的坐标系-因此您必须知道SRID
在WHERE
子句中可以找到附近的建筑物ST_Dwithin
查找彼此之间距离小于400(以坐标系单位测量)的所有几何图形
有关详细信息,请参阅
编辑 如果坐标在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)
由于您没有给我们提供一些表格规格,因此必须提供一个人工示例
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_setrid
封装了st_makepoint
,将坐标系信息添加到该点。GPS通常位于WGS84中,其SRID为4326。现在,我们必须将该点转换为点数据的坐标系-因此您必须知道SRID
在WHERE
子句中可以找到附近的建筑物ST_Dwithin
查找彼此之间距离小于400(以坐标系单位测量)的所有几何图形
有关详细信息,请参阅
编辑 如果坐标在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)
试一试
图层名称是您的图层,
x、 来自全球定位系统的y,
-1是您的srid,
半径是缓冲区的半径(双倍)试试看
图层名称是您的图层,
x、 来自全球定位系统的y,
-1是您的srid,
radius是缓冲区的半径(双倍)您好,navid,我正在从事此项目,对postGIS来说是个新手,由于时间限制,我想问您是否希望参与此项目的postgres和postGIS部分。谢谢。我没有问题,你可以联系navid。benami@gmaili收到传递失败消息,此电子邮件添加是否正确?谢谢:D不:|:D纳维。behnami@gmail.comhi纳维德,我正在做这个项目,对postGIS来说是个新手,由于时间限制,我想问你是否愿意参加这个项目的postgres和postGIS部分。谢谢。我没有问题,你可以联系navid。benami@gmaili收到传递失败消息,此电子邮件添加是否正确?谢谢:D不:|:D纳维。behnami@gmail.comthanksthilo,所以至少当我运行这段SQL代码时,不会得到任何错误,但我似乎不知道srid和其他转换在这里是如何工作的……因为我得到了0行作为返回。我怎么知道应该为“yourgeomsrid”放什么srid?关于400,我又该如何计算单位呢?非常感谢您耐心地回答一个noob:)好吧,您的几何图形在数据库中是什么SRID<代码>从建筑中选择st_srid(the_geom)应该告诉您。距离的单位取决于使用的坐标系。好的,那么您的几何图形也在WGS84中。啊,这引出了另一个问题:你使用的是什么PostGIS版本?如果>=1.5,几何图形的数据类型是什么<代码>几何图形或
地理图形
?在这种情况下,我建议您对几何图形使用地理图形
类型。看见我将编辑我的答案,以便在运行中进行转换;然而,改变数据模型可能是个好主意。显然不是所有的-你必须找出哪一个是错误的。谢谢你,所以至少当我运行这段SQL代码时,没有得到任何错误,但我似乎不明白srid和其他转换在这里是如何工作的…因为我得到了0行作为回报。我怎么知道应该为“yourgeomsrid”放什么srid?关于400,我又该如何计算单位呢?非常感谢您耐心地回答一个noob:)好吧,您的几何图形在数据库中是什么SRID<代码>从建筑中选择st_srid(the_geom)应该告诉您。距离的单位取决于使用的坐标系。好的,那么您的几何图形也在WGS84中。啊,这引出了另一个问题:你使用的是什么PostGIS版本?如果>=1.5,几何图形的数据类型是什么<代码>几何图形或地理图形
?在这种情况下,我建议您对几何图形使用地理图形
类型。看见我将编辑我的答案,以便在运行中进行转换;然而,改变数据模型可能是一个好主意。显然,不是所有的模型都有问题,你必须找出哪一个是错误的。