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

  • Post author:
  • Post category:其他


前言

最近在做的一个课题要用到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 id="233756369" visible="true" version="3" changeset="53939021" timestamp="2017-11-20T05:24:30Z" user="booktiger" uid="4794671">
  <nd ref="1497364443"/>
  <nd ref="294118699"/>
  <nd ref="1497364422"/>
  <nd ref="1772777332"/>
  <nd ref="1420940430"/>
  <nd ref="1772777334"/>
  <nd ref="294114764"/>
  <nd ref="294114772"/>
  <nd ref="1779334576"/>
  <nd ref="1779334575"/>
  <nd ref="1779334574"/>
  <nd ref="1779334555"/>
  <nd ref="1571464679"/>
  <tag k="bicycle" v="no"/>
  <tag k="foot" v="no"/>
  <tag k="highway" v="primary"/>
  <tag k="lanes" v="3"/>
  <tag k="name" v="中关村大街"/>
  <tag k="name:en" v="Zhongguancun Main Street"/>
  <tag k="name:zh" v="中关村大街"/>
  <tag k="name:zh_pinyin" v="Zhōngguāncūn dàjiē"/>
  <tag k="oneway" v="yes"/>
 </way>

其中:


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 k="lanes" v="4"/>

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

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

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

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


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

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

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



版权声明:本文为darer49原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。