将shp文件转化为osm文件,并导入到sumo中建立路网

前言

最近在做的一个课题要用到sumo仿真,正好我们手头也有arcgis的shp文件,比osm上面的要简洁准确不少,在座的过程中遇到不少问题,这里做一下记录

要注意的地方有几个:

  1. shp转osm的工具
  2. shp文件中转换过来的中文乱码
  3. 转化完成的osm无法导入到sumo中成为路网
  4. 批量修改sumo中路网的车道数

以下会一一记录

1、shp转osm工具

这里直接参考了https://www.jianshu.com/p/a47ed4a0b7bd的文章,直接使用JOSM+opendata的插件实测可行的,但是直接转化过来就发现了第二个问题——中文乱码。

2、shp文件中转换过来的中文乱码

这里直接参考了https://blog.csdn.net/qq_35582643/article/details/80651764文章,下载链接已经是失效了,只能加群获取了,但是免费版在转换方面有限制数量,不过对于我来说足够了。

所以现在的操作就是将shp文件利用gis工具转换编码,然后利用JOSM转换为osm文件,而且也没有中文乱码,完成。

3、转化完成的osm无法导入到sumo中成为路网

但是熟悉shp文件的同学应该知道,shp文件中的属性表里面是有着各种各样的字段的,转换为osm文件之后,字段就成了各种各样的tag,但是要注意——osm文件中的tag是有规定的,在shp中的字段变为osm文件之后,这些tag可能就成了非法标签

所以无法直接导入到sumo中成为路网,这里推荐的方法是:

  1. 在arcgis中将shp文件与sumo路网无关的字段统统删除,只留下一些有用的
  2. 查看osm文件中的合法tag内容,并将自己的shp文件做对应修改,这里贴一下osm中几个合法的tag:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 

其中:

way是一条线路

nd标签是构成路线的节点

tag是路线的属性

tag的k对应shp中的字段名称,v对应该路线该字段的记录

所以如果想要shp文件转换的osm可以导入到sumo中,那么它的字段名称就需要是“bicycle”、“highway”、“lanes”、“name”这些名称,字段的记录也要遵循规则,而且顺便一提,highway还控制着车道数哦。

其中最自由的v对应的k应该就是name了,我们可以直接在arcgis里面把需要保留的值字符串相加之后保存在name中。

留下合法的tag之后,就可以导入到sumo中变成路网了。

4、批量修改sumo中路网的车道数

对于arcgis中的路网来说,一般是会有一个字段说明一条路是几个车道,在osm中对应的这个车道数就是:

这个tag的意思就是说,它对应的这条道路的车道数是双向四车道,批量修改的话有两种方法:

  1. 直接在shp文件中修改字段的记录
  2. 修改osm文件的tag

arcgis里面虽然也集成了vb和python的方法,但是我觉得用着不是很舒服,所以我的就直接修改osm文件。

osm文件打开的话本质上还是xml文件,所以使用修改xml的方法修改就可以了,修改的方法可以参考我的上一篇分享文章:

https://blog.csdn.net/darer49/article/details/106712605

osm文件修改完成之后,sumo就可以直接加载osm文件形成路网了。

由此完成,写出来感觉还挺简单的,但是试错的过程可真是恼人嘞。

 

你可能感兴趣的:(sumo,shp,osm)