用python folium库画地图 在地图上画圆 模板 记录

需求

  给出所有的经纬度表示发现黄蜂的位置,然后给出巢的位置,在地图上标记位置并且以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")

画图结果

在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值