基于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)
相关推荐
用户27784491049932 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金4 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程5554 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄4 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
老歌老听老掉牙5 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀10155 小时前
Python入门(7):模块
python
无名之逆5 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得2055 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
似水এ᭄往昔5 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙5 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala