/www/wwwroot/blog/usr/plugins/AMP/templates/MIPpage.php on line 31
">

轨迹OD可视化

2024-09-29T22:02:00

针对轨迹的起点和终点区域进行可视化

可视化效果

可视化代码

{hide}

import numpy as np
import pandas as pd
from keplergl import KeplerGl

# 读取CSV文件
OD = pd.read_csv("data/OD.csv")
shiqu = pd.read_csv("data/gz_lon_lat.csv")

# 合并数据,获取源位置的经度和纬度
OD = OD.merge(shiqu[['省份城市', '经度', '纬度']], left_on='start_area', right_on='省份城市', how='left')
OD.rename(columns={'经度': 'o_lon', '纬度': 'o_lat'}, inplace=True)

# 去除不需要的列
temp = OD.drop(columns="省份城市")

# 合并数据,获取目标位置的经度和纬度
temp = temp.merge(shiqu[['省份城市', '经度', '纬度']], left_on='end_area', right_on='省份城市', how='left')
temp.rename(columns={'经度': 'd_lon', '纬度': 'd_lat'}, inplace=True)
temp = temp.drop(columns="省份城市")
temp.to_csv("temp/OD_lon_lat.csv")
# 准备数据
data = {
    'source_lat': temp["o_lat"].tolist(),  # 源位置的纬度
    'source_lng': temp["o_lon"].tolist(),  # 源位置的经度
    'target_lat': temp["d_lat"].tolist(),  # 目标位置的纬度
    'target_lng': temp["d_lon"].tolist(),  # 目标位置的经度
    'flow': temp["nums"].tolist()  # 流量值
}

# 计算中心经度和纬度
# center_lon = np.mean(np.concatenate((temp["o_lon"].tolist(), temp["d_lon"].tolist())))
# center_lat = np.mean(np.concatenate((temp["o_lat"].tolist(), temp["d_lat"].tolist())))
center_lon = np.mean((temp["o_lon"].tolist()))
center_lat = np.mean((temp["o_lat"].tolist()))
# 转换为 pandas DataFrame
df = pd.DataFrame(data)

# 配置地图
config = {
    "version": "v1",
    "config": {
        "visState": {
            "layers": [
                {
                    "type": "arc",
                    "config": {
                        "dataId": "Flow Data",
                        "label": "Arc Layer",
                        "color": [255, 153, 31],
                        "highlightColor": [252, 242, 26, 255],
                        "columns": {
                            "lat0": "source_lat",  # 源纬度
                            "lng0": "source_lng",  # 源经度
                            "lat1": "target_lat",  # 目标纬度
                            "lng1": "target_lng"  # 目标经度
                        },
                        "isVisible": True,
                        "visConfig": {
                            "opacity": 0.8,
                            "thickness": 5,  # 设置默认线的粗细
                            "thicknessField": {"name": "flow", "scale": "flow", "type": "real"},  # 使用 flow 字段调整粗细
                            "thicknessScale": "linear",  # 使用线性比例调整粗细
                            "colorRange": {
                                "name": "Global Warming",
                                "type": "sequential",
                                "category": "Uber",
                                "colors": ["#5A1846", "#900C3F", "#C70039", "#FF5733", "#FFC300"]
                            },
                            "sizeRange": [5, 120],  # 控制线的粗细范围
                            "targetColor": [149,12,105],  # 目标点颜色(绿色)
                            "sourceColor": [228,155,0]  # 源点颜色(红色)
                        }
                    }
                }
            ]
        },
        "mapState": {
            "bearing": 0,
            "latitude": center_lat,
            "longitude": center_lon,
            "pitch": 45,
            "zoom": 9
        }
    }
}

# 创建 KeplerGl 对象并加载配置
map_1 = KeplerGl(config=config)
map_1.add_data(data=df, name="Flow Data")

# 显示地图
map_1.save_to_html(file_name='temp/gz_flow_map.html')

{/hide}

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »