当前位置: 首页 > 知识库问答 >
问题:

使用PostGIS根据给定的纬度和经度查找记录,这些纬度和经度在2英里半径内相交并绕圈?

杨轶
2023-03-14

我有一个Postgres表,其中包含一些使用shapefile创建的html" target="_blank">数据。我需要找到所有在给定纬度和经度半径2英里范围内相交的记录。我使用了一些查询,包括下面这个。

从us_census_zcta中选择 ST_INTERSECTS(几何、圆(点(40.730610, -73.935242), 2));

但是没有一个管用。我到底做错了什么?如何才能得到我需要的结果?

SRID为4269(NAD 83)。

编辑:在迈克·奥加内克(Mike Organek)指出我在上述问题中改变了方向。然后我尝试了一些事情,下面的查询给了我1条记录。

SELECT*FROM us_census_zdata WHERE ST_INTERSECTS(geom::几何体,ST_SETSRID(ST_POINT(-73.935242,40.730610),4269)::几何体);

但是我怎样才能使用Circle并找到在给定纬度2英里半径内相交的记录呢?

共有1个答案

宋景福
2023-03-14

您要寻找的是< code>ST_DWithin,它将检查记录是否在给定的缓冲区内相交。为了与英里一起使用,您最好将< code>geometry列转换为< code>geography,因为它随后会以米为单位计算距离:

对于地理:单位以米为单位,距离测量默认为 use_spheroid=true。为了更快地进行评估,请使用 use_spheroid=false 在球体上进行测量。

SELECT * FROM us_census_zcta 
WHERE 
  ST_DWithin(
    geom::geography, 
    ST_SetSRID(ST_MakePoint(-73.935242, 40.730610), 4269)::geography,
    3218.688); -- ~2 miles

请记住,如果索引设置不正确,这种转换可能会影响查询性能。

另请参见:< code >获取指定坐标5英里范围内的所有建筑物

 类似资料:
  • 问题内容: 我有一个目前约有1万行的数据库。它们都基于邮政编码的中心具有经度/纬度。我发现了一个我正在尝试扩展的查询,但是总的来说它在某种程度上运行良好。但是,在下面的示例中,我试图找到半径25英里以内的事物,这似乎在大多数情况下都是可行的。我的大部分结果都在25英里标准范围内,但是我得到的结果很少,偏离了86英里到800英里。 示例:这是我的中心经度:37.2790669,-121.874722

  • 我试图使用Hibernate Spatial中的谓词在X英里(用户定义)的半径范围内进行搜索。 虽然这类问题以前被问过,但在谓词中只问过一次,而且可能不是最新的,因为它不起作用。我必须能够使用谓词,而不是HQL。 我通过另一个答案找到了如何为PostGIS的WITHIN关键字设置谓词,但无法运行查询。 安装结束后,我声明错误输出和包版本。 以下是我的模式中的内容: 在我的模型中: 其中更新位置在l

  • 问题内容: 我有一个按照以下示例结构的mysql表: 现在我想做的是创建一个查询,该查询将在搜索位置的选定公里内选择结果 因此,假设他们搜索“灰色河流”,然后选择“在20公里以内找到所有结果” 它显然应该选择“灰河”,但也应根据经度和纬度选择灰河20公里以内的所有位置。 我真的不知道该怎么做。我已经读过haversine公式,但不知道如何将其应用于mysql SELECT。 任何帮助将非常感激。

  • 问题内容: 我正在编写一个小程序,为了提高效率,我需要能够找到数组中最接近的纬度和经度。 假设您有以下代码: 我得到的结果是: 它应该是(在此示例中,列表中的最后一个对象) 我知道如何获取单个值的最接近单元格,但我想让lambda函数考虑这两个值,但我不确定如何做到。救命? 问题答案: 为了正确计算地球上各点之间的距离,您需要使用Haversine公式。使用此答案中提供的Python实现,您可以像

  • 我正在尝试检索我的地理位置的最新长使用一个谷歌API。此api接受蜂窝塔信息。尽管我提供了所有的信息,但在很长一段时间内,我都没有得到正确的信息。 https://developers.google.com/maps/documentation/geolocation/intro 有人用这个API找到lat long吗?GoogleGEO定位API的精确度有多高?

  • 在我的应用程序中,我将Yii与PostgreSQL和PostGIS一起使用。我有一个具有字段“location”的模型“user”。Location-field的内容对人来说毫无意义,但是Postgres可以使用st_astext-method将Location-field的值转换为经度和纬度。我已经在我的模型中为经度和纬度创建了虚拟字段。当我保存我的模型时,我使用beforeSave和after