Opendiver文件 格式 提取

import xml.etree.ElementTree as ET
from mayavi import mlab
import numpy as np

# 解析XML文件
tree = ET.parse('Shanghai_yanan.xml')
root = tree.getroot()

# 命名空间
ns = {
    'default': 'http://www.dspace.com/XMLSchema/ScenarioAccess/Scenario/Road',
    'common': 'http://www.dspace.com/XMLSchema/ScenarioAccess/Scenario/Common'
}

# 提取道路对象信息
road_objects = []
for obj_elem in root.findall('.//default:EnvironmentObjects', ns):
    obj_info = {
        'name': obj_elem.find('default:Name', ns).text,
        'description': obj_elem.find('default:Description', ns).text,
        'id': obj_elem.find('default:ID', ns).text,
        'x': float(obj_elem.find('default:X', ns).text),
        'y': float(obj_elem.find('default:Y', ns).text),
        'z': float(obj_elem.find('default:Z', ns).text),
        'angle_x': float(obj_elem.find('default:AngleX', ns).text),
        'angle_y': float(obj_elem.find('default:AngleY', ns).text),
        'angle_z': float(obj_elem.find('default:AngleZ', ns).text),
        's': float(obj_elem.find('default:S', ns).text),
        'd': float(obj_elem.find('default:D', ns).text),
    }
    road_objects.append(obj_info)

# 提取道路形状信息
road_shapes = []
for shape_elem in root.findall('.//default:Shape', ns):
    nodes = shape_elem.findall('.//default:Node', ns)
    node_positions = [(float(node.find('default:RelativePosition/default:X', ns).text),
                       float(node.find('default:RelativePosition/default:Y', ns).text)) for node in nodes]
    road_shapes.append(node_positions)

# 可视化道路对象和形状
fig = mlab.figure(bgcolor=(1, 1, 1), size=(800, 600))

# 绘制道路形状
for shape in road_shapes:
    x = [p[0] for p in shape]
    y = [p[1] for p in shape]
    mlab.plot3d(x, y, np.zeros_like(x), color=(0.5, 0.5, 0.5), tube_radius=None)

# 绘制道路对象
for obj in road_objects:
    x, y, z = obj['x'], obj['y'], obj['z']
    # 颜色映射示例:根据道路对象的ID确定颜色
    color = (float(obj['id']) / len(road_objects), 0, 1 - float(obj['id']) / len(road_objects))
    mlab.points3d(x, y, z, color=color, scale_factor=10)

# 用户交互功能和信息显示
@mlab.show
def picker_callback(picker_obj):
    if picker_obj.actor in fig.children:
        picked_id = picker_obj.point_id
        if picked_id != -1:
            obj = road_objects[picked_id]
            info_text = f"""
            Name: {obj['name']}
            Description: {obj['description']}
            ID: {obj['id']}
            Position (X, Y, Z): ({obj['x']}, {obj['y']}, {obj['z']})
            Orientation (Angle X, Angle Y, Angle Z): ({obj['angle_x']}, {obj['angle_y']}, {obj['angle_z']})
            Road Coordinates (S, D): ({obj['s']}, {obj['d']})
            """
            mlab.text(0.05, 0.9, info_text, width=0.4)

# 设置视图属性
mlab.view(azimuth=180, elevation=70, distance='auto')

# 添加标题和轴标签
mlab.title('Shanghai Yanan Road Network')
mlab.xlabel('X-axis')
mlab.ylabel('Y-axis')
mlab.zlabel('Z-axis')

# 添加交互选择器
picker = fig.on_mouse_pick(picker_callback)

# 显示可视化窗口
mlab.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值