【python】使用folium excel 繪製point
阿新 • • 發佈:2018-11-11
使用folium excel 繪製point
製作內容
- 根據氣象臺資料獲得的點進行繪製
- 對一個特殊的點做特別的標註
- 資料來源
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : map03.py
# @Author: huifer
# @Date : 2018/6/28
import pandas as pd
import math
import folium
def degree_conversion_decimal(x):
"""
度分轉換成十進位制
:param x: float
:return: integer float
"""
integer = int(x)
integer = integer + (x - integer) * 1.66666667
return integer
def distance(origin, destination):
"""
經緯度計算兩點距離
:param origin:
:param destination:
:return:
"""
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km
dlat = math.radians(lat2 - lat1)
dlon = math.radians(lon2 - lon1)
a = math.sin(dlat / 2 ) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(dlon / 2) * math.sin(dlon / 2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
d = radius * c
return d
# 資料準備
data = pd.read_excel('SURF_CHN_MUL_HOR_STATION.xlsx')
# 修改成十進位制 以及保留1一位小數
data['經度'] = data['經度'].apply(degree_conversion_decimal)
data['緯度'] = data['緯度'].apply(degree_conversion_decimal)
data['觀測場拔海高度(米)'] = data['觀測場拔海高度(米)'].apply(lambda x: round(x, 1))
data['氣壓感測器拔海高度(米)'] = data['氣壓感測器拔海高度(米)'].apply(lambda x: round(x, 1))
# 儲存新的檔案
# data.to_csv('氣象站資訊十進位制.csv')
data["距離杭州(km)"] = data.apply(lambda r: distance((r['緯度'], r['經度']), (30.14, 120.1)), axis=1)
# print(data[data['距離杭州(km)']<100].sort_values('距離杭州(km)'))
# 選擇除了杭州以外的內容
selected_st = data[data['距離杭州(km)'] < 100].sort_values('距離杭州(km)').iloc[1::]
# 展示地圖
# 提取資料
hzdata = data.ix[data['站名'] == '杭州', ['站名', '緯度', '經度']]
myMap = folium.Map(location=[hzdata.iloc[0]['緯度'], hzdata.iloc[0]['經度']])
icon_hz = dict(
prefix='fa', color='red', icon_color='darkred', icon='cny'
)
icon = folium.Icon(**icon_hz)
folium.Marker(
location=[hzdata.iloc[0]['緯度'], hzdata.iloc[0]['經度']],
popup="杭州",
icon=icon
).add_to(myMap)
for i in range(len(selected_st)):
name = selected_st.iloc[i]['站名']
x = selected_st.iloc[i]['緯度']
y = selected_st.iloc[i]['經度']
test = folium.Html(
'<b>name:{}</b></br> <b>x:{}</b></br> <b>y:{}</b></br>'.format(name, x, y),
script=True)
popup = folium.Popup(test, max_width=2650)
folium.Marker(
location=[x, y],
popup=popup,
).add_to(myMap)
myMap.save("test.html")