the-ONE 模拟器的使用 osm转换wkt

打印 上一主题 下一主题

主题 532|帖子 532|积分 1596

处置处罚osm数据


目次

1.使用网站进行处置处罚

获得地图数据

通过https://www.openstreetmap.org/ 搜寻想要的地图,选择想要的区域,导出osm格式文件

将导出的文件转化为csv格式

将导出的文件上传到MyGeodata Cloud - GIS Data Warehouse, Converter, Maps网站上面,将文件转换为csv格式

对数据进行处置处罚

导出来的wkt文件,现实显示的是csv格式的文件,但是导出的文件中的数据,不满足我们对the One 模拟器导入地图数据的需求

我们现实须要的只有第一列数据(除第一行的数据),全部我们须要把全部数据给进行处置处罚,而且为了满足使用需求,还需将POLYGON中的数据进行放大,放大到原来的100000倍
我个人对文件的是使用python脚本进行实现的,以下是实现的代码
  1. import pandas as pd
  2. import os
  3. import re
  4. import shutil
  5. def process_files(directory):
  6.     for filename in os.listdir(directory):
  7.         if filename.endswith(".csv"):  # 只处理.csv文件
  8.             with open(os.path.join(directory, filename), 'r+') as file:
  9.                 content = file.read()
  10.                 content = content.replace('"', '')  # 删除所有引号
  11.                 file.seek(0)  # 将文件指针移回文件开头
  12.                 file.write(content)  # 覆盖原文件
  13.                 file.truncate()  # 删除原文件中未覆盖的部分
  14. def transori(directory):
  15.     for filename in os.listdir(directory):
  16.         if filename.endswith('.csv'):
  17.             file_path = os.path.join(directory, filename)
  18.             df = pd.read_csv(file_path, skiprows=[0])
  19.             df = df[df.columns[0]].to_frame()
  20.             df.to_csv(file_path, index=False, header=False)
  21. def transwkt(directory):
  22.     for dirpath, dirnames, filenames in os.walk(directory):
  23.         for filename in filenames:
  24.             if filename.endswith('.csv'):
  25.                 base = os.path.splitext(filename)[0]
  26.                 shutil.move(os.path.join(dirpath, filename), os.path.join(dirpath, base + '.wkt'))
  27. def trans100000(directory):
  28.     files = [f for f in os.listdir(directory) if f.endswith('.wkt')]
  29.     for file in files:
  30.         with open(os.path.join(directory, file), 'r') as f:
  31.             data = f.read()
  32.         coordinates = re.findall(r'(\d+\.\d+ \d+\.\d+)', data)
  33.         mapping = {}
  34.         for coordinate in coordinates:
  35.             x, y = map(float, coordinate.split())
  36.             mapping[coordinate] = f"{x * 100000} {y * 100000}"
  37.         for original, new in mapping.items():
  38.             data = data.replace(original, new)
  39.         with open(os.path.join(directory, file), 'w') as f:
  40.             f.write(data)
  41. def out_put(directory):
  42.     output_list = []
  43.     for i, filename in enumerate(os.listdir(directory), start=1):
  44.         if filename.endswith('.wkt'):
  45.             filepath = os.path.join(directory, filename)
  46.             output_str = f'MapBasedMovement.mapFile{i} = {filepath}'
  47.             output_list.append(output_str)
  48.     for line in output_list:
  49.         print(line)
  50. # 使用函数
  51. #directory 设置为你存放数据文件的目录
  52. directory = '../data/mygeodata'
  53. transori(directory)
  54. process_files(directory)
  55. transwkt(directory)
  56. trans100000(directory)
  57. out_put(directory)
复制代码
2.使用osm2wkt进行处置处罚

使用osm2wkt对导出的osm进行处置处罚

下载地址(https://github.com/julianofischer/osm2wkt)
用之前的方法大概处置处罚完数据后会存在部门点未连通的情况,须要自己手动添加
但是用此软件可以对其数据的点进行,不连通的街道进行修复或删除,但是大概删除很多数据。
操作代码
  1. java -jar ./osm2wkt.jar map.osm
复制代码
把你的osm文件放在 工具的文件夹下

总结

以上两种方法均能处置处罚数据,但是第二种方法对数据的处置处罚只能得到一个wkt文件,对the one 中限制车辆等事务的运行路线不方便,不能很好的模拟真真相况,第一种可以得到公路这种数据,不同的文件包罗不同的路线

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表