代码之家  ›  专栏  ›  技术社区  ›  Daniel Quinn

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

  •  2
  • Daniel Quinn  · 技术社区  · 11 年前

    如果可以的话,我对生成瓦片并不感兴趣。相反,我正在寻找一种获得 “我附近有什么” 这类信息,特别是水体和绿地,甚至是公务员。

    如果我有地图瓦片,我想我可以解析它们以获得我想要的颜色,但我认为一定有更好/更智能的方法。是否可以获取附近的对象列表 lat,lng 属于类别 A B ?

    我是一名称职的Python程序员,但对操作系统管理完全陌生。我知道我可以下载一个非常大的XML文件 拥有所有数据 ,但访问它,尤其是出于这种目的,对我来说是完全陌生的。

    然而,我应该可以完全访问PostgreSQL数据库,并在GeoDjango设置中使用PostGIS。

    2 回复  |  直到 11 年前
        1
  •  5
  •   scai    11 年前

    瓦片不是必需的,生成瓦片只是使用OSM数据的一种可能方式。

    您需要在线解决方案还是离线解决方案?对于在线解决方案,您甚至不需要数据的本地副本。相反,您可以直接获取特定位置周围的数据。而不是使用官方 API 主要用于 编辑 不用于批量查询,只需使用 Overpass API 速度快得多,功能复杂 query language .

    下面是一个Overpass API查询示例,用于查询所有 商店 停车场 在给定的内部 bounding box 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;
    

    (结果可以下载为 XML JSON 。您也可以使用 overpass turbo )

    为了理解查询,您必须熟悉 OSM's basic elements ( 节点 , 方式 关系 )以及 tagging system 以及 most common tags .

    如果您需要离线解决方案,那么您最好设置一个本地数据库。有关说明,您可以阅读 serving tiles howto on switch2osm 只需跳过Apache/mod_tile/mapnik步骤。正在导入 extract 而不是整个星球就足够了。相反,实时解析XML文件会非常慢,除非你有一个非常小的区域,比如一个城市,并且你做了一些 filtering 预先

        2
  •  0
  •   Aaditya Bhardwaj    4 年前

    有一个非常漂亮的包装OSMnx由Geoff Boeing提供 https://geoffboeing.com/tag/osmnx/ 您可以通过OSM轻松获得附近的所有便利设施。

    import osmnx as ox
    import geopandas as gpd
    place_name = "" (geocoding of polygon)
    tags = {'amenity': 'charging_station'}
    ox.geometries_from_place(place_name, tags)