我怎样才能使用Python& OSM得到我附近的清单?

时间:2013-10-25 21:23:00

标签: python openstreetmap postgis geodjango

如果能帮助我,我对制作瓷砖并不感兴趣。相反,我正在寻找的是一种获取“我的附近”信息的方式,特别是水和绿地,甚至是公务员。

如果我有地图图块,我想我可以解析它们我想要的颜色,但我认为必须有更好/更聪明的方法。是否无法获取属于lat,lngA类别的B附近的对象列表?

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

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

2 个答案:

答案 0 :(得分:4)

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

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

以下是一个示例Overpass API查询,用于在给定的bounding box 50.6,7.0,50.65,7.05 <内查询所有商店停车位 / EM>:

(
  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;

(结果可以下载为XMLJSON。您还可以使用overpass turbo将其显示为

为了理解查询,您还必须熟悉OSM's basic elements节点方式关系)作为tagging systemmost common tags

如果您需要离线解决方案,那么最好设置一个本地数据库。对于一条指令,您可以阅读serving tiles howto on switch2osm并跳过Apache / mod_tile / mapnik步骤。导入extract而不是整个星球通常就足够了。实际解析XML文件将非常缓慢,除非你有一个非常小的区域,比如一个城市,你事先做了一些filtering

答案 1 :(得分:0)

GeoffBoeing 有一个非常漂亮的 OSMnx 包 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)