folium是一个Python的绘制地图神器,基于leaflet映射。目前有非常多的瓦片图源可以选择,如自带有OpenStreetMap、Mapbox Bright、Mapbox Control Room、Stamen (Terrain, Toner, and Watercolor)、Cloudmade、Mapbox和CartoDB。以及可以通过这里接入更多的基础地图。但是存在的问题是其中带有的地图都是国外的地图,虽然如OSM等数据多效果好,在国界上都存在问题;而国内的高德、腾讯等地图都存在偏移的问题,天地图虽然没有偏移,但有key的限制。所以在国内使用folium总是不容易两全其美。
参考leaflet中如何优雅的解决百度、高德地图的偏移问题,想到既然folium是基于leaflet的,能不能把这个方法引入修改folium来加载无偏的国内的地图。终于搞定了,参考foliume。
GridLayer的方法,加入判断(是否是国内地图)和坐标转换,得到一个js文件。通过jsDelivr + Github 实现免费CDN加速:https://cdn.jsdelivr.net/gh/geoyee/lccjs@v0.2/leaflet_china_correction.js。其中由于百度地图的特殊性,需要构造一个CRS,否则无法显示。pip install foliume下载。与foliume相同,只需要在指定tiles的地方选择GeoQ China Community或GeoQ China Street即可。
由于pypi不能重名,所以安装是叫foliume,使用和folium一模一样
import folium
m = folium.Map(
location=[39.90681115817056, 116.39123825186597], # 天安门外金水桥
zoom_start=16,
tiles='GeoQ China Community' # 'AMAP China', 'TencentMap China', 'BaiduMaps China'
)
m




