【问题标题】:Query polygons within a map-view boundary in PostGIS在 PostGIS 中查询地图视图边界内的多边形
【发布时间】:2014-06-29 03:45:23
【问题描述】:

我是 PostGIS 新手。我有一个表格,其中包含多边形类型的区域边界。我想在谷歌地图上显示多边形。每次,当谷歌地图视图边界发生变化时,应用程序应该查询 PostGIS 以获取该地图视图中的任何多边形。有人可以指导我开始吗?

【问题讨论】:

  • ST_Intersects(viewbbox, geom) 其中 geom 是多边形表中的几何列,是您正在寻找的空间函数。但是,您需要提供更多信息,说明您如何从 Google 地图中显示此内容、查询此内容等。
  • 谢谢!当我显示时,我将使用 Lat/Lng 对简单地绘制多边形。因此,我的查询的输入是 NE 和 SE 坐标的 lat/lng。

标签: postgresql google-maps postgis


【解决方案1】:
Select * from Polygons where ST_Intersects(
    ST_MakeBox2D(ST_MakePoint(lon1, lat1), ST_MakePoint(lon2, lat2)),
    geom);

假设您有一个名为 Polygons 的表,并且您的几何字段名为 geom。您还需要确保在几何字段上有一个空间索引:

Create index ix_spatial_geom on Polygons using gist (geom);

如果您打算将 Postgis 中的数据加载到谷歌地图中,​​请查看 Postgis 中的 AS_GeoJSON 函数,它允许您直接从 Postgis 创建 GeoJSON,然后您可以直接将其加载到谷歌地图中,​​请参阅此例如:load GeoJSON in Google Maps

编辑:

您可以在导入数据时使用 -s 开关设置 SRID。强烈建议在创建列时显式设置列上的 SRID,或者在之后使用 UpdateGeometrySRID 运行更新,因为这有助于加强完整性,并支持从一个坐标系到另一个坐标系的转换。

在指定坐标系中获取数据后,您还可以使用ST_Transfrom 即时从一个坐标系转换到另一个坐标系,例如从 4326 到 3857(Google 地图图块的投影米)。

【讨论】:

  • 谢谢!!!但是,您的查询没有返回任何数据,尽管我知道在我传入的坐标内必须有多边形。调试它的最佳方法是什么?顺便说一句,我的多边形类型是 geom geometry(Polygon,3347)。
  • 这是我的查询。 select * from test2 where ST_Intersects(ST_MakeBox2D(ST_MakePoint(43.376395093503234, -80.09694519042966), ST_MakePoint(43.97234865260645, -78.72365417480466)),geom);我试过切换 lat/lng 位置。
  • 我想我找到了为什么查询没有返回任何内容。看起来几何数据类型中保存的坐标与谷歌地图坐标不匹配。
  • 我想我想通了。当我将我的 shp 导入 postgis 时,我没有使用正确的坐标系。这就是为什么坐标看起来与谷歌地图如此不同的原因。我使用 4326 再​​次导入数据,它可以工作。这是我的查询:SELECT * FROM test_2013_4326_f WHERE geom && ST_SetSRID(ST_MakeBox2D(ST_Point(-80.09694519042966, 43.376395093503234), ST_Point(-78.72365417480466, 43.97234865260645)),4326)
  • 您可能希望在导入时显式设置列上的 srid,或运行批量更新以在您使用的 SRID 中创建坐标,而不是在查询中使用 ST_SetSRID。我已经根据您的 cmets 更新了我的答案。
【解决方案2】:

ST_Intersects 可能是您想要的最佳解决方案。

如果您是 Postgis 新手,我建议您使用他们的 Postgis Cheat Sheet。本文档包含您现在可能会使用的所有 Postgis 基本和最常用的命令,它可以帮助您快速获得它,而无需阅读整本手册。

如何使用 ST_Intersect 以及所有最常用的替代方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2014-08-05
    • 2017-04-30
    • 2015-01-08
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多