################################################################################ ### Creating neTworks from imported OSM data (10 / 11) ################################################################################ ### Description: ### - This script creates neTworks from imported OSM data. ### Please, see tu_shp_import.sh for further details. ### ### Preconditions: ### - activated necessary algebras ### - existing open database with successfully imported osm data ### - extStreetsRel-relation ### extStreetsRel: rel{geoData: sline, StreetId: int, name: string, ### ref: string, roadClass: string, OneWay: int, ### bridge: int, maxSpeed: int, tunnel: bool, ### layer: int, groupId: int} ### - NodesRel-relation ### NodesRel: rel{Node: point, NodeId: int} ### - extSectionsRel-relation ### extSectionsRel: rel{SectionId: int, Section: sline, StartNodeId: int, ### EndNodeId: int, StreetId: int, GroupId: int, ### SectionDist: real} ### ### Postconditions: ### - cityRoads-relation ### cityRoads: rel{Name: string, Road: int, Length: double, Geometry: line, ### Dual: bool, StartsSmaller: bool, RoadLevel: int} ### - cityJunctions-relation ### cityJunctions: rel{Road1: int, Pos1: double, Road2: int, Pos2: double, ### JunctionType: int} ### - city-neTwork ### ### Author: ### - Thomas Uchdorf, thomas.uchdorf(at)fernuni-hagen.de ################################################################################ # Calculating junctions between Four Sections belonging to Two Streets # | # | # | # v #----->x<----- # ^ # | # | # | let FourSecInZeroSecOut1111JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,2,2,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #<-----x<----- # ^ # | # | # | let ThreeSecInOneSecOut2111JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,2,2,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #----->x<----- # ^ # | # | # | let ThreeSecInOneSecOut1211JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,1,2,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #----->x-----> # ^ # | # | # | let ThreeSecInOneSecOut1121JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,2,1,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #----->x<----- # | # | # | # v let ThreeSecInOneSecOut1112JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,2,2,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #<-----x<----- # ^ # | # | # | let TwoSecInTwoSecOut2211JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,1,2,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #<-----x-----> # ^ # | # | # | let TwoSecInTwoSecOut2121JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,2,1,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #<-----x<----- # | # | # | # v let TwoSecInTwoSecOut2112JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,2,2,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #----->x-----> # ^ # | # | # | let TwoSecInTwoSecOut1221JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,1,1,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #----->x<----- # | # | # | # v let TwoSecInTwoSecOut1212JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,1,2,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #----->x-----> # | # | # | # v let TwoSecInTwoSecOut1122JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,2,1,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #<-----x-----> # ^ # | # | # | let OneSecInThreeSecOut2221JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {d} hashjoin [NodeId,EndNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,1,1,1, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #<-----x<----- # | # | # | # v let OneSecInThreeSecOut2212JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData,OneWay] {c} hashjoin [NodeId,EndNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,1,2,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # | # | # | # v #<-----x-----> # | # | # | # v let OneSecInThreeSecOut2122JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,EndNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,2,1,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #----->x-----> # | # | # | # v let OneSecInThreeSecOut1222JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,EndNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, EndNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(1,1,1,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # ^ # | # | # | #<-----x-----> # | # | # | # v let ZeroSecInFourSecOut2222JuncTmp = ((((NodesRel feed FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {a} hashjoin [NodeId, StartNodeId_a,99997]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {b} hashjoin [NodeId,StartNodeId_b,99997] filter [.SectionId_a < .SectionId_b]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {c} hashjoin [NodeId,StartNodeId_c,99997] filter [.SectionId_a < .SectionId_c]) FullSectionsView feed sortby [SectionId] project [StreetId,SectionId,StartNodeId,StreetData,SectionData, OneWay] {d} hashjoin [NodeId,StartNodeId_d,99997] filter [.SectionId_b < .SectionId_d]) projectextEnd [; Road1: .StreetId_a, Pos1: atpoint(.StreetData_a,.Node,TRUE), # * size(.StreetData_a,create_geoid("WGS1984")) / size(.StreetData_a), Road2: .StreetId_b, Pos2: atpoint(.StreetData_b,.Node,TRUE), # * size(.StreetData_b,create_geoid("WGS1984")) / size(.StreetData_b), Road3: .StreetId_c, Road4: .StreetId_d, JunctionType: getconnectivitycode(2,1,1,2, .OneWay_a = 1,.OneWay_b = 1,.OneWay_c = 1,.OneWay_d = 1), Sec1: .SectionId_a, Sec2: .SectionId_b, Sec3: .SectionId_c, Sec4: .SectionId_d, Node: .Node, SecData1: .SectionData_a, SecData2: .SectionData_b, SecData3: .SectionData_c, SecData4: .SectionData_d] filter [(.Road1 = .Road3) and (.Road2 = .Road4) and not(.Road1 = .Road2)] consume; # Creating the union let FourSecJuncBtwTwoSts = ((((((((((((((FourSecInZeroSecOut1111JuncTmp feed ThreeSecInOneSecOut2111JuncTmp feed concat) ThreeSecInOneSecOut1211JuncTmp feed concat) ThreeSecInOneSecOut1121JuncTmp feed concat) ThreeSecInOneSecOut1112JuncTmp feed concat) TwoSecInTwoSecOut2211JuncTmp feed concat) TwoSecInTwoSecOut2121JuncTmp feed concat) TwoSecInTwoSecOut2112JuncTmp feed concat) TwoSecInTwoSecOut1221JuncTmp feed concat) TwoSecInTwoSecOut1212JuncTmp feed concat) TwoSecInTwoSecOut1122JuncTmp feed concat) OneSecInThreeSecOut2221JuncTmp feed concat) OneSecInThreeSecOut2212JuncTmp feed concat) OneSecInThreeSecOut2122JuncTmp feed concat) OneSecInThreeSecOut1222JuncTmp feed concat) ZeroSecInFourSecOut2222JuncTmp feed concat consume;