Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何获取postGIS中给定gps坐标范围内的所有建筑物名称?_Postgresql_Range_Coordinates_Distance_Postgis - Fatal编程技术网

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

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

我正在制作一个全景查看器,连接到postgres db,我需要下载给定范围内的建筑物名称、街道名称、兴趣点。 如果你能解释一下这件事,我真的很感激


关于,

由于您没有给我们提供一些表格规格,因此必须提供一个人工示例

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,几何图形的数据类型是什么<代码>几何图形或
地理图形
?在这种情况下,我建议您对几何图形使用
地理图形
类型。看见我将编辑我的答案,以便在运行中进行转换;然而,改变数据模型可能是一个好主意。显然,不是所有的模型都有问题,你必须找出哪一个是错误的。