Skip to content

轨迹生产

本模块提供了一个TripGeneration类,你只需要指定一个路网Net,该模块可以帮助你模拟行车并且生成GPS定位数据TripGeneration包含以下三种生产GPS数据的方法:

生产随机路径trip

使用TripGeneration类提供随generate_rand_trips函数,可以生产随机路径OD,示例代码如下:

import geopandas as gpd
from gotrackit.map.Net import Net
from gotrackit.generation.SampleTrip import TripGeneration

if __name__ == '__main__':
    # 1.构读取link和node
    link = gpd.read_file(r'./data/input/link.shp')
    node = gpd.read_file(r'./data/input/node.shp')

    # 1.构建一个net, 要求路网线层和路网点层必须是WGS-84, EPSG:4326 地理坐标系
    my_net = Net(link_gdf=link, node_gdf=node)
    my_net.init_net()  # 路网对象初始化

    # 新建一个行程生成类
    ts = TripGeneration(net=my_net, loc_error_sigma=50.0, loc_frequency=30, time_step=0.1)

    # 随机生成行程并且输出GPS数据
    ts.generate_rand_trips(trip_num=5, out_fldr=r'./data/output/sample_gps',
                           agent_flag='0527-agent', instant_output=True)

生产指定OD路径的trip

使用TripGeneration类提供随generate_od_trips函数,可以生产指定OD路径的trip,示例代码如下:

import geopandas as gpd
from gotrackit.map.Net import Net
from gotrackit.generation.SampleTrip import TripGeneration

if __name__ == '__main__':
    # 1.构读取link和node
    link = gpd.read_file(r'./data/input/link.shp')
    node = gpd.read_file(r'./data/input/node.shp')

    # 1.构建一个net, 要求路网线层和路网点层必须是WGS-84, EPSG:4326 地理坐标系
    my_net = Net(link_gdf=link, node_gdf=node)
    my_net.init_net()  # 路网对象初始化

    # 新建一个行程生成类
    ts = TripGeneration(net=my_net, loc_error_sigma=50.0, loc_frequency=30, time_step=0.1)

    node_gdf = my_net.get_node_data().to_crs('EPSG:4326').reset_index(drop=True)
    o_set = node_gdf.sample(n=5)['node_id'].to_list()
    od_set = [(o, d) for o in o_set for d in o_set]

    # 依据指定的OD起终点生成trip
    ts.generate_od_trips(od_set=od_set, out_fldr=r'./data/output/sample_gps', time_format="%Y-%m-%d %H:%M:%S.%f",
                         agent_flag='0916-agent', instant_output=False, file_type='shp',
                         start_year=2023)

生产指定路径的trip

使用TripGeneration类提供随generate_destined_trips函数,可以生产指定路径的trip,示例代码如下:

import geopandas as gpd
from gotrackit.map.Net import Net
from gotrackit.generation.SampleTrip import TripGeneration

if __name__ == '__main__':
    # 1.构读取link和node
    link = gpd.read_file(r'./data/input/link.shp')
    node = gpd.read_file(r'./data/input/node.shp')

    # 1.构建一个net, 要求路网线层和路网点层必须是WGS-84, EPSG:4326 地理坐标系
    my_net = Net(link_gdf=link, node_gdf=node)
    my_net.init_net()  # 路网对象初始化

    # 新建一个行程生成类
    ts = TripGeneration(net=my_net, loc_error_sigma=50.0, loc_frequency=30, time_step=0.1)

    # 利用net对象的k节点间的K最短路接口获取节点路径序列
    node_path = list()

    # 从节点110943到达节点225405的最短6条路径
    for path in my_net.shortest_k_paths(110943, 225405, 6):
        node_path.append(path)

    # 依据指定的OD起终点生成trip
    ts.generate_destined_trips(node_paths=node_path, out_fldr=r'./data/output/sample_gps', time_format="%Y-%m-%d %H:%M:%S.%f",
                               agent_flag='0916-agent', instant_output=False, file_type='shp',
                               start_year=2023)

Comments