Может ли кто-нибудь сказать мне, как также получить географические координаты полос движения?

#xml #openstreetmap #sumo

Вопрос:

У меня есть файл osm.net.xml , который взят с реальной карты. Файл содержит форму (координаты X/Y) как для краев, так и для полос. Я выполнил приведенную ниже команду для преобразования/создания файлов, включающих географические координаты:

netconvert --sumo-net-file osm.net.xml --plain-output-prefix plain --proj.plain-geo

Входной файл выглядит следующим образом (он включает координаты x/y как для edges и lanes ):

введите описание изображения здесь

Я получаю выходные файлы в виде:

введите описание изображения здесь

Я не вижу никакого выходного файла, содержащего географические координаты полос движения. В plain.edg.xml , есть только информация о форме для краев, но не для полос:

введите описание изображения здесь

Может ли кто-нибудь сказать мне, как также получить географические координаты lane s???

Ответ №1:

В настоящее время это невозможно сделать. Вы могли бы только попытаться проанализировать сеть с помощью скрипта python и выполнить гео-преобразование самостоятельно, см. Примеры здесь: https://sumo.dlr.de/docs/Tools/Sumolib.html#import_a_network_and_retrieve_nodes_and_edges Вероятно, это сведется к чему-то вроде:

 import sumolib
net = sumolib.net.readNet('myNet.net.xml')
laneShape = net.getLane('myLaneID').getShape()
for x, y in laneShape:
    lon, lat = net.convertXY2LonLat(x,y)
 

Комментарии:

1. Спасибо @Micheal . Это полезно. Это здорово. Такое преобразование занимает много времени. Я спрашиваю, является ли это хорошим/эффективным способом преобразования X/Y в lon/lat на работающем сервере приложений python. Или лучше преобразовать x/y в lon/lat все сразу до подготовки приложения?

2. Я не уверен, но это не должно быть слишком медленно, и я бы просто попробовал. Вы все еще можете оптимизировать позже.

Ответ №2:

Я сделал что — то подобное, чтобы прочитать весь XML файл целиком. Преобразовал каждое из значений пары x,y в долготы, широты следующим образом:

 # Read the XML file 
tree = et.parse(PATH_TO_XML_FILE) 
file = tree.getroot() 

geoCoordinatesString = "" 

# Iterate edge nodes in the file 
for edge in file.iter('edge'): 

    # Iterate lanes of the current edge-node 
    for lane in edge.iter('lane'): 
        laneID = lane.get("id") 
        laneShape = lane.get("shape") 
        laneCoordinates = laneShape.split() 
        geoCoordinatesString = "" 

        # Iterate each coordinate in the shape of lane 
        for coordinate in laneCoordinates: 
            geoCoordinates = np.array(coordinate.split(",")) 
            geoCoordinates = geoCoordinates.astype(float) 
            geoCoordinateLon, geoCoordinateLat = net.convertXY2LonLat(geoCoordinates[0],geoCoordinates[1]) 
            geoCoordinatesString = "{:}{:},{:} ".format( 
                geoCoordinatesString, str(geoCoordinateLon), str(geoCoordinateLat) 
            ) 

        # Display each lane's shape geo-coordinates 
        geoCoordinatesString = geoCoordinatesString.strip() 
        print ("- {:}".format(geoCoordinatesString)) 
 

Этот вывод позволил мне сохранить информацию о полосе движения, связанную с идентификатором полосы движения.