跳过正文
  1. report/

数据清洗

·2060 字
Aoidayo
作者
Aoidayo
懒人
目录

Refer
#

数据集
#

我们能拿到的数据集分为两种:

  • 最原始的数据,轨迹数据以GPS点原始信息保留(lng,lat,timestamp,driver_id,user_id or order_id)
  • 论文二次处理的数据集,轨迹数据的GPS点原始信息多半在经过降采样/地图匹配转换后丢失,不一定保留。
    • 恢复GPS点粒度的POI信息困难,只能得到路段粒度的POI信息

城市拓扑、路网/POI/城市边界
#

目前不管是 osmnx 还是 overpassApi,简单的获取城市的boundary体验还不错,但是在框定较大范围的bbox或者boundary后获取数据的体验都不是很好,常给你报 ConnectTimeout 错误。

作为openstreetmap的替代平台,GeoFabrik有几个优点

  • 支持下载历史数据,最大限度的保留城市拓扑和poi信息
  • 支持下载部分城市的边界范围数据 缺点就是一般只能下载国家级别的路网数据,需要你再框一次才能得到城市路网。

关于其他可见 参考

shapefile
#

包含这几种后缀的数据

  • .shp:几何数据
  • .shx:几何索引
  • .dbf:属性数据
  • .prj:坐标系信息
  • .cpg:字符编码

shp方面包含如下:

  • Point
    • gis_osm_places_free_1:包含城市、小镇、村庄等行政或聚居点的位置信息。
      • 因数据而异,可能没有包含所有的place信息。
    • gis_osm_pois_free_1:兴趣点(Points of Interest,POI)数据,如餐厅、商店、景点等。
    • gis_osm_traffic_free_1:交通相关设施,如交通信号灯、停车标志、人行横道等。
  • Line
    • gis_osm_roads_free_1:道路网络数据,包括高速公路、主干道、街道、小路、自行车道、人行道等。
  • PolyGon
    • gis_osm_places_a_free_1:地点的多边形数据,如城市、小镇、村庄等的边界。
    • gis_osm_pois_a_free_1:兴趣点的多边形数据。

需要注意的是,road_shapefile中包含大量的冗余数据(没有必要添加的路段类型fclass),拿porto市举例:

image-20250209144000050
原始 Porto Road Shapefile
image-20250209144109677
Libcity porto road geo/rel

对比libcity处理的porto市路网数据,可以发现现有路网中存在许多冗余数据(比如porto市的最南边),所以需要进行路网数据的清洗。

因为每个国家的情况不同,国内外的路段保留类型不建议使用相同的策略,对于国外的路网数据,保留如下字段:

reserved_fclass = {"motorway": 0, "trunk": 1, "primary": 2, "secondary": 3, "tertiary": 4, "unclassified": 5, "residential": 6, "motorway_link": 7, "trunk_link": 8, "primary_link": 9, "secondary_link": 10, "tertiary_link": 11, "living_street": 12, "road": 13}

过滤后得到的路网稍显合理,但是仍需要进一步处理。

image-20250209144235702
Filtered Porto RoadMap

路网清洗
#

恢复uv信息
#

建图不光需要路网的线层信息,同样需要点层信息,这里的点指的是路段OD、uv。 osm数据有uv字段,但是从GeoFabrik上下载的shapefile丢失这部分数据,所以只能通过取路段的OD来作为uv。

原始road shapefile(统一WGS-84,EPSG:4326坐标系操作)

  • 提取路段OD为uv
  • 映射 set(uv) 建立点层
  • 建立基础的点层和线层

修复路网
#

路网在恢复uv信息后需要清理环路、自边、自相交、联通性问题,同时进行拓扑优化和路网重塑,规整线层和点层。

  • 构建点层信息
    • 自己构建:使用在恢复uv信息中得到的node构建点层
    • GoTrakIt:使用第三方包从线层构建点层
  • 清理线层的环路、自边、自相交
  • 处理标准路网的连通性问题
  • 重映射点层
  • 最后对路网做拓扑优化和路网重塑

最后得到构建路网的必须数据: roadnode ,即 relgeo

轨迹清洗
#

  • 行程切分
  • 停留点删除
  • 轨迹点上下采样
  • 滑动窗口平均/卡尔曼滤波平滑

地图匹配
#

POI k近邻
#

  • 可以获取 Point和Polygon类型的POI数据(点、多边形面)
  • 处理时为了方便起见,可以统一将坐标系投影到平面坐标系,作k近邻计算。
  • 见仁见智:路段 k近邻POI/GPS k近邻POI
  • k近邻可以在collate_fn中实现