一、共享单车数据

image.png
image.png
image.png
image.png

停车需求提取

先向上平移,然后再拼接表
image.png
image.png
image.png
image.png
image.png
image.png
image.png

8点时段的停车需求

image.png
image.png

电子栅栏数据:构建地理要素

image.png

二、单车与电子栅栏的空间匹配

image.png

1.提取栅栏内的停车

把栅栏的面要素和车的点要素进行匹配
image.png

2.栅栏外的停车匹配最近栅栏

用KDTree方法匹配
image.png
使用geopandas在df中加入地理位置信息
使用shapely.geometry将坐标信息画成线框图
使用exec 将字符串类型的数组批量定义变量并追加
image.png
image.png

  1. exec('point = 1')
  2. print(point) # 1
  3. # exec可将字符串当成代码执行
  4. # 可通过此方法循环创建变量

地理数据的最常见保存方式:geojson,shp文件(附带很多文件)
geojson文件,可通过geojson.io打开文件,在地图上更方便的查看
shp文件,可通过mapshaper plus打开(打开时要全部选中),可明显地识别两要素的交点

三、使用空间连接提取栅栏内的停车

使用geopandas.sjon做空间连接(输入需要2个geopandas)
使用gpd.points_from_xy(经度,纬度)生成geometry列
image.png
结果a:停车点在栅栏内
结果b:停车点不在栅栏内

四、使用KDTree计算栅栏外的停车匹配最近栅栏

KDTree算法原理

image.png
image.png
image.png
image.png
image.png
image.png
因为KDTree算法输入为点和线,
所以使用gdf.boundary,将面要素转换成线要素
image.png
image.png可以看到,只保留边要素了

调用算法,FENICE_ID即为计算到的最近的电子栅栏是哪一个,距离是dist
当前距离是0.0000062是因为直接拿经纬度计算的,不太准确。
如果想要计算更加准确的距离,需要将两个gdf做坐标的投影变换,投影到高斯投影坐标系,这样计算出的距离就是真实的距离。
image.png
5000个点匹配到3W个栅栏,只用了320ms

可视化某个栅栏附件的停车点

  • 画栅栏外的停车点,蓝色
  • 画栅栏内的停车点,红色
  • 画栅栏范围,绿色半透明

image.png
image.png