背景
開源庫 GpsAndMap 的 MapModule 模塊基於 folium 模塊進行了二次封裝,引入 GpsModule 模塊中的GPS座標類作為數據基礎,集成了10+種地圖瓦片可以直接添加引用,提供了直觀便利的圖層管理功能。
引入模塊
pip install GpsAndMap
模塊結構
MapModule 模塊提供了以下類型的定義
- 【顏色名】枚舉定義
- 【熱力點類】定義
- 【圖標樣式類】定義
- 【提示樣式類】定義
- 【消息樣式類】定義
- 【封閉圖形樣式類】定義
- 【線條樣式類】定義
- 【線上文本樣式類】定義
- 【網頁標題樣式類】定義
- 【圖標標記類】定義
- 【圓圈標記類】定義
- 【正多邊形標記類】定義
- 【螞蟻路徑標記類】定義
- 【矩形標記類】定義
- 【多邊形標記類】定義
- 【折線類】定義
- 【參考線類】定義
- 【熱力層類】定義
- 【圖層類】定義
- 【地圖類】定義
依賴説明
GpsAndMap 依賴於以下模塊:
- DebugInfo
- folium
- 其它標準庫
開源地址
GpsAndMap開源於:GpsAndMap
功能説明與示例代碼
👉MapModule 模塊支持folium.Map對象生成與對應的html文檔生成,支持簡單的圖層管理
👉MapModule 模塊支持添打點(Marker)標記, 圓圈(Circle)標記, 多邊形/正多邊形(Polygon)標記,折線(PolyLine)標記,以及這些標記上附帶的彈窗消息,提示消息,以及樣式信息
👉MapModule 模塊支持添加熱力圖,支持添加經度參考線,支持添加緯度參考線
👉MapModule 模塊支持添加座標拾取,鼠標打點,鼠標繪圖,螞蟻路徑等folium.plugins功能
👉MapModule 模塊支持直接添加和使用10+種瓦片底圖,包括google, 高德系列, 智圖GeoQ系列
👇 以代碼演示瞭如何向地圖中添加指定的瓦片底圖, 並將Map對象保存為html以供閲覽
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類(中心點=常用座標.北京市).添加瓦片.高德地圖().智圖GeoQ().地圖
地圖.保存html(目標路徑='.').打開()
👆以上生成的html地圖如下👇,可以看到有高德地圖和智圖GeoQ兩個瓦片圖層
👇 以下代碼添加了所有支持的瓦片圖,可以看到當前總共支持直接添加13種不同的瓦片底圖。
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.添加所有.地圖
地圖.保存html(目標路徑='.')
👇下面的代碼,我們在北京市位置添加一個基地圖標
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.智圖GeoQ().地圖
地圖.添加基地(常用座標.北京市)
地圖.保存html(目標路徑='.').打開()
👇下面的代碼中,我們通過圖標標記類來添加基地圖標,在圖標標記類中,我們通過消息樣式,圖標樣式,提示樣式, 詳細的定義了所添加的圖標標記的樣式
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.智圖GeoQ().地圖
地圖.添加基地(圖標標記類(位置=常用座標.北京市,
消息=消息樣式類(消息='我是北京,中國歡迎您!', 默認顯示=True),
圖標=圖標樣式類(名稱='glyphicon-arrow-right', 顏色=顏色名.藍, 角度_度=-45),
提示=提示樣式類(消息='45度仰望天窗', 粘性=True)
))
# 圖標的名稱,你可以在這裏找到一些常用的圖標
# https://v3.bootcss.com/components/
地圖.保存html(目標路徑='.').打開()
👇下面的代碼中, 我們添加了一個圖層(我的圖層), 在這個圖層上, 我們分別在上海的位置添加了一個圓圈,在常州的位置添加了一個正三角形,在南通的位置添加了一個圖標,在南京的位置添加了一個正方形.這些標記分別使用了不同的顏色樣式和線條樣式
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
我的圖層 = 地圖.添加圖層(圖層名稱='我的圖層', 默認顯示=True)
# 在上海位置添加一個圓圈標記
上海的圓圈 = 圓圈標記類(位置=常用座標.上海市, 半徑px=15, 圓圈=封閉圖形樣式類(線條寬度=3, 線條顏色=顏色名.藍))
地圖.添加標記(我的圖層, 上海的圓圈)
# 在常州位置添加一個正三角形標記
常州的三角形 = 正多邊形標記類(位置=常用座標.常州市, 邊數=3, 半徑px=25, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.紅, 填充透明度=0.5))
地圖.添加標記(我的圖層, 常州的三角形)
# 在南通位置添加一個圖標(Marker)標記
南通的圖標 = 圖標標記類(位置=常用座標.南通市, 圖標=圖標樣式類(名稱='glyphicon-fire', 顏色=顏色名.綠))
地圖.添加標記(我的圖層, 南通的圖標)
# 在南京位置添加一個正方形標記
南京的正方形 = 正多邊形標記類(位置=常用座標.南京市, 邊數=4, 半徑px=25, 角度deg=45, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.藍, 填充透明度=0.5))
地圖.添加標記(我的圖層, 南京的正方形)
地圖.保存html(目標路徑='.').打開()
👇下面的代碼中, 我們將上海,常州,南通和南京的這些標記點添加到折線類中,在地圖上繪製一條折線
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
我的圖層 = 地圖.添加圖層(圖層名稱='我的圖層', 默認顯示=True)
# 在上海位置添加一個圓圈標記
上海的圓圈 = 圓圈標記類(位置=常用座標.上海市, 半徑px=15, 圓圈=封閉圖形樣式類(線條寬度=3, 線條顏色=顏色名.藍))
# 在常州位置添加一個正三角形標記
常州的三角形 = 正多邊形標記類(位置=常用座標.常州市, 邊數=3, 半徑px=25, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.紅, 填充透明度=0.5))
# 在南通位置添加一個圖標(Marker)標記
南通的圖標 = 圖標標記類(位置=常用座標.南通市, 圖標=圖標樣式類(名稱='glyphicon-fire', 顏色=顏色名.綠))
# 在南京位置添加一個正方形標記
南京的正方形 = 正多邊形標記類(位置=常用座標.南京市, 邊數=4, 半徑px=25, 角度deg=45, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.藍, 填充透明度=0.5))
# 生成一個折線類對象
折線 = 折線類(線條樣式=線條樣式類(顏色=顏色名.深綠, 寬度=3, 透明度=0.75))
# 把以上位置的標記添加到折線中來
折線.添加路徑點(上海的圓圈)
折線.添加路徑點(常州的三角形)
折線.添加路徑點([南通的圖標, 南京的正方形])
# 把折線添加到圖層上
地圖.添加標記(我的圖層, 折線)
地圖.保存html(目標路徑='.').打開()
👆以上代碼中,我們在折線類中,定義螞蟻路徑樣式,就可以在這條折線上顯示螞蟻如下效果了,修改代碼如下👇:
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
# 生成一個折線類對象, 並在這個折線上顯示螞蟻路徑
折線 = 折線類(線條樣式=線條樣式類(顏色=顏色名.深綠, 寬度=3, 透明度=0.75), 螞蟻路徑=螞蟻路徑標記類(顯示=True))
👇依然是上海,常州,南通,南京,下面的代碼在這幾個位置之間繪製了一個多邊形,並定義了這個多邊形的樣式
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
我的圖層 = 地圖.添加圖層(圖層名稱='我的圖層', 默認顯示=True)
# 在上海位置添加一個圓圈標記
上海的圓圈 = 圓圈標記類(位置=常用座標.上海市, 半徑px=15, 圓圈=封閉圖形樣式類(線條寬度=3, 線條顏色=顏色名.藍))
# 在常州位置添加一個正三角形標記
常州的三角形 = 正多邊形標記類(位置=常用座標.常州市, 邊數=3, 半徑px=25, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.紅, 填充透明度=0.5))
# 在南通位置添加一個圖標(Marker)標記
南通的圖標 = 圖標標記類(位置=常用座標.南通市, 圖標=圖標樣式類(名稱='glyphicon-fire', 顏色=顏色名.綠))
# 在南京位置添加一個正方形標記
南京的正方形 = 正多邊形標記類(位置=常用座標.南京市, 邊數=4, 半徑px=25, 角度deg=45, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.藍, 填充透明度=0.5))
# 生成一個多邊形象,
多邊形 = 多邊形標記類(圖形=封閉圖形樣式類(線條顏色=顏色名.紫, 線條寬度=3, 填充色=顏色名.紅, 填充透明度=0.8))
# 把以上位置的標記添加到多邊形中來
多邊形.添加角點(上海的圓圈)
多邊形.添加角點(常州的三角形)
多邊形.添加角點([南通的圖標, 南京的正方形])
# 把折線添加到圖層上
地圖.添加標記(我的圖層, 多邊形)
地圖.保存html(目標路徑='.').打開()
👆同樣的,在上面的代碼中, 我們在多邊形樣式中添加螞蟻路徑樣式,即可實現螞蟻路徑的效果,如下👇:
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
# 生成一個多邊形象, 並在這個多邊形上定義螞蟻路徑樣式
多邊形 = 多邊形標記類(圖形=封閉圖形樣式類(線條顏色=顏色名.紫, 線條寬度=3, 填充色=顏色名.紅, 填充透明度=0.8), 螞蟻路徑=螞蟻路徑標記類(顯示=True))
👇下面的代碼在以上海,南京為對角線,添加了一個矩形
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
我的圖層 = 地圖.添加圖層(圖層名稱='我的圖層', 默認顯示=True)
# 在上海位置添加一個圓圈標記
上海的圓圈 = 圓圈標記類(位置=常用座標.上海市, 半徑px=15, 圓圈=封閉圖形樣式類(線條寬度=3, 線條顏色=顏色名.藍))
# 在南京位置添加一個正方形標記
南京的正方形 = 正多邊形標記類(位置=常用座標.南京市, 邊數=4, 半徑px=25, 角度deg=45, 圖形=封閉圖形樣式類(線條寬度=3, 填充色=顏色名.藍, 填充透明度=0.5))
# 生成一個矩形對象,
矩形 = 矩形標記類()
# 把以上位置的標記添加到矩形中來
矩形.添加角點(上海的圓圈)
矩形.添加角點(南京的正方形)
# 把折線添加到圖層上
地圖.添加標記(我的圖層, 矩形)
地圖.保存html(目標路徑='.').打開()
👇 下面的代碼,我們在太湖的中心,繪製了一個半徑為 31km 的圓圈, 可以看到太湖的大概半徑為31km. 我們在定義圓圈時,使用了半徑m這個參數,這個參數使得所繪製的圓圈半徑是真實的地理半徑值,單位是m
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
我的圖層 = 地圖.添加圖層(圖層名稱='我的圖層', 默認顯示=True)
# 在高德地圖上拾取太湖中心的座標
太湖中心座標 = GPS座標類(120.2601, 31.2132, GPS座標系類型.高德地圖座標)
地圖.添加基地(太湖中心座標)
# 在上海位置添加一個圓圈標記
太湖中心 = 圓圈標記類(位置=太湖中心座標, 半徑m=31000, 圓圈=封閉圖形樣式類(線條寬度=3, 線條顏色=顏色名.藍))
# 把折線添加到圖層上
地圖.添加標記(我的圖層, 太湖中心)
地圖.保存html(目標路徑='.').打開()
👇下面的代碼模擬了長三角幾個地市的經濟數據,通過熱力圖繪製在地圖上,以演示熱力層的使用方法
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.高德地圖().地圖
地圖.添加基地(常用座標.北京市)
# 在地圖上添加一個熱力層圖層
熱力層 = 地圖.添加熱力層(圖層名稱='演示經濟數據', 默認顯示=True)
# 以下模擬幾個地市的經濟數據,以演示熱力圖效果
地圖.添加熱力點(熱力層, 熱力點類(常用座標.上海市, 1250))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.崑山市, 1000))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.蘇州市, 1200))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.無錫市, 870))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.南通市, 650))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.常州市, 700))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.泰州市, 500))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.鎮江市, 580))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.楊州市, 754))
地圖.添加熱力點(熱力層, 熱力點類(常用座標.南京市, 1100))
地圖.保存html(目標路徑='.').打開()
👇下面的代碼中,我們分別在北京位置添加了參考緯線(北緯39.89度線), 在上海位置添加了參考經線(東經121.48度線), 在西安位置添加了參考經緯線(東經108.94, 北緯34.34)
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from GpsAndMap.MapModule import *
# endregion
地圖 = 地圖類().添加瓦片.智圖GeoQ水系().地圖
地圖.添加基地(常用座標.北京市)
地圖.添加基地(常用座標.上海市)
地圖.添加基地(常用座標.西安市)
地圖.添加參考經線(常用座標.上海市)
地圖.添加參考緯線(常用座標.北京市)
地圖.添加參考經緯線(常用座標.西安市)
地圖.保存html(目標路徑='.').打開()
小結
以上就是今天分享的關於開源庫 GpsAndMap 中的 MapModule 模塊相關功能的介紹了。