Dan*_*inn 2 python postgis geodjango openstreetmap
如果可以的话,我对生成图块并不真正感兴趣。相反,我正在寻找的是一种获得“我附近的东西”信息的方法,特别是水体和绿地,甚至是公共服务。
如果我有地图图块,我想我可以将它们解析为我想要的颜色,但我认为必须有更好/更智能的方法。不可能获得lat,lng属于类别A和附近的对象列表B?
我是一名称职的 Python 程序员,但对 OSM 完全陌生。我知道我可以下载一个非常大的 XML 文件并拥有所有数据,但是访问它,特别是为了这种目的,对我来说是完全陌生的。
但是,我应该可以在 GeoDjango 设置中完全访问带有 PostGIS 的 PostgreSQL 数据库。
切片不是必需的,生成切片只是使用 OSM 数据的一种可能方式。
您需要在线还是离线解决方案?对于在线解决方案,您甚至不需要数据的本地副本。相反,您可以直接获取特定位置周围的数据。而不是使用主要用于编辑而不是批量查询的官方API,只需使用Overpass API,它速度更快并且具有复杂的查询语言。
这是一个示例 Overpass API 查询,用于查询给定边界框50.6,7.0,50.65,7.05内的所有商店和停车位:
(
node
["shop"]
(50.6,7.0,50.65,7.05);
node
["amenity"="parking"]
(50.6,7.0,50.65,7.05);
way
["shop"]
(50.6,7.0,50.65,7.05);
way
["amenity"="parking"]
(50.6,7.0,50.65,7.05);
relation
["shop"]
(50.6,7.0,50.65,7.05);
relation
["amenity"="parking"]
(50.6,7.0,50.65,7.05);
);
(
._;
>;
);
out;
Run Code Online (Sandbox Code Playgroud)
(结果可以下载为XML或JSON。您也可以使用overpass turbo将其可视化)
为了理解查询,您必须熟悉OSM 的基本元素(节点、方式和关系)以及标记系统和最常见的标记。
如果您需要离线解决方案,那么您最好设置一个本地数据库。有关说明,您可以阅读switch2osm 上的服务图块操作方法,只需跳过 Apache/mod_tile/mapnik 步骤。导入提取物而不是整个星球通常就足够了。相反,实时解析 XML 文件会非常缓慢,除非您的区域非常小,比如一个城市,并且您事先做了一些过滤。