成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python繪制地圖神器,上手直接開大!

開發 后端
大家晚上好,我是小五。之前給大家介紹過多種Python可視化模塊,但使用他們進行地理可視化都很簡陋。所以想要繪制更精美的可視化地圖?想在地圖上自由的設置各種參數?想獲得靈活的交互體驗?今天它就來了,Python繪制地圖神器folium,上手直接開大!

 大家晚上好,我是小五

之前給大家介紹過多種Python可視化模塊,但使用他們進行地理可視化都很簡陋。

所以想要繪制更精美的可視化地圖?想在地圖上自由的設置各種參數?想獲得靈活的交互體驗?

今天它就來了,Python繪制地圖神器folium,上手直接開大!

一、folium簡介和安裝

folium 建立在 Python 生態系統的數據應用能力和 Leaflet.js 庫的映射能力之上,在Python中操作數據,然后通過 folium 在 Leaflet 地圖中可視化。

folium 相比較于國內百度的 pyecharts 靈活性更強,能夠自定義繪制區域,并且展現形式更加多樣化。[1]

 

 

 

??

 

1. folium的簡介

  • Folium是建立在 Python 生態系統的數據整理 Datawrangling 能力和 Leaflet.js 庫的映射能力之上的開源庫。用 Python 處理數據,然后用 Folium 將它在 Leaflet 地圖上進行可視化。Folium能夠將通過 Python 處理后的數據輕松地在交互式的 Leaflet 地圖上進行可視化展示。它不單單可以在地圖上展示數據的分布圖,還可以使用 Vincent/Vega 在地圖上加以標記。
  • 這個開源庫中有許多來自 OpenStreetMap、MapQuest Open、MapQuestOpen Aerial、Mapbox和Stamen 的內建地圖元件,而且支持使用 Mapbox 或 Cloudmade 的 API 密鑰來定制個性化的地圖元件。Folium支持 GeoJSON 和 TopoJSON 兩種文件格式的疊加,也可以將數據連接到這兩種文件格式的疊加層,最后可使用 color-brewer 配色方案創建分布圖。
  • Folium可以讓你用 Python 強大生態系統來處理數據,然后用 Leaflet 地圖來展示。Folium內置一些來自 OpenStreetMap、MapQuest Open、MapQuest Open Aerial、Mapbox和Stamen 的地圖元件(tilesets),并且支持用 Mapbox 或者 Cloudmade API keys 來自定義地圖元件。Folium支持 GeoJSON 和 TopJSON 疊加(overlays),綁定數據來創造一個分級統計圖(Choropleth map)。但是,Folium庫繪制熱點圖的時候,需要聯網才可顯示。

2. 安裝folium

 

pip install folium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

??這里直接使用了國內豆瓣源

 

 

 

??

 

二、基本使用

folium顯示地圖的類為 folium.Map,類的聲明如下:

 

class folium.Map(location=None, width='100%', height='100%', left='0%', top='0%', position='relative', tiles='OpenStreetMap', attr=None, min_zoom=0, max_zoom=18, zoom_start=10, min_lat=-90, max_lat=90, min_lon=-180, max_lon=180, max_bounds=False, crs='EPSG3857', control_scale=False, prefer_canvas=False, no_touch=False, disable_3d=False, png_enabled=False, zoom_control=True, **kwargs)

幾個重要的參數:

  • location:經緯度,list 或者 tuple 格式,順序為 latitude, longitude
  • zoom_start:縮放值,默認為 10,值越大比例尺越小,地圖放大級別越大
  • control_scale:Bool型,控制是否在地圖上添加比例尺,默認為 False 即不添加
  • tiles:顯示樣式,默認 "OpenStreetMap",也就是開啟街道顯示
  • crs:地理坐標參考系統,默認為 "EPSG3857"

1. 各級別地圖

世界地圖

 

import folium

print(folium.__version__)

# define the world map
world_map = folium.Map()
# save world map
world_map.save('test_01.html')

結果如下:

 

當前folium版本:0.11.0

 

 

 

??

 

國家地圖

 

import folium
# define the national map
national_map = folium.Map(location=[35.3, 100.6], zoom_start=4)
# save national map
national_map.save('test_02.html')

結果如下:

 


 

市級地圖

其實改變地圖顯示也就是改變顯示的經緯度和縮放比例,省級、市級、縣級用法相似,這里舉一個市級的例子為例,如北京市:

 

import folium
# define the national map
city_map = folium.Map(location=[39.93, 116.40], zoom_start=10)
# save national map
city_map.save('test_03.html')

 

 

??

 

2. 在地圖上標記

普通標記

添加普通標記用 Marker,可以選擇標記的圖案。

import folium

bj_map = folium.Map(location=[39.93, 115.40], zoom_start=12, tiles='Stamen Terrain')

folium.Marker(
location=[39.95, 115.33],
popup='Mt. Hood Meadows',
icon=folium.Icon(icon='cloud')
).add_to(bj_map)

folium.Marker(
location=[39.96, 115.32],
popup='Timberline Lodge',
icon=folium.Icon(color='green')
).add_to(bj_map)

folium.Marker(
location=[39.93, 115.34],
popup='Some Other Location',
icon=folium.Icon(color='red', icon='info-sign') # 標記顏色 圖標
).add_to(bj_map)

bj_map.save('test_04.html')

結果如下:

 

 

 

??

 

圓形標記

添加圓形標記用 Circle 以及 CircleMarker

 

import folium

bj_map = folium.Map(location=[39.93, 116.40], zoom_start=12, tiles='Stamen Toner')

folium.Circle(
radius=200,
location=(39.92, 116.43),
popup='The Waterfront',
color='#00FFFF', # 顏色
fill=False, # 填充
).add_to(bj_map)

folium.CircleMarker(
location=(39.93, 116.38),
radius=50, # 圓的半徑
popup='Laurelhurst Park',
color='#FF1493',
fill=True,
fill_color='#FFD700'
).add_to(bj_map)

bj_map.save('test_05.html')

結果如下:

 

 

 

??

 

動態放置標記

 

import folium

dynamic_tagging = folium.Map(
location=[46.8527, -121.7649],
tiles='Stamen Terrain',
zoom_start=13
)

folium.Marker(
[46.8354, -121.7325],
popup='Camp Muir'
).add_to(dynamic_tagging)

dynamic_tagging.add_child(folium.ClickForMarker(popup='Waypoint'))
dynamic_tagging.save('test_06.html')

結果如下:

 

 

更多詳細使用可以參考官方文檔:http://python-visualization.github.io/folium/quickstart.html[2]

三、實戰案例

以將停車場地理位置數據可視化在地圖上示例,熟悉 folium 地圖可視化的使用。

1. 獲取經緯度數據

停車場地理位置數據來源于網絡,數據真實可靠,下面先利用 Python 爬蟲獲取數據

 

#數據來源:http://219.136.133.163:8000/Pages/Commonpage/login.aspx

import requests
import csv
import json
import logging

headers = {
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
s = requests.session()
s.get(url, headers=headers)
for i in range(1, 318):
data = {
'cp': str(i),
'ps': '10',
'kw': '',
'lon': 'undefined',
'lat': 'undefined',
'type': 'undefined'
}
url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
# post提交表單數據
res = s.post(url, data=data, headers=headers)
# 重新設置編碼
res.encoding = 'utf-8'
# str轉json 便于提取數據
result = json.loads(res.text)['Result']
for j in result:
park_name = j['ParkName']
Lon = j['Longitude']
Lat = j['Latitude']
with open('parkings.csv', 'a+', newline='', encoding='gb18030') as f:
f_csv = csv.writer(f)
f_csv.writerow([park_name, Lon, Lat])
logging.info([park_name, Lon, Lat])

結果如下:

 

??

 


 

??

 

共有 3170 個停車場地理位置數據

2. folium地圖可視化

 

import pandas as pd
import folium

# 讀取csv數據
data = pd.read_csv('parkings.csv', encoding='gbk')
# 傳入緯度和經度數據
park_map = folium.Map(location=[data['latitude'].mean(), data['longitude'].mean()], zoom_start=10, control_scale=True,)
# 實例化 folium.map.FeatureGroup 對象
incidents = folium.map.FeatureGroup()
for name,row in data.iterrows():
incidents.add_child(
folium.CircleMarker( # CircleMarker表示花圓
(row["latitude"], row["longitude"]), # 每個停車場的經緯度坐標
radius=7, # 圓圈半徑
color='#FF1493', # 標志的外圈顏色
fill=True, # 是否填充
fill_color='#00FF00', # 填充顏色
fill_opacity=0.4 # 填充透明度
)
)

park_map.add_child(incidents)
park_map.save('park_map1.html')

效果如下:

 

 

這樣看起來有點亂,下面我們來統計一下各個局域的停車場數量

 

import pandas as pd
import folium
from folium import plugins

data = pd.read_csv('parkings.csv', encoding='gbk')
park_map = folium.Map(location=[data['latitude'].mean(), data['longitude'].mean()], zoom_start=10, control_scale=True,)
marker_cluster = plugins.MarkerCluster().add_to(park_map)

for name,row in data.iterrows():
folium.Marker(location=[row["latitude"], row["longitude"]]).add_to(marker_cluster)
park_map.save('park_map2.html')

效果如下:

 

 

這樣能對各個局域停車場的數量在地圖上進行統計,將圖不斷放大以后,還可以顯示每個停車場的具體位置,非常方便。

責任編輯:華軒 來源: 凹凸數據
相關推薦

2022-04-13 09:01:53

Echart5繪制地圖

2022-11-05 22:47:32

PythonAPI世界地圖

2018-06-16 23:34:09

可視化地圖R

2022-12-20 11:05:33

自動駕駛數據

2014-06-27 11:00:42

2021-06-24 13:00:35

微軟開源可視化

2014-11-13 10:46:30

高德地圖APEC出行

2013-03-29 10:57:45

2025-04-25 09:00:00

Transforme模型代碼

2024-06-20 13:35:01

2022-12-18 22:11:46

2023-02-07 11:44:02

2019-12-26 09:46:26

工具代碼開發

2014-11-20 10:29:19

AWS混合云

2013-08-30 14:10:51

大數據

2021-02-23 10:36:09

Linux命令kmdr

2022-06-06 14:54:44

PythonNuitka

2019-06-25 09:32:16

Redis海量數據高并發

2019-01-02 08:41:57

物聯網空氣質量IOT

2010-09-06 21:23:51

teradata社會責任
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一区二区三区四区五区 | 成人免费激情视频 | 在线成人av | 久久久久久99 | 成人av鲁丝片一区二区小说 | 色在线看 | 国产精品久久久久久久久久久久久久 | 奇米视频777| 久久国产精品无码网站 | 国产精品久久久久久久久久久久午夜片 | 国产一区二区精华 | 丁香婷婷在线视频 | 国产精品国产精品 | 国产91 在线播放 | 国产黄色av网站 | 夜夜操操操 | 欧美日韩精品综合 | 亚洲视频免费观看 | 亚洲日韩中文字幕一区 | 国产成人精品久久二区二区91 | 黄色欧美 | 91久久久久| 美女视频一区二区 | 久久久久久网站 | 九九热精品在线 | 国产精品激情小视频 | 精品国产乱码一区二区三 | 成人国产在线视频 | 日日日视频| 中文字幕日韩欧美一区二区三区 | www.青青草| 精品久久久久久久久亚洲 | 亚洲第一av| 国产精品视频久久 | 羞羞视频在线观看 | 国产精品成人一区 | 午夜在线影院 | 国产一区二区三区视频免费观看 | 久久综合九色综合欧美狠狠 | 成人久久久久久久久 | 亚洲一区中文字幕 |