/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠCh air Ġof ĠGe oin form atics , ĠTechnical ĠUniversity Ġof ĠM un ich Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . r tron . transformer . road space 2 city gml . transformer Ċ Ċ import Ġcom . github . kit tin un f . result . Result Ċ import Ġio . r tron . math . geometry . e uclidean . th reed . Abstract Geometry 3 D Ċ import Ġio . r tron . math . geometry . e uclidean . th reed . curve . Abstract Curve 3 D Ċ import Ġio . r tron . math . geometry . e uclidean . th reed . surface . Abstract Surface 3 D Ċ import Ġio . r tron . model . road spaces . road space . attribute . Attribute List Ċ import Ġio . r tron . model . road spaces . road space . attribute . to Attributes Ċ import Ġio . r tron . model . road spaces . road space . road . Lane Identifier Ċ import Ġio . r tron . model . road spaces . road space . road . Road Ċ import Ġio . r tron . model . road spaces . topology . Lane Topology Ċ import Ġio . r tron . std . handle And Remove Failure Ċ import Ġio . r tron . std . handle Failure Ċ import Ġio . r tron . transformer . road space 2 city gml . module . Gener ics Module Builder Ċ import Ġio . r tron . transformer . road space 2 city gml . module . Transport ation Module Builder Ċ import Ġio . r tron . transformer . road space 2 city gml . parameter . Road spaces 2 City gml Configuration Ċ import Ġorg . city gml 4 j . model . city gml . core . Abstract City Object Ċ import Ġorg . city gml 4 j . model . city gml . core . City Model Ċ import Ġorg . city gml 4 j . model . city gml . gener ics . Generic City Object Ċ import Ġorg . city gml 4 j . model . city gml . transport ation . Road Ġas ĠCity gml Road Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġ[ Road ] Ġclasses Ġ( Road Spaces Ġmodel ) Ġto Ġthe Ġ[ City Model ] Ġ( City G ML Ġmodel ). Ċ Ġ*/ Ċ class ĠRo ads Transformer ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfiguration : ĠRoad spaces 2 City gml Configuration Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠProperties Ġand ĠInitial izers ĊĠĠĠ Ġprivate Ġval Ġ_ report Logger Ġ= Ġconfiguration . get Report Logger () ĊĊĠĠĠ Ġprivate Ġval Ġ_ identifier Ad der Ġ= ĠIdentifier Ad der ( configuration . parameters , Ġ_ report Logger ) ĊĠĠĠ Ġprivate Ġval Ġ_ attributes Ad der Ġ= ĠAttributes Ad der ( configuration . parameters ) ĊĠĠĠ Ġprivate Ġval Ġ_ gener ics Module Builder Ġ= ĠGener ics Module Builder ( configuration ) ĊĠĠĠ Ġprivate Ġval Ġ_ transport ation Module Builder Ġ= ĠTransport ation Module Builder ( configuration ) ĊĊĠĠĠ Ġ// ĠMethods ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthe Ġlines Ġof Ġthe Ġcenter Ġlane Ġ( id = 0 ) Ġof Ġa Ġ[ Road ] Ġclass Ġ( Road Spaces Ġmodel ) Ġto Ġthe Ġ[ Abstract City Object ] ĊĠĠĠĠ Ġ* Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Road Center Lane Lines ( src Road : ĠRoad ): ĠList < Abstract City Object > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Center Lan es () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Line ( it . first , Ġ" Road Center Lane Line ", Ġit . second , Ġit . third ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġlane Ġsurfaces Ġof Ġa Ġ[ Road ] Ġclass Ġ( Road Spaces Ġmodel ) Ġto Ġthe Ġ[ Abstract City Object ] Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Lane Sur faces ( src Road : ĠRoad ): ĠList < Abstract City Object > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Lan es ( configuration . parameters . dis cret ization Step Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Surface ( it . first , Ġ" Lane Surface ", Ġit . second , Ġit . third ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthe Ġrelevant Ġlines Ġ( center Ġline Ġand Ġlane Ġboundaries ) Ġof Ġa Ġ[ Road ] Ġclass Ġ( Road Spaces Ġmodel ) Ġto ĊĠĠĠĠ Ġ* Ġthe Ġ[ Abstract City Object ] Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Lane Lines ( src Road : ĠRoad ): ĠList < Abstract City Object > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Left Lane Bound aries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Line ( it . first , Ġ" Left Lane Boundary ", Ġit . second , ĠAttribute List . EMPTY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Right Lane Bound aries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Line ( it . first , Ġ" Right Lane Boundary ", Ġit . second , ĠAttribute List . EMPTY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Cur ves On Lan es ( 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Line ( it . first , Ġ" Lane Center Line ", Ġit . second , ĠAttribute List . EMPTY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġlater al Ġfill er Ġsurfaces Ġof Ġa Ġ[ Road ] Ġto Ġthe Ġ[ Abstract City Object ] Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ* ĠL ateral Ġfill er Ġsurfaces Ġare Ġbetween Ġtwo Ġadjacent Ġlan es Ġlocated Ġwithin Ġthe Ġsame Ġlane Ġsection . ĊĠĠĠĠ Ġ* ĠThis Ġusually Ġaddresses Ġvertical Ġheight Ġoffsets , Ġwhich Ġare Ġcaused Ġfor Ġexample Ġby Ġside walk s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform L ateral Fill er Sur faces ( src Road : ĠRoad ): ĠList < Abstract City Object > Ġ= ĊĠĠĠĠĠĠĠ Ġsrc Road . getAll L ateral Fill er Sur faces ( configuration . parameters . dis cret ization Step Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Lane Surface ( it . first , Ġ" L ateral Lane Fill er Surface ", Ġit . second , ĠAttribute List . EMPTY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġlong itud inal Ġfill er Ġsurfaces Ġto Ġthe Ġ[ Abstract City Object ] Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ* ĠLong itud inal Ġfill er Ġsurfaces Ġare Ġbetween Ġtwo Ġsuccess ive Ġlan es , Ġwhich Ġcan Ġbe Ġlocated Ġin Ġthe Ġsame Ġstreet Ġor Ġin ĊĠĠĠĠ Ġ* Ġsuccess ive Ġst re ets . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Long itud inal Fill er Sur faces ( src Road : ĠRoad , Ġsrc Lane Topology : ĠL ane Topology ): ĠList < Abstract City Object > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Road . getAll Lane Identifiers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġsrc Lane Topology . getLong itud inal Fill er Sur faces ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( it . lane Id . is Within Same Road ( it . success or Lane Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Long itud inal Lane Fill er Surface Within Road " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" Long itud inal Lane Fill er Surface Between Ro ads " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġit . success or Lane Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Attributes ( configuration . parameters . identifier Attributes Prefix Ġ+ Ġ" to _ ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Lane Surface ( it . lane Id , Ġname , Ġit . surface , Ġattributes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġroad Ġmark ings Ġof Ġa Ġ[ Road ] Ġclass Ġ( Road Spaces Ġmodel ) Ġto Ġthe Ġ[ Generic City Object ] Ġ( City G ML Ġmodel ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Road Mark ings ( src Road : ĠRoad ): ĠList < Generic City Object > Ġ= ĊĠĠĠĠĠĠĠ Ġsrc Road . getAll Road Mark ings ( configuration . parameters . dis cret ization Step Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransform Road Mark ing ( it . first , Ġ" Road Mark ing ", Ġit . second , Ġit . third ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle And Remove Failure Ġ{ Ġ_ report Logger . log ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Road Mark ing ( id : ĠL ane Identifier , Ġname : ĠString , Ġgeometry : ĠAbstract Geometry 3 D , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠAttribute List ): ĠResult < Generic City Object , ĠException > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġgeneric City Object Ġ= Ġ_ gener ics Module Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Generic Object ( geometry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle Failure Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ identifier Ad der . add Identifier ( id , Ġname , Ġgeneric City Object ) ĊĠĠĠĠĠĠĠ Ġ_ attributes Ad der . add Attributes ( id . to Attributes ( configuration . parameters . identifier Attributes Prefix ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , Ġgeneric City Object ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success ( generic City Object ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Lane Surface ( id : ĠL ane Identifier , Ġname : ĠString , Ġsurface : ĠAbstract Surface 3 D , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠAttribute List ): ĠResult < City gml Road , ĠException > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġroad Object Ġ= Ġ_ transport ation Module Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Lane Surface ( surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle Failure Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ identifier Ad der . add Identifier ( id , Ġname , Ġroad Object ) ĊĠĠĠĠĠĠĠ Ġ_ attributes Ad der . add Attributes ( id . to Attributes ( configuration . parameters . identifier Attributes Prefix ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , Ġroad Object ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success ( road Object ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Lane Line ( id : ĠL ane Identifier , Ġname : ĠString , Ġcurve : ĠAbstract Curve 3 D , Ġattributes : ĠAttribute List ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult < Generic City Object , ĠException > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġroad Object Ġ= Ġ_ gener ics Module Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Generic Object ( curve ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle Failure Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ identifier Ad der . add Identifier ( id , Ġname , Ġroad Object ) ĊĠĠĠĠĠĠĠ Ġ_ attributes Ad der . add Attributes ( id . to Attributes ( configuration . parameters . identifier Attributes Prefix ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , Ġroad Object ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success ( road Object ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ