基于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)
相关推荐
计算机源码社7 小时前
基于Hadoop+Spark的黄金市场历史数据特征分析与可视化大屏 基于K-Means聚类算法的黄金历史价格阶段划分研究
大数据·hadoop·python·数据挖掘·数据分析·spark·毕业设计
hhzz8 小时前
【OpenCV 入门到精通 05】核心操作与像素处理:ROI、运算与性能优化
人工智能·python·opencv·性能优化
影视飓风TIM8 小时前
C++ 智能指针:auto_ptr / unique_ptr / shared_ptr / weak_ptr 原理与使用
开发语言·c++
2601_962078238 小时前
Python接口自动化框架:pytest
python·pytest·接口自动化·测试框架·restfulapi
一木 之林8 小时前
李沐《动手学深度学习》知识卡合集:从 Softmax 回归到房价实战(第24-50集)
开发语言·c++·人工智能
心中有你02148 小时前
Java Swing实现校园最短路径导航系统(Dijkstra算法完整源码+详细解析)
java·开发语言·算法
Alphapeople8 小时前
路径规划算法的python实现
开发语言·python·算法
重生之小比特8 小时前
【Java SE】数组的定义与使用
java·开发语言
旋生万物8 小时前
圈道裂痕——用 Python 验证素数分布的螺旋生成论判据
开发语言·python·数论·素数·cci·可计算数学
阿洛学长8 小时前
Python笔记:dir() 和 help() 完整用法(适配Python二级 + IDLE实操)
服务器·笔记·python