• PART1


    # -*- coding: utf-8 -*-
    from enum import Enum
    from data_map_conf import *
    
    ProfileType = Enum("ProfileType", {"Position":1, "ProfileMessage":2, "PathControl":3, "GlobalData":4, "ProfileControl":5})
    profilemessage = Enum("ProfileMessage",
                        {
                        "Node":1, 
                        "LaneModel":4, 
                        "LaneConnectivity":5, 
                        "LinearObject":6, 
                        "LanesGeometry":7,
                        "LaneWidth":8, 
                        "FunctionRoadClass":13, 
                        "FormOfWay":15, 
                        "Tunnel":19,
                        "TrafficSign":27,
                        "SpecialSituation":29,
                        "RoadSurface":98,
                        "StaticNotODD":103,
                        "StaticODD":108,
                        "Speed":112,
                        "CenterLanesGeometry":113,
                        }
                    )
    
    def adapt_Node(value):
        new_dic = {"node_num":1,"node_info":[]}
        new_dic["node_info"].append(value.pop("node"))
        value.update({"node":new_dic})
    
    
    # 江淮
    # 'value': {
    #     'lanesGeometry': 
    #         {'pointNum': 5, 
    #         'points': 
    #                 [{'slope': 0, 'longitude': '1389772624', 'crossSlope': 0, 'latitude': '479355947', 'headingAngle': 987, 'curvatur': 20}, 
    #                 {'slope': 0, 'longitude': '1389773005', 'crossSlope': 0, 'latitude': '479357621', 'headingAngle': 1083, 'curvatur': 61}, 
    #                 {'slope': 0, 'longitude': '1389773414', 'crossSlope': 0, 'latitude': '479359262', 'headingAngle': 1171, 'curvatur': 90}, 
    #                 {'slope': 0, 'longitude': '1389773855', 'crossSlope': 0, 'latitude': '479360896', 'headingAngle': 1305, 'curvatur': 136},
    #                 {'slope': 0, 'longitude': '1389774336', 'crossSlope': 0, 'latitude': '479362485', 'headingAngle': 1305, 'curvatur': 238}], 
    #         'linearid': 91162}}
    
    
    
    # 广汽
    # data = {
    #     "line_geometry":
    #         {
    #             "geometry":{
    #                 "point_num":10,
    #                 "points":[{"latitude":,"longitude":,},{"latitude":,"longitude":,}]
    #             },
    #             "linearid":,
    #         },
    #     "geometrycount":,
    #     "curvetype":,
    # }
    
    def adapt_LaneGeometry(value):
        point_num = value["lanesGeometry"].pop("pointNum")
        points = value["lanesGeometry"].pop("points")
    
        geometry = {"pointNum":point_num,"points":points}
    
        value["lanesGeometry"].update({"geometry":geometry})
    
    
    # 'value': {
    # 	'centerLane': {
    # 		'type': 1,
    # 		'pointNum': 3,
    # 		'points': [{
    # 			'latitude': 479342541.0,
    # 			'longitude': 1389768162.0
    # 		}, {
    # 			'latitude': 479342795.0,
    # 			'longitude': 1389768209.0
    # 		}, {
    # 			'latitude': 479343570.0,
    # 			'longitude': 1389768348.0
    # 		}],
    # 		'linearid': 100043911
    # 	}
    # }
    
    # data = {
    # 	"line_geometry": {
    # 		"geometry": {
    # 			"point_num": ,
    # 			"points": [],
    # 		}
    # 	}
    # }
    
    def adapt_CenterLanesGeometry(value):
        point_num = value["centerLane"].pop("pointNum")
        points = value["centerLane"].pop("points")
    
        geometry = {"pointNum":point_num,"points":points}
        value["centerLane"].update({"geometry":geometry})
    
    def reload_ori_data(message, data_map):
        """
            message dic profile_name key
        """    
        if type(message) == list:
            for member in message:
                reload_ori_data(member, data_map) 
        else: 
            for key in data_map.keys():
                new_key = data_map[key]
                if(type(new_key) == dict):
                    for lower_key in new_key.keys():
                        if lower_key == "main":
                            _new_key = new_key["main"]
                            message[_new_key] = message.pop(key)
                    reload_ori_data(message[_new_key], new_key["sub"])
                else:  
                    message[new_key] = message.pop(key)
        return message
    
    
    def profile_reload_ori_data(message):
        message = reload_ori_data(message, profile_outer_map_conf)
    
        length = len(message["profileh"][0]["profile_datas"])
        for index in range(length):
            reload_ori_data({"head":message["profileh"][0]["profile_datas"][index]["head"]}, profile_head_map_conf)
        for index in range(length):
            _type = message["profileh"][0]["profile_datas"][index]["head"]["type"]
            if _type == profilemessage.Node.value:
                adapt_Node(message["profileh"][0]["profile_datas"][index]["value"])
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, Node_map_conf)
    
            if _type == profilemessage.LaneModel.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, LaneModel_map_conf)
                
            if _type == profilemessage.LaneConnectivity.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, LaneConnectivity_map_conf)
    
            if _type == profilemessage.LinearObject.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, LinearObject_map_conf)
        
            if _type == profilemessage.LanesGeometry.value:
                # print "LanesGeometry1", message["profileh"][0]["profile_datas"][index]["value"], "LanesGeometry2"
                adapt_LaneGeometry(message["profileh"][0]["profile_datas"][index]["value"])
                # print "LanesGeometry3", message["profileh"][0]["profile_datas"][index]["value"], "LanesGeometry4"
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, LanesGeometry_map_conf)
                # print "LanesGeometry5", message["profileh"][0]["profile_datas"][index]["value"], "LanesGeometry6"
    
            if _type == profilemessage.LaneWidth.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, LaneWidth_map_conf)
    
            if _type == profilemessage.FunctionRoadClass.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, FunctionRoadClass_map_conf)
    
            if _type == profilemessage.FormOfWay.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, FormOfWay_map_conf)
    
            if _type == profilemessage.Tunnel.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, Tunnel_map_conf)
    
            if _type == profilemessage.TrafficSign.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, TrafficSign_map_conf)
    
            if _type == profilemessage.SpecialSituation.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, SpecialSituation_map_conf)
        
            if _type == profilemessage.RoadSurface.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, RoadSurface_map_conf)
    
            if _type == profilemessage.StaticNotODD.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, StaticNotODD_map_conf)
    
            if _type == profilemessage.StaticODD.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, StaticODD_map_conf)
    
            if _type == profilemessage.Speed.value:
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, Speed_map_conf)
            
            if _type == profilemessage.CenterLanesGeometry.value:
                adapt_CenterLanesGeometry(message["profileh"][0]["profile_datas"][index]["value"])
                reload_ori_data({"value":message["profileh"][0]["profile_datas"][index]["value"]}, CenterLanesGeometry_map_conf)
        return message
    
    def ReloadOriData(message, index):
        if (index == ProfileType.PathControl.value):
            message = reload_ori_data(message, path_control_map_conf)
    
        if (index == ProfileType.ProfileMessage.value):
            message = profile_reload_ori_data(message)
            
        return message
    
    if __name__ == "__main__":
    
        # message = {'profileh': 
                #     [
                #         {
                #             'cyclicCounter': 0, 'profileDatas': 
                #                 [
                #                     {'head': 
                #                         {'available': 1, 'confidence': 100.0, 'isRetransmission': False, 'endoffset': 49690, 
                #                         'instanceid': 914802, 'endoffsetFinal': True, 'laneNumber': 0, 'offset': 0, 'pathid': 1, 
                #                         'cyclicCounter': 1, 'type': 13, 'change': 0, 'interpolation': 1
                #                         }, 
                #                     'value': {'laneWidth': {'value': 377}},
                #                 }
                #                 ]
                #         }
                #     ]
                # }
    
        message = {'profileh': 
                [
                    {
                        'cyclicCounter': 0, 'profileDatas': 
                            [
                                {'head': 
                                    {'available': 1, 'confidence': 100.0, 'isRetransmission': False, 'endoffset': 49690, 
                                    'instanceid': 914802, 'endoffsetFinal': True, 'laneNumber': 0, 'offset': 0, 'pathid': 1, 
                                    'cyclicCounter': 1, 'type': 0, 'change': 0, 'interpolation': 1
                                    }, 
                                    'value': {
                                        'node': 
                                            {'probability': 100.0,
                                            'endoffset': 62526, 
                                            'instanceid': 13538, 
                                            'subpath': 3, 
                                            'isComplexIntersection': False, 
                                            'rightOfWay': 2,
                                            'offset': 62526, 
                                            'pathid': 1, 
                                            'turnangle': 4.706233}
                                            }
                            }
                            ]
                    }
                ]
            }
    
    
    
    
    
    
    #     FunctionRoadClass_map_conf = {
    #     "value":{
    #         "main":"value",
    #         "sub":{
    #         "unit8Valuel":"single_value",
    #     }
    #     }
    
    # }
    
        print ReloadOriData(message, 2)
        # print reload_ori_data({"value":_message["profileh"][0]["profileDatas"][0]["value"]}, FunctionRoadClass_map_conf)
        # print _message
        # length = len(message["profileh"][0]["profile_datas"])
        # for index in range(length):
        #     print reload_ori_data({"head":message["profileh"][0]["profileDatas"][index]["head"]}, profile_head_map_conf)
    
    
      
    
  • 相关阅读:
    C# 函数式编程
    【python】 入门 搭建环境
    luogu P3978 [TJOI2015]概率论
    luogu P4778 Counting swaps
    luogu P2480 [SDOI2010]古代猪文
    luogu P3243 [HNOI2015]菜肴制作
    luogu P4744 [Wind Festival]Iron Man
    luogu P4448 [AHOI2018初中组]球球的排列
    luogu P1593 因子和
    luogu P1943 LocalMaxima_NOI导刊2009提高(1)
  • 原文地址:https://www.cnblogs.com/654321cc/p/14310043.html
Copyright © 2020-2023  润新知