基于folium做地图可视化

由于内网环境,缺少地图~所以就考虑了使用folium+geojson来做简单的可视化.

python 复制代码
import json
import folium
with open('天津市.json', 'r', encoding='utf-8') as f:
    china_geojson = json.load(f)

# 创建一个没有背景瓦片的地图对象
m = folium.Map(location=[35, 105], zoom_start=4, tiles=None)

# 添加geojson数据到地图中
folium.GeoJson(
    china_geojson,
    style_function=lambda feature: {
        'fillColor': '#ffff00',
        'color': 'black',
        'weight': 2,
        'dashArray': '5, 5'
    }
).add_to(m)

# 在notebook中展示地图
m

使用pandas读取位置数据,然后可视化.

python 复制代码
def visualize_trajectory(data):
    # 创建一个Folium地图对象
    with open('天津市.json', 'r', encoding='utf-8') as f:
        china_geojson = json.load(f)

    # 创建一个没有背景瓦片的地图对象
    m = folium.Map(location=[35, 105], zoom_start=4, tiles=None)
    # 添加geojson数据到地图中
    folium.GeoJson(
        china_geojson,
        style_function=lambda feature: {
            'fillColor': '#ffff00',
            'color': 'black',
            'weight': 2,
            'dashArray': '5, 5'
        }
    ).add_to(m)

    # 对于每个轨迹点,添加标记
    for i in range(len(data)):
        folium.Marker(location=[data['Latitude'].iloc[i], data['Longitude'].iloc[i]], popup=data['User_ID'].iloc[i]).add_to(m)

    # 使用轨迹点创建一条线,表示移动路径
    for i in range(len(data) - 1):
        folium.PolyLine([[data['Latitude'].iloc[i], data['Longitude'].iloc[i]], [data['Latitude'].iloc[i + 1], data['Longitude'].iloc[i + 1]]], color='blue', weight=2).add_to(m)

    # 返回可视化的地图
    return m

模拟:

复制代码
visualized_map = visualize_trajectory(example_df)
visualized_map
复制代码
模拟数据生成脚本:
python 复制代码
import pandas as pd
import random
import time

def generate_user_ids(num_users):
    """生成指定数量的用户ID"""
    return [f"User_{i}" for i in range(num_users)]

def generate_timestamps(start_time, num_points):
    """生成一系列连续的时间戳"""
    return [start_time + i for i in range(num_points)]

def generate_random_point(center_lat, center_lon, max_distance):
    """生成在给定经纬度为中心,指定距离范围内的随机经纬度点"""
    # 将距离转换为角度
    max_distance_angle = max_distance / 6371.0

    # 生成随机角度
    dlat = random.uniform(-max_distance_angle, max_distance_angle)
    dlon = random.uniform(-max_distance_angle, max_distance_angle)

    # 计算新的经纬度
    new_lat = center_lat + dlat
    new_lon = center_lon + dlon

    return (new_lat, new_lon)

def simulate_trajectory(num_users, start_time, num_points, center_lat, center_lon, max_distance):
    """生成轨迹数据"""
    user_ids = generate_user_ids(num_users)
    all_data = []

    for user_id in user_ids:
        timestamps = generate_timestamps(start_time, num_points)
        current_point = (center_lat, center_lon)

        for timestamp in timestamps:
            current_point = generate_random_point(*current_point, max_distance)
            all_data.append([user_id, timestamp] + list(current_point))

    # 创建DataFrame
    columns = ['User_ID', 'Timestamp', 'Latitude', 'Longitude']
    df = pd.DataFrame(all_data, columns=columns)
    return df
# #############
#example_df = simulate_trajectory(122, int(time.time()), 10, 39.129484,117.220074, 1000)
相关推荐
@小张在努力几秒前
Javascript中的闭包
开发语言·javascript·ecmascript
Hi, how are you1 分钟前
GyAn数字资产守护系统
python·安全·http·网络安全·信息与通信
muyouking112 分钟前
Rust Nightly 切换指南:解锁前沿特性的钥匙
开发语言·后端·rust
梦帮科技3 分钟前
第二十三篇:自然语言工作流生成:GPT-4集成实战
人工智能·python·机器学习·开源·gpt-3·极限编程
辛-夷3 分钟前
js中如何改变this指向
开发语言·前端·javascript
JELEE.3 分钟前
redis笔记(python、Django怎么配置使用redis)
redis·笔记·python
cnnews8 分钟前
用OpenCV实现烟花动画
开发语言·python·opencv·pygame·cv2
love530love10 分钟前
让 ComfyUI 官方 CLI 在 Windows CMD 里也能 Tab 补全 —— 实测与避坑记录
人工智能·windows·python·clink·comfy-cli·命令补全·clickcompletion
Rabi'10 分钟前
Windows系统 Qt 整合 OpenCV4.12.0
开发语言·windows·qt·opencv
88号技师10 分钟前
2025年10月一区SCI-中心碰撞优化算法Centered Collision Optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法