使用folium excel 绘制point
制作内容
- 根据气象台资料获得的点进行绘制
- 对一个特殊的点做特别的标注
- 数据来源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#!/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" )
|
成果展示
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/staHuri/article/details/80842679