我使用工具osm2pgsql -s modus将慕尼黑城市地图(从openstreetMap)加载到postgis
现在我怎样才能以最有效的方式让所有商店在100米范围内(a,b)说明某一点?
我知道它就像是
select name, shop
from planet_osm_point
where ST_DWithin(? ,ST_Point(a,b):geometry, 100)
非常感谢
答案 0 :(得分:0)
您的查询已经是查询所需数据的正确有效方法。
您只需要进行一次调整:函数St_Point
返回没有SRID的几何体(顺便说一下,不需要转换为几何体),但必须设置SRID,以避免错误:
错误:在具有不同SRID的两个GEOMETRIES上操作
使用postgis函数St_SetSrid
设置srid:
ST_SetSrid(ST_Point(a, b), srid)
如果使用默认选项运行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和http://spatialreference.org
关于SRID 900913:https://en.wikipedia.org/wiki/Web_Mercator