美丽的神话 发表于 2024-7-10 01:37:19

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

处置处罚osm数据


目次

[*]处置处罚osm数据

[*]1.使用网站进行处置处罚

[*]获得地图数据
[*]将导出的文件转化为csv格式
[*]对数据进行处置处罚

[*]2.使用osm2wkt进行处置处罚

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

[*]总结


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

获得地图数据

通过https://www.openstreetmap.org/ 搜寻想要的地图,选择想要的区域,导出osm格式文件
https://img2024.cnblogs.com/blog/3214126/202407/3214126-20240709105807918-2102330782.png
将导出的文件转化为csv格式

将导出的文件上传到MyGeodata Cloud - GIS Data Warehouse, Converter, Maps网站上面,将文件转换为csv格式
https://img2024.cnblogs.com/blog/3214126/202407/3214126-20240709105834603-1107772611.png
对数据进行处置处罚

导出来的wkt文件,现实显示的是csv格式的文件,但是导出的文件中的数据,不满足我们对the One 模拟器导入地图数据的需求
https://img2024.cnblogs.com/blog/3214126/202407/3214126-20240709105847848-2134993685.png
我们现实须要的只有第一列数据(除第一行的数据),全部我们须要把全部数据给进行处置处罚,而且为了满足使用需求,还需将POLYGON中的数据进行放大,放大到原来的100000倍
我个人对文件的是使用python脚本进行实现的,以下是实现的代码
import pandas as pd
import os
import re
import shutil

def process_files(directory):
    for filename in os.listdir(directory):
      if filename.endswith(".csv"):# 只处理.csv文件
            with open(os.path.join(directory, filename), 'r+') as file:
                content = file.read()
                content = content.replace('"', '')# 删除所有引号
                file.seek(0)# 将文件指针移回文件开头
                file.write(content)# 覆盖原文件
                file.truncate()# 删除原文件中未覆盖的部分

def transori(directory):
    for filename in os.listdir(directory):
      if filename.endswith('.csv'):
            file_path = os.path.join(directory, filename)
            df = pd.read_csv(file_path, skiprows=)
            df = df].to_frame()
            df.to_csv(file_path, index=False, header=False)

def transwkt(directory):
    for dirpath, dirnames, filenames in os.walk(directory):
      for filename in filenames:
            if filename.endswith('.csv'):
                base = os.path.splitext(filename)
                shutil.move(os.path.join(dirpath, filename), os.path.join(dirpath, base + '.wkt'))

def trans100000(directory):
    files =
    for file in files:
      with open(os.path.join(directory, file), 'r') as f:
            data = f.read()
      coordinates = re.findall(r'(\d+\.\d+ \d+\.\d+)', data)
      mapping = {}
      for coordinate in coordinates:
            x, y = map(float, coordinate.split())
            mapping = f"{x * 100000} {y * 100000}"
      for original, new in mapping.items():
            data = data.replace(original, new)
      with open(os.path.join(directory, file), 'w') as f:
            f.write(data)

def out_put(directory):
    output_list = []
    for i, filename in enumerate(os.listdir(directory), start=1):
      if filename.endswith('.wkt'):
            filepath = os.path.join(directory, filename)
            output_str = f'MapBasedMovement.mapFile{i} = {filepath}'
            output_list.append(output_str)
    for line in output_list:
      print(line)

# 使用函数
#directory 设置为你存放数据文件的目录
directory = '../data/mygeodata'
transori(directory)
process_files(directory)

transwkt(directory)
trans100000(directory)
out_put(directory)2.使用osm2wkt进行处置处罚

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

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: the-ONE 模拟器的使用 osm转换wkt