如何使用osm-postgis查询某个longitude/latitude附近的所有店铺?

How to query all shops around a certain longitude/latitude using osm-postgis?

我使用工具 osm2pgsql -s modus 将慕尼黑城市地图(来自 openstreetMap)加载到 postgis 中

现在我怎样才能以最有效的方式让所有商店都围绕某个点,比如 (a,b),在 100 米以内

我知道是这样的

select name, shop
from planet_osm_point
where ST_DWithin(? ,ST_Point(a,b):geometry, 100)

非常感谢

您的查询已经是一种正确高效的方式来查询您需要的数据。

你只需要一个调整:函数St_Point returns一个没有SRID的几何体(顺便说一下,不需要转换为几何体),但是必须设置SRID,以避免错误:

ERROR: Operation on two GEOMETRIES with different SRIDs

使用postgis函数St_SetSrid设置srid:

ST_SetSrid(ST_Point(a, b), srid)

另见 St_SetSrid

如果你 运行 osm2pgsql 使用默认选项,srid 应该是 900913:

SELECT name, shop
FROM planet_osm_point
WHERE ST_DWithin(way ,ST_SetSrid(ST_Point(a, b), 900913), 100);

有关 srid 和空间参考的更多信息,请参阅 https://en.wikipedia.org/wiki/SRID and http://spatialreference.org

关于 SRID 900913:https://en.wikipedia.org/wiki/Web_Mercator