本文主要参考:https://zhuanlan.zhihu.com/p/93239773?utm_source=wechat_session&utm_medium=social&utm_oi=677334979525218304
做地理信息系统,交通仿真与优化的小伙伴们,很多时候需要将地理数据可视化,以更直观的展示所做的课题。也就是需要把地理数据转化成类似下面的图片,并且能够完成下面的操作:
下面的图就是纽约市曼哈顿区某个月出租车出行数据的经纬度信息统计。
接下来我们来逐步介绍如何画出上面那样的图。
整个过程分为如下步骤:
下载纽约市出租车出行数据,网址纽约市出租车出行数据http://www.nyc.gov/html/tlc/html/about/trip_record_%20data.shtml
也就是这个界面
数据是csv格式的,用python读取非常简单;
在OpenStreetMap
上下载纽约市曼哈顿区的路网数据OpenStreetMap网址
用Python读取地图数据的XML文件,用Python的工具包networkX
实现地图数据的可视化。
我们进入OpenStreetMap
的主页,是这样的
进入主页以后,我们可以搜索我们要下载的地区,然后跳转至目标地理位置,用设置上下左右经纬度
的方法来导出数据,操作如下:
然后会进入手动选取目标区域并导出
界面,当然了,这些经纬度也可以手动输入具体值。具体如下图
就这?当你搓搓手准备迎接数据的时候,你会发现出现了面的问题:
You requested too many nodes (limit is 50000). Either request a smaller area, or use planet.osm
这就尴尬了,50000个点的限制当然获得不了整个manhattan的数据了。这条路就cut掉把。找了很多帖子,终于找到了下面的帖子,https://zhuanlan.zhihu.com/p/93239773?utm_source=wechat_session&utm_medium=social&utm_oi=677334979525218304
完美的解决了这个问题。
我们仅用Query
的方法,就可以完美的解决上述问题,主要分为下面几个步骤:
overpass-api
界面http://www.overpass-api.de/index.html,选择Query and Convert Forms
选项卡ID
ID
获取路网数据。下面我们来逐步演示获取manhattan地图数据的步骤。
进入http://www.overpass-api.de/index.html,选择Query and Convert Forms
选项卡
在Overpass API Query Form
下方的输入框中输入代码(用来获取城市的ID):
<osm-script>
<query type="relation">
<has-kv k="boundary" v="administrative"/>
<has-kv k="name" v="Manhattan"/>
query>
<print/>osm-script>
其中:
k="boundary" v="administrative"
表示城市的管辖边界k="name" v="Manhattan"
表示地区名字是Manhattan如果不确定,可以在OpenStreetmap中去核对
如果是中国的城市,比如深圳,那代码相应的改成
<osm-script>
<query type="relation">
<has-kv k="boundary" v="administrative"/>
<has-kv k="name:zh" v="深圳市"/>
query>
<print/>osm-script>
输入以后点击Overpass API Query Form
右下角的Query
按钮
点击以后,浏览器会自动下载一个名为interpreter
的文件,这个文件内容的格式是XML
的,里面记录了我们想要的城市的ID
我们用超级记事本notepad++
打开这个文件,里面内容是这样的
这个文件里
这个8398214
就是manhattan的城市ID
.这里有个坑,这个文件里有三个
,我们选的是这个id
最大的。
一般情况下,我们得到的文件里只有一个
,如果有多个的话,就选择
框柱的内容最多的那个
上面我们拿到了城市ID
,接下来我们用城市ID来获得城市的路网数据。
我们在
在Overpass API Query Form
下方的输入框中输入代码(用来获取城市的路网数据):
<osm-script timeout="1800" element-limit="100000000">
<union>
<area-query ref="3608398124"/>
<recurse type="node-relation" into="rels"/>
<recurse type="node-way"/>
<recurse type="way-relation"/>
union>
<union>
<item/>
<recurse type="way-node"/>
union>
<print mode="body"/>
osm-script>
其中,我们只需要把
中3608398124
这个数字改成3600000000
加上城市ID
即可。
输入以后点击Overpass API Query Form
右下角的Query
按钮,就可以看到浏览器在慢慢下载城市数据了,下载的文档名仍然是interpreter
,仍然是XML
文件。
下载完成后,大功告成,我们将最终获得的manhattan路网数据用python读取,就可以开心的做可视化啦。
再次感谢
https://zhuanlan.zhihu.com/p/93239773?utm_source=wechat_session&utm_medium=social&utm_oi=677334979525218304
的帖子。