Files
secondo/Algebras/OSM/Scripts/TuCreateNetworkStep3.sec
2026-01-23 17:03:45 +08:00

983 lines
31 KiB
Plaintext

################################################################################
### 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;