如何使用 Python 和 OSM 获取我附近的列表?

Dan*_*inn 2 python postgis geodjango openstreetmap

如果可以的话,我对生成图块并不真正感兴趣。相反,我正在寻找的是一种获得“我附近的东西”信息的方法,特别是水体和绿地,甚至是公共服务。

如果我有地图图块,我想我可以将它们解析为我想要的颜色,但我认为必须有更好/更智能的方法。不可能获得lat,lng属于类别A和附近的对象列表B

我是一名称职的 Python 程序员,但对 OSM 完全陌生。我知道我可以下载一个非常大的 XML 文件并拥有所有数据,但是访问它,特别是为了这种目的,对我来说是完全陌生的。

但是,我应该可以在 GeoDjango 设置中完全访问带有 PostGIS 的 PostgreSQL 数据库。

sca*_*cai 5

切片不是必需的,生成切片只是使用 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)

(结果可以下载为XMLJSON。您也可以使用overpass turbo将其可视化)

为了理解查询,您必须熟悉OSM 的基本元素节点方式关系)以及标记系统最常见的标记

如果您需要离线解决方案,那么您最好设置一个本地数据库。有关说明,您可以阅读switch2osm 上服务图块操作方法,只需跳过 Apache/mod_tile/mapnik 步骤。导入提取物而不是整个星球通常就足够了。相反,实时解析 XML 文件会非常缓慢,除非您的区域非常小,比如一个城市,并且您事先做了一些过滤