添加一个类别变量,该变量为每条街道10m的每个路段提供唯一id

2024-09-30 03:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的csv,其中包含1s间隔内每个点的行程数据信息:lon、lat、时间戳和街道id。 我的目标是将街道分割为10米长的路段,并根据其位置为每个点指定唯一的路段id

下面是使用df.head()时我的数据的一个示例:

    timestamp           Lat       Lon       street_id
0   4/1/2014 0:11:00    40.7690   -73.9549  140
1   4/1/2014 0:17:00    40.7267   -74.0345  50

我使用以下方法获得空间数据帧:

from geopandas import GeoDataFrame
from shapely.geometry import Point

geometry = [Point(xy) for xy in zip(df.Lon, df.Lat)]
df = df.drop(['Lon', 'Lat'], axis=1)
gdf = GeoDataFrame(df, crs="EPSG:4326", geometry=geometry)

我只是不知道如何开始,我知道我必须按街道分组,然后计算每个点与街道起点之间的距离,但我没有找到如何做到这一点

预期结果应如下所示:

    timestamp           Lat       Lon       street_id segment_id
0   4/1/2014 0:11:00    40.7690   -73.9549  140          5
1   4/1/2014 0:17:00    40.7267   -74.0345  50           1

路段id应为每段10m长街道的唯一标识符


Tags: 数据fromimportidstreetdf街道timestamp
1条回答
网友
1楼 · 发布于 2024-09-30 03:23:31

10米分辨率对应于纬度或经度中第四位数字的变化。因此,您甚至不必按street_id对点进行分组,只需为元组的所有不同组合(纬度、经度)分配唯一id即可:

zz = df[['Lat', 'Lon']].value_counts()
lut = {k:ix for ix, k in enumerate(zz.index.values)}
df['segment_id'] = df.apply(lambda xx: lut[(xx['Lat'], xx['Lon'])], axis=1)

相关问题 更多 >

    热门问题