需求
给出所有的经纬度表示发现黄蜂的位置,然后给出巢的位置,在地图上标记位置并且以8km为半径画圆,标出预测点。
本文写作的目的是为了方便以后用到可以直接将模板拿出来改改用下,同时也给可能会需要的人作为参考。所以将其写入博客以作保存。
这里直接给出数据:
所有点数据:
Latitude,Longitude
49.149394,-123.943134
48.993892,-122.702242
48.971949,-122.700941
49.025831,-122.810653
48.980994,-122.688503
49.060215,-122.641648
48.955587,-122.661037
48.777534,-122.418612
48.927519,-122.745016
48.984269,-122.574809
48.98422,-122.574726
48.984172,-122.57472
48.979497,-122.581335
48.983375,-122.582465
预测点直接写在代码里面了
其中蜂巢数据:
lat,lon
49.149394,-123.943134
49.025831,-122.810653
48.980994,-122.688503
49.060215,-122.641648
48.777534,-122.418612
48.927519,-122.745016
48.983375,-122.582465
详见注释
import pandas as pd
import folium
from branca.element import Figure
from folium import plugins
import haversine as hs
from datetime import datetime
import math
df=pd.read_excel("2021MCMProblemC_DataSet.xlsx") # 读入
df_nest=pd.read_csv('data.txt', sep=',') # 巢的数据
# print(df)
# print(df_nest)
p=[49.05853661,-122.62119117,datetime(9999, 7, 3, 22, 29, 56, 321024)] # 预测的一个点
coords=[]
for index, row in df.iterrows():
coords.append([row['Latitude'],row['Longitude'],row['Detection Date']])
coords.append(p)
# 标记 是巢的长度会多一个
for i in range(0,len(coords)):
t=[coords[i][0],coords[i][1]]
for index,row in df_nest.iterrows():
l=[row[0],row[1]]
flag=1
for j in range(2):
if not math.isclose(t[j],l[j]):
flag=0
break
if flag:
coords[i].append(1)
break
# datetime类型
# print(coords)
fig5=Figure(height=550,width=750)
m5=folium.Map(location=[coords[0][0],coords[0][1]],zoom_start=9)
fig5.add_child(m5)
# 预测时间judge
pre_datetime=datetime(3000, 6, 20, 20, 11, 12, 926763)
for i in range(0,len(coords)):
judge=pre_datetime-coords[i][2]
loc=[coords[i][0],coords[i][1]]
# 画圆
folium.vector_layers.Circle(
location=loc,#位置
radius=8000,# 半径 m单位
color="#3186cc", # 颜色
fill=True, #是否填充
fill_color="#3186cc", # 填充的话 填充颜色
fillOpacity=0.2, # Fill opacity
weight=2 # 宽度
).add_to(m5)
if judge.days<0:
folium.Marker(location=[coords[i][0],coords[i][1]],popup="predection position",icon=folium.Icon(color='pink')).add_to(m5)
# 预测点 ;icon是改图标样式一个对象;具体见 https://python-visualization.github.io/folium/modules.html?highlight=icon#folium.map.Icon
# popup 是点开显示的信息,字符串
continue
if len(coords[i])==4:
folium.Marker(location=[coords[i][0],coords[i][1]],popup=str(coords[i][2].strftime('%Y-%m-%d')),icon=folium.Icon(color='red')).add_to(m5) # 巢点
else :
folium.Marker(location=[coords[i][0],coords[i][1]],popup=str(coords[i][2].strftime('%Y-%m-%d')),icon=folium.Icon(color='blue')).add_to(m5) # 非巢点
folium.LayerControl().add_to(m5)
m5.save("hover.html")