package Ġcom . routing . b router Ċ Ċ import Ġandroid . content . Context Ċ import Ġjava . io .* Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ import Ġkotlin . math . max Ċ Ċ object ĠUtil Ġ{ ĊĊĠĠĠ Ġfun Ġfilename For Segment ( lat : ĠDouble , Ġlon : ĠDouble ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlat Degree Ġ= Ġlatitude Double ToInt ( lat ) Ġ/ Ġ 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġlon Degree Ġ= Ġlongitude Double ToInt ( lon ) Ġ/ Ġ 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġlat Mod 5 Ġ= Ġlat Degree Ġ% Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġlon Mod 5 Ġ= Ġlon Degree Ġ% Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġseg Lon : ĠInt Ġ= Ġlon Degree Ġ- Ġ 1 8 0 Ġ- Ġlon Mod 5 ĊĠĠĠĠĠĠĠ Ġval Ġseg Lat : ĠInt Ġ= Ġlat Degree Ġ- Ġ 9 0 Ġ- Ġlat Mod 5 ĊĊĠĠĠĠĠĠĠ Ġval Ġs Lon Ġ= Ġif Ġ( seg Lon Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" W ${ - seg Lon }" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" E $ seg Lon " ĊĊĠĠĠĠĠĠĠ Ġval Ġs Lat Ġ= Ġif Ġ( seg Lat Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" S ${ - seg Lat }" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N $ seg Lat " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġs Lon Ġ+ Ġ"_" Ġ+ Ġs Lat ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Double Array ( from : ĠDouble , Ġto : ĠDouble , Ġv ias : ĠList < Double >): ĠDouble Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl ats Ġ= ĠDouble Array ( v ias . size Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġl ats [ 0 ] Ġ= Ġfrom ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġv ias . indices ) Ġl ats [ i Ġ+ Ġ 1 ] Ġ= Ġv ias [ i ] ĊĠĠĠĠĠĠĠ Ġl ats [ 1 Ġ+ Ġmax ( v ias . size , Ġ 0 )] Ġ= Ġto ĊĠĠĠĠĠĠĠ Ġreturn Ġl ats ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Double Array ( double List : ĠList < Double >): ĠDouble Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDouble Array ( double List . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdouble List . indices ) Ġresult [ i ] Ġ= Ġdouble List [ i ] ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy Asset File ( context : ĠContext , Ġasset File : ĠString ?, ĠoutputFile : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . assets . open ( asset File !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠFileOutputStream ( outputFile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy File ( inputStream , ĠoutputStream ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġlatitude Double ToInt ( latitude : ĠDouble ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( latitude Ġ+ Ġ 9 0 . 0 ) Ġ* Ġ 1 0 0 0 0 0 0 . 0 Ġ+ Ġ 0 . 5 ). toInt () ĊĊĠĠĠ Ġinternal Ġfun Ġlongitude Double ToInt ( longitude : ĠDouble ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( longitude Ġ+ Ġ 1 8 0 . 0 ) Ġ* Ġ 1 0 0 0 0 0 0 . 0 Ġ+ Ġ 0 . 5 ). toInt () ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcopy File ( inputStream : ĠInputStream , ĠoutputStream : ĠOutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġvar Ġread : ĠInt ĊĠĠĠĠĠĠĠ Ġwhile Ġ( inputStream . read ( buffer ). also Ġ{ Ġread Ġ= Ġit Ġ} Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( buffer , Ġ 0 , Ġread ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunzip ( zip File : ĠInputStream , Ġdestination : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz in Ġ= ĠZip InputStream ( zip File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġze : ĠZip Entry ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( z in . next Entry . also Ġ{ Ġze Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠFile ( destination , Ġze !!. name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! f . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġf . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfout Ġ= ĠFileOutputStream ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( z in . read ( buffer ). also Ġ{ Ġcount Ġ= Ġit Ġ} Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfout . write ( buffer , Ġ 0 , Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz in . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfout . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz in . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }