利用Python的folium包绘制城市道路图的实现示例

论坛 期权论坛 脚本     
niminba   2021-5-23 04:09   1092   0

写在前面

很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我先放上这两个在线地图开放平台的web API的地址链接:

百度地图开放平台

高德地图开放平台

基于这两个平台,博主进行了一系列的开发研究工作,本文介绍其中一项技术,如何用folium包绘制城市道路图,当然,也可绘制非城市道路图,只要提供正确的路名就行了。

开发工具:

  • Python3.7
  • Spyder编译器(也可以用pycharm,不过建议用Spyder,因为编译过程中产生的变量太多,基本上都是json数据,我都是一边看一边写,这里Spyder优势明显)
  • chrome浏览器

folium介绍及相关设置

folium基础功能

folium的开发包在这里

简单来说,它是一个地理信息可视化的包,目前除了pyecharts,我用的最多的就是这个包,支持在在线地图上添加点、线、面等要素,而且还支持画热力图,不过热力图的效果真心不咋地,我看中的是它添加点、线、面形状的功能,而且各种要素可以设置颜色、大小、文字标记等属性,可视化效果还是不错的。这篇博客,也是应用了它画线的功能,绘制道路轮廓线。


比较遗憾的是,目前folium支持的地图底图有限,像openstreetmap是支持的,高德也支持,但不支持百度地图。当然,不支持百度地图并不能限制咱们开发者的脚步,本博客中也有相关介绍。

pip install folium

使用之前,先安装一下这个包。

folium参数设置

先看两行代码:

import folium
line_road = folium.Map(location=[31.596730,120.233516],zoom_start=15,
      tiles = 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
      attr = 'default')
  • location参数,设置展示地图的中心坐标点,就是说,比如你想看无锡市,可以设置成无锡市市中心的经纬度坐标
  • zoom_start是地图缩放等级,最高差不多可以到19还是20,如果想看大场景,就设小一点,想看局部地图就设大一点
  • tiles这个参数很重要,设置的是你的地图格式,默认的是OpenStreetMap,我这里把它改成了'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',表示我用的是高德地图作为底图。为啥要改呢,因为每个不同的地图公司,用的坐标系不一样,高德地图和google地图、soso地图、aliyun地图、mapabc地图所用坐标相同,都是国测局(GCJ02)坐标,和百度地图用的坐标系不一样,如果直接拿百度坐标系下的经纬度画在高德地图上,那就会整体偏移,使用之前必须进行坐标转换
  • 其他用默认参数

获取道路参数

本博客的目的是画道路的轮廓图,首先必须得有数据才能画图。博主知道,目前这些地图公司,都是自己把车在开在路上去采集路上的经纬度,只要我获取到了这些经纬度,那我不就能绘制道路了吗?本着这个想法,我就到处搜索资料,开发者的潜能是无限了,同样在CSDN上我找到了一篇博客,链接在这里 ,真的很棒,不过他是用js写的,无所谓,方法是通的,用这篇博文提供的接口,真的实现了在地图上绘制道路的功能。

但是,但是,但是,,,

用了一段时间后,这个功能被封了,为此,我特意联系了高德地图开发者中心,他们的解释如下:

意思就是,这个功能用不了了,花钱也别想用。
其实很正常,这个功能太牛逼了。
虽然用不了了,但我还是介绍一下怎么实现的,万一以后又能用了呢。

?&ik[#Юk.i{^Xh>[KnK{>i#УУ7GFWBv6V"#"7&3GG3F&'22V"cS#SS3F##ccc#cS336cVfcr##УУZ^YNYYj~iXyNX[nKnK8##ЮiK~y{n.#УУ7GFWBv6V"#"7&3GG3F&'22V"cvFVFf&3vS&63#C6C6VC#cFBr##УУii >8>8iJ:;Kn>X*ihi[hKKiKKnKY##Ю[ ZXK##УУK[hKnKYKzYNKnZ[^>KnYNzx^KKyJ;;>X{iKnni~KKZyJ8k*i8i+K.k*X^yh{~{Xh{~{.h;>XKXnYYK:iiKyNIiY+KKKNkXKyZKNkhxnYYKXZXi.KXKXZx[Kn8##ЮYkhXX[>zxKK[~KK{.h KyZi8~XKnynYYj~{;KyN>zni[hnXVJnYYJynYYj~{;KyN{nYj~i[hiKZyNn[ .XK[YiYj~hyNh8#УG66fc#G&ynYj~{;KyNYj~x+hh[j~{;KyNYj~x+7G&7^X&VcGG326W'f6RFRfW'B"&V&WFW&r"F&vWCx'#УУ^yKK>zУb673&66У&R673''W6#Ц6g&&"VW7BW&VVfТЦFVb&GT$FFТfFТfFТW&vGG37Fc27Fr&FRfW'Bb3c36FVbbf673GRurfWWrRFFFFТ&WW&V&Т&W2&WB6ТFV6&W2Т6FFVv6F7BrТ6F7BfBТ6F6F6F6FТV6FVТ&WGW&&SУFcУxNyNhz[hXni>zz>xZJ~ZKKX{[yNZ^j #УУ7GFWBv6V"#"7&3GG3F&'22V"cc3Sccfc6CFSCvSVc632r##УУ>Yi[hj ~ZNyiK>z#ЮyJyYNikk9^iyKYYy{>i'#УУ7GFWBv6V"#"7&3GG3F&'22V"cSVSc3&CsSF3FSC#S6&3vCr##УУIY:ny{n.#УУ7GFWBv6V"#"7&3GG3F&'22V"cS&cCfV#S6VcScsv#sf3V&Sbr##УУn.Kh.KXZK[IKn8##ЮXhZJ~Zy.iNhJynYj~{;KyN{nx+yKX[Yi^iXi#УУ7GFWBv6V"#"7&3GG3F&'22V"cCscCvf3VS&3vc#3#C&V&Csc3r##УУXk*NKX K^Yj~h[莘xh8.8#УG66fc#G&{>G&7jX[>KyJFFf{XnY>zNih~z[ K{NZIyX[>XyJFFf{XnY>z^Z{J.zKK^XNih~zhn{~{XyNyX[>ih~z[ZJ~Z^YZIiJ
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP