Purgatory/JoiningNetworksWithDemands

generated on 2019-08-27 00:07:38.275963 from the wiki page for Purgatory/JoiningNetworksWithDemands for SUMO 1.3.1

Step1: Build joined Network

Step1.1: Make Network Parts unique

Both networks must have distinct ids. The most straight forward approach seemed to be to use a prefix. The edges and nodes of both networks were changed by adding an "a" and a "b", respectively. This was done using a text editor. Because edges reference nodes and connections, all three files - edges, nodes, and connections - must have been changed. The following replacements were done:

  • in nodes:
    • id=" to id="a
  • in edges:
    • id=" to id="a
      • watch out - replacing the id also replaces lane ids; this must be reset afterwards
    • from=" to from="a
    • to=" to to="a
  • in connections:
    • from=" to from="a
    • to=" to to="a
    • additionally, the prohibitions were searched and changed
    • watch out - some to-definitions are empty (dead ends) must be reset to these afterwards

Step1.2: Find and remove overlapping Parts

For the used networks, their overlapping parts, edges, and nodes were determined. For each combination, it was decided which shall be kept - the other one will be not included in the final network. I decided to set up a map for edges as following:

a86->b2[0]
a85->b1[1]
b44->a67
b81->a11
b43->a68
b40[0]->a72[0],a72[1]
b41->a17
b42->a71
b40[1]->a69
b48->a181,a18
b54->a224[1]
a136->b49[0]
a135->b50[1]a
a179->b47
a180->b46
a84->b38[0],b38[0]a
a12->b45
a83->b39[1][1][1]
a137->b36
a138->b37
a121->b35[1][1][1][1]
a114->b12

The meaning is that the edge in front of the "->" will be later replaced by the one after the "->". One may note that in some places, two edges were found, where in the other network, only one existed.

The edges in front of the "->" were removed from the according edges file. They of course must also be replaced within the connections file. Due to the relatively large effort, this was done using a tiny script. "mapEdgesInConnections.py" obtains the map-file (assuming it is named "edgemap.txt", and a connections file and simply replaces all occurrences of the edges' to replace ids by the ids of the corresponding edges to keep. The connections file must be given as first parameter, as output a file with the given file name with appended ".mod.xml" is generated.


Corresponding junctions were also determined and written as above. The last entry is in brackets, because it was assumed to be not participating in the later following re-projection of one of the networks.

b1->a9
b36->a15
a81->b39
(a57->b32)

Of course, the from/to information within the edges file must be mapped, too. Due to the small number of replacements to be done, this was done using a text editor. Also, the information about "controlled inner edges" was patched.


Step1.3: Determine and apply the Network Offsets

As both networks have their origin at around (0,0), we have to apply an offset to one of the networks, so that they are not over each other. We use the previously built road networks and the positions of the overlapping nodes found in step 1.2.

a9/b1: 583.69,1061.56  /  929.79,278.76   --> -346.1,782.8
a15/b36: 798.63,985.75  /  1161.21,244.44 --> -362.58,741.31
a81/b39: 852.00,1127.00  / 1199.56,342.43 --> -347.56,784.57

As may be noted, the a15/b36 combination diverges from the others. A visual inspection proves that the nodes' positions differ from their actual shapes. That's why the middle node is removed from the computation. The mean offset (a-b) is then:

-346.83,783.685

This offset must be applied to one network's node positions and edge shapes. Due to large number, again two scripts were prepared, xmlnodes_applyOffset.py and xmledges_applyOffset.py.


Step1.4: Join Networks

Simply call netconvert using all generated files.


Step2: Join Routes


583,69-929,79=-346,1 1061,56-278,76=782,8 798,63-1161,21=-362,58 985,75-244,44=741,31 852,00-1199,56=-347,56 1127,00-342,43=784,57

(-346,1+-347,56)/2=-346,83 (782,8+784,57)/2=783,685