python下载谷歌地图瓦片_Python地图可视化之Folium更换地图瓦片(Map Tiles)
關于Folium庫的基礎使用,可以查看官方文檔,或者很多知友、博客的分享,這里不再詳述。本文主要以一個簡單的示例講解如何更換底圖,以及進行坐標變換。
1.坐標變換
地球上同一個地理位置的經緯度,在不同的坐標系中,會有少量偏移,國內目前常見的坐標系主要分為三種:
地球坐標系——WGS84:常見于GPS設備,Google地圖等國際標準的坐標體系。
火星坐標系——GCJ-02:中國國內使用的被強制加密后的坐標體系,高德坐標就屬于該種坐標體系。
百度坐標系——BD-09:百度地圖所使用的坐標體系,是在火星坐標系的基礎上又進行了一次加密處理。坐標偏移
在上圖中,藍色線條位置應該是準確的位置,但是由于坐標系不統一,導致定位標志所示的位置發生了偏移。坐標偏移修正(坐標變換)
轉換方法一:關于坐標轉換,可以參見python庫 :coord-convert?pypi.org
官方給出的API調用方法如下:
from coord_convert.transform import wgs2gcj, wgs2bd, gcj2wgs, gcj2bd, bd2wgs, bd2gcj
lon, lat = 120, 40
gcj_lon, gcj_lat = wgs2gcj(lon, lat)
bd_lon, bd_lat = wgs2bd(lon, lat)
print(gcj_lon, gcj_lat) # the result should be: 120.00567568355486 40.0013047896019
轉換方法二:網上可以搜到很多轉換代碼,可根據自己的情況進行適當調整,本文采用的為;python3實現GPS經緯度坐標(WGS84)國測局火星坐標(GCJ02)百度坐標(BD09)相互轉換_Python_開開的博客-CSDN博客?blog.csdn.net
2.底圖更換
folium庫默認是基于OpenStreetMap的,但是可能由于信息更新不及時,有時候OpenStreetMap的數據是不準確的。這就需要更換底圖,如高德地圖,或者Google地圖等。
m = folium.Map(
location=[38.96, 117.78],
zoom_start=12,
# tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # 高德街道圖
# tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德衛星圖
tiles='https://mt.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', # google 衛星圖
# tiles='https://mt.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', # google 地圖
attr='default'
)
如果需要更換底圖,僅需調整tiles參數URL即可。
這里給出google地圖的一些參數設置:
''' lyrs可以設置為不同的參數,分別代表不同形式的地圖,可以嘗試
lyrs=
h = roads only
m = standard roadmap
p = terrain
r = somehow altered roadmap
s = satellite only
t = terrain only
y = hybrid
'''
衛星圖效果如下:
高德街道圖:
衛星圖效果如果條件允許,建議選擇google地圖,高德和百度在放大到一定程度時,會沒有衛星圖顯示。
關于高德地圖瓦片URL的解析可以參見:不睡覺的怪叔叔:OpenLayers教程十二:多源數據加載之使用XYZ的方式加載瓦片地圖?zhuanlan.zhihu.comhttps://www.jianshu.com/p/e34f85029fd7?www.jianshu.com
在Stack Overflow上有如下問答,可做Mapbox的參考:How do I use mapbox tiles with folium??gis.stackexchange.com
示例代碼(高德):
import numpy as np
import folium
from folium import plugins
def PlotLineOnMap():
# 給出的坐標系為GCJ-02,如果需要測試google地圖,需要進行坐標轉換
Lat = [40.8352, 40.8342, 40.8335, 40.8323, 40.8311, 40.8308, 40.8304, 40.8315, 40.8325, 40.8332, 40.8339, 40.8345,
40.8352]
Lon = [114.8886, 114.8883, 114.8881, 114.8877, 114.8873, 114.8888, 114.8902, 114.8909, 114.8916, 114.8919, 114.8922,
114.8917, 114.8886]
tri = np.array(list(zip(Lat, Lon)))
san_map = folium.Map(
location=[40.8329, 114.8898],
zoom_start=16,
tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # 高德街道圖
# tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德衛星圖
attr='default')
folium.PolyLine(tri,color='#3388ff').add_to(san_map)
marker_cluster = plugins.MarkerCluster().add_to(san_map)
for lat,lon in zip(Lat,Lon):
folium.Marker([lat,lon], color='red').add_to(marker_cluster)
san_map.save('test.html')
def main():
PlotLineOnMap()
if __name__ == '__main__':
main()
總結
以上是生活随笔為你收集整理的python下载谷歌地图瓦片_Python地图可视化之Folium更换地图瓦片(Map Tiles)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于openlaeyrs获取谷歌卫星地图
- 下一篇: python合法整型常量要符合什么条件_