package Ġio . ge or ocket . index . xml Ċ Ċ import Ġio . ge or ocket . index . CR SA ware Ċ import Ġio . ge or ocket . index . generic . BoundingBox Indexer Ċ import Ġio . ge or ocket . util . Compound CR S Decoder Ċ import Ġio . ge or ocket . util . XML Stream Event Ċ import Ġorg . ge ot ools . refer encing . CR S Ċ import Ġorg . ge ot ools . refer encing . crs . Default Geo graphic CR S . W GS 8 4 Ċ import Ġorg . openg is . refer encing . Factory Exception Ċ import Ġorg . openg is . refer encing . crs . Coordinate Reference System Ċ import Ġorg . openg is . refer encing . cs . Axis Direction Ċ import Ġorg . openg is . refer encing . operation . Math Transform Ċ import Ġorg . openg is . refer encing . operation . Transform Exception Ċ import Ġjavax . xml . stream . events . X MLE vent Ċ Ċ /** Ċ Ġ* ĠIndexes Ġbounding Ġboxes Ġof Ġinserted Ġchunks Ċ Ġ* Ġ@ author ĠM ic hel ĠK ra em er Ċ Ġ*/ Ċ class ĠXML BoundingBox Indexer Ġ: ĠBounding Box Indexer < XML Stream Event >(), ĠCR SA ware Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġstring Ġof Ġthe Ġdetected ĠCR S ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġc rs Str : ĠString ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġdetected ĠCR S Ġor Ġ` null ` Ġif Ġeither Ġthere Ġwas Ġno ĠCR S Ġin Ġthe ĊĠĠ Ġ* Ġchunk Ġor Ġif Ġit Ġwas Ġinvalid ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġc rs : ĠCoordinate Reference System ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrue Ġif Ġx Ġand Ġy Ġare Ġf lipped Ġin Ġ[ crs ] ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġf lipped CR S Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠA Ġtransformation Ġfrom Ġ[ crs ] Ġto ĠW GS 8 4 . Ġ` null ` Ġif Ġ[ crs ] Ġis Ġalso Ġ` null `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġtransform : ĠMath Transform ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrue Ġif Ġwe 're Ġcurrently Ġparsing Ġa Ġ`< lower Corner >` Ġor ĊĠĠ Ġ* Ġ`< upper Corner >` Ġelement ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġparse Corner Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrue Ġif Ġwe 're Ġcurrently Ġparsing Ġa Ġ`< pos List >` Ġelement ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġparse Pos List Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġspatial Ġdimension Ġof Ġthe Ġelement Ġwe 're Ġcurrently Ġparsing Ġor ĊĠĠ Ġ* Ġ`- 1 ` Ġif Ġit Ġcould Ġnot Ġbe Ġdetermined Ġor Ġif Ġwe Ġare Ġcurrently ĊĠĠ Ġ* Ġnot Ġparsing Ġan Ġelement Ġwith Ġspatial Ġcontent . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġs rs Dimension Ġ= Ġ- 1 ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCollect s ĠXML Ġelement Ġcontents ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCheck Ġif Ġx Ġand Ġy Ġare Ġf lipped Ġin Ġthe Ġgiven Ġ[ crs ] ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġis F lipped CR S ( crs : ĠCoordinate Reference System ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( crs . coordinate System . dimension Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdirection Ġ= Ġc rs . coordinate System . get Axis ( 0 ). direction ĊĠĠĠĠĠ Ġif Ġ( direction Ġ== ĠAxis Direction . NORTH Ġ|| Ġdirection Ġ== ĠAxis Direction . UP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Fallback CR S String ( crs : ĠString ?) Ġ{ ĊĠĠĠ Ġhandle S rs Name ( crs Str ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Event ( event : ĠXML Stream Event ) Ġ{ ĊĠĠĠ Ġval Ġreader Ġ= Ġevent . xml Reader ĊĠĠĠ Ġif Ġ( event . event Ġ== ĠX MLE vent . START _ ELEMENT ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġparse ĠS RS Ġand Ġtry Ġto Ġdecode Ġit ĊĠĠĠĠĠ Ġhandle S rs Name ( reader . getAttribute Value ( null , Ġ" srs Name ")) ĊĊĠĠĠĠĠ Ġ// Ġcheck Ġif Ġwe 've Ġgot Ġan Ġelement Ġcontaining Ġspatial Ġcoordinates ĊĠĠĠĠĠ Ġwhen Ġ( reader . local Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Envelope " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġparse Ġthe Ġspatial Ġdimension Ġof Ġthis Ġenvelope ĊĠĠĠĠĠĠĠĠĠ Ġhandle S rs Dimension ( reader . getAttribute Value ( null , Ġ" srs Dimension ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" lower Corner ", Ġ" upper Corner " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġlower Ġand Ġupper Ġcorner Ġof Ġan Ġenvelope ĊĠĠĠĠĠĠĠĠĠ Ġparse Corner Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ ĠstringBuilder . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" pos List ", Ġ" pos " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġlist Ġof Ġpositions Ġof Ġa ĠG ML Ġgeometry ĊĠĠĠĠĠĠĠĠĠ Ġparse Pos List Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ ĠstringBuilder . clear () ĊĠĠĠĠĠĠĠĠĠ Ġhandle S rs Dimension ( reader . getAttribute Value ( null , Ġ" srs Dimension ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġif Ġ( event . event Ġ== ĠX MLE vent . CHAR ACT ERS ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( parse Corner Ġ|| Ġparse Pos List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcollect Ġcontents Ġand Ġparse Ġthem Ġwhen Ġwe Ġencounter Ġthe Ġend Ġelement ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( reader . text ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġif Ġ( event . event Ġ== ĠX MLE vent . END _ ELEMENT ) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( reader . local Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Envelope " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġs rs Dimension Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" lower Corner ", Ġ" upper Corner " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhandle Pos List ( string Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġparse Corner Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" pos List ", Ġ" pos " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhandle Pos List ( string Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġparse Pos List Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġs rs Dimension Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠParse Ġand Ġdecode Ġa Ġ[ srs Name ] ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle S rs Name ( srs Name : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( srs Name Ġ== Ġnull Ġ|| Ġs rs Name . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( crs Str Ġ!= Ġnull Ġ&& Ġc rs Str Ġ== Ġs rs Name ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġsame Ġstring , Ġno Ġneed Ġto Ġparse ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġ// Ġdecode Ġstring ĊĠĠĠĠĠ Ġvar Ġc rs Ġ= Ġif Ġ( Compound CR S Decoder . is Compound ( srs Name )) Ġ{ ĊĠĠĠĠĠĠĠ ĠCompound CR S Decoder . decode ( srs Name ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠCR S . decode ( srs Name ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// Ġonly Ġkeep Ġhorizontal ĠCR S ĊĠĠĠĠĠ Ġval Ġh crs Ġ= ĠCR S . get Horizontal CR S ( crs ) ĊĠĠĠĠĠ Ġif Ġ( h crs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġc rs Ġ= Ġh crs ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// Ġfind Ġtransformation Ġto ĠW GS 8 4 ĊĠĠĠĠĠ Ġval Ġtransform Ġ= ĠCR S . find Math Transform ( crs , ĠW GS 8 4 , Ġtrue ) ĊĠĠĠĠĠ Ġval Ġf lipped CR S Ġ= Ġis F lipped CR S ( crs ) ĊĠĠĠĠĠ Ġc rs Str Ġ= Ġs rs Name ĊĠĠĠĠĠ Ġthis . crs Ġ= Ġc rs ĊĠĠĠĠĠ Ġthis . transform Ġ= Ġtransform ĊĠĠĠĠĠ Ġthis . f lipped CR S Ġ= Ġf lipped CR S ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠFactory Exception ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġunknown ĠCR S Ġor Ġno Ġtransformation Ġavailable ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠParse Ġthe Ġ[ srs Dimension ] Ġattribute ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle S rs Dimension ( srs Dimension : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( srs Dimension Ġ== Ġnull Ġ|| Ġs rs Dimension . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthis . srs Dimension Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . srs Dimension Ġ= Ġs rs Dimension . toInt () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠ Ġthis . srs Dimension Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠHandle Ġthe Ġcontents Ġof Ġa Ġ` pos List ` Ġelement . ĠParses Ġall ĊĠĠ Ġ* Ġcoordinates Ġand Ġadds Ġthem Ġto Ġthe Ġbounding Ġbox . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle Pos List ( text : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( crs Ġ== Ġnull Ġ|| Ġtext Ġ== Ġnull Ġ|| Ġtext . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcoordinates Ġ= Ġtext . trim (). split (""" \ s + """. to Regex ()) ĊĊĠĠĠ Ġ// Ġcheck Ġif Ġdimension Ġis Ġcorrect ĊĠĠĠ Ġval Ġdim Ġ= Ġif Ġ( srs Dimension Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( coordinates . size Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( coordinates . size Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġunknown Ġdimension . Ġignore Ġthis Ġpos Ġlist ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġs rs Dimension ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġconvert Ġstrings Ġto Ġdouble s ĊĠĠĠ Ġval Ġcount Ġ= Ġcoordinates . size Ġ/ Ġdim ĊĠĠĠ Ġval Ġsrc Coords Ġ= ĠDouble Array ( count Ġ* Ġ 2 ) ĊĠĠĠ Ġval Ġdst Coords Ġ= ĠDouble Array ( count Ġ* Ġ 2 ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġj 1 Ġ= Ġi Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġvar Ġj 2 Ġ= Ġj 1 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( f lipped CR S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġj 2 Ġ= Ġj 1 ĊĠĠĠĠĠĠĠĠĠ Ġj 1 Ġ= Ġj 2 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsrc Coords [ j 1 ] Ġ= Ġcoordinates [ i Ġ* Ġdim ]. toDouble () ĊĠĠĠĠĠĠĠ Ġsrc Coords [ j 2 ] Ġ= Ġcoordinates [ i Ġ* Ġdim Ġ+ Ġ 1 ]. toDouble () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġinvalid Ġcoordinates . Ġignore . ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġ// Ġtransform Ġcoordinates Ġto ĠW GS 8 4 ĊĠĠĠĠĠ Ġtransform !!. transform ( src Coords , Ġ 0 , Ġdst Coords , Ġ 0 , Ġcount ) ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġcoordinates Ġto Ġbounding Ġbox ĊĠĠĠĠĠĠĠ ĠaddTo BoundingBox ( dst Coords [ i Ġ* Ġ 2 ], Ġdst Coords [ i Ġ* Ġ 2 Ġ+ Ġ 1 ]) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠTransform Exception ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ