You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将订单经纬度映射到对应分类的多边形边界?

订单经纬度映射到多边形分类的Pandas实现

问题描述

我有两个DataFrame:

  • df1是订单级数据,包含Order_ID、Lat(纬度)、Long(经度)字段,数据如下:
Order_IDLatLong
132.0455-76.9876
232.5679-77.3421
333.4567-77.9876
  • df2包含Category(分类)、Lat、Long字段,每个分类的多个经纬度构成地图上的多边形边界,数据如下:
CategoryLatLong
S132.0109-76.0765
S132.8769-77.5674
S133.1987-78.7654
S233.5967-78.0765
S233.8769-79.5674
S234.1987-79.7654

需求:根据df2中各分类的多边形边界,将df1的Order_ID映射到对应的Category。

解决方案

要实现经纬度点到多边形分类的映射,需要借助shapely库处理地理几何对象,结合Pandas完成数据匹配。具体步骤如下:

  1. 安装依赖库(未安装时执行):pip install shapely pandas
  2. 将df2按Category分组,把每组的经纬度转换为shapely.Polygon对象
  3. 遍历df1的每个订单经纬度,判断其落在哪个多边形内,匹配对应分类

示例代码

import pandas as pd
from shapely.geometry import Point, Polygon

# 构造示例数据
df1 = pd.DataFrame({
    'Order_ID': [1, 2, 3],
    'Lat': [32.0455, 32.5679, 33.4567],
    'Long': [-76.9876, -77.3421, -77.9876]
})

df2 = pd.DataFrame({
    'Category': ['S1', 'S1', 'S1', 'S2', 'S2', 'S2'],
    'Lat': [32.0109, 32.8769, 33.1987, 33.5967, 33.8769, 34.1987],
    'Long': [-76.0765, -77.5674, -78.7654, -78.0765, -79.5674, -79.7654]
})

# 按Category分组,构建分类-多边形字典
category_polygons = {}
for cat, group in df2.groupby('Category'):
    # shapely的Polygon要求坐标顺序为(经度, 纬度),对应(x, y)
    coords = list(zip(group['Long'], group['Lat']))
    category_polygons[cat] = Polygon(coords)

# 定义函数:判断单个点所属的分类
def match_category(row):
    point = Point(row['Long'], row['Lat'])
    for cat, polygon in category_polygons.items():
        if polygon.contains(point):
            return cat
    return None  # 无匹配分类时返回None

# 应用函数到df1,新增Category列
df1['Category'] = df1.apply(match_category, axis=1)

# 输出结果
print(df1)

运行结果

执行代码后,df1会新增Category列,结果如下:

Order_IDLatLongCategory
132.0455-76.9876S1
232.5679-77.3421S1
333.4567-77.9876None

注:订单3的经纬度不在S1或S2的多边形范围内,因此返回None。

内容的提问来源于stack exchange,提问作者Shivam Bindal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:45:46