/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . lets Plot . toolkit . ge ot ools Ċ Ċ import Ġjet brains . lets Plot . spatial . Spatial Dataset Ċ import Ġorg . ge ot ools . data . simple . Simple Feature Collection Ċ import Ġorg . ge ot ools . geojson . geom . Geometry JSON Ċ import Ġorg . location tech . jts . geom . Geometry Ċ import Ġorg . openg is . feature . type . Geometry Descriptor Ċ Ċ /** Ċ Ġ* ĠTrans forms ĠSimple Feature Collection Ġto ĠSpatial Dataset Ġwith Ġfeature Ġge ometries Ġencoded Ġin ĠGEO JSON Ġformat . Ċ Ġ* Ċ Ġ* Ġ@ param Ġdecimals Ġthe Ġnumber Ġof Ġdecimals Ġto Ġuse Ġwhen Ġencoding Ġfloating Ġpoint Ġnumbers . Ċ Ġ*/ Ċ fun ĠSimple Feature Collection . to Spatial Dataset ( decimals : ĠInt Ġ= Ġ 1 0 ): ĠSpatial Dataset Ġ{ ĊĠĠĠ Ġval Ġgeo json Ġ= ĠGeometry JSON ( decimals ) ĊĠĠĠ Ġval Ġ( data , Ġge ometries ) Ġ= ĠgetData And Ge ometries ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgeo json . toString ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠSpatial Dataset . with GEO JSON ( data , Ġge ometries ) Ċ } Ċ Ċ private Ġfun ĠgetData And Ge ometries ( ĊĠĠĠ Ġfeature Collection : ĠSimple Feature Collection , ĊĠĠĠ Ġgeometry ToString : Ġ( Geometry ) Ġ-> ĠString Ċ ): ĠPair < Map < String , ĠList < Any ? >>, ĠList < String >> Ġ{ ĊĠĠĠ Ġval Ġattribute Descriptors Ġ= Ġfeature Collection . schema . attribute Descriptors ĊĊĠĠĠ Ġval Ġdata Attributes Ġ= Ġattribute Descriptors ?. filter Ġ{ Ġit Ġ! is ĠGeometry Descriptor Ġ} ?. map Ġ{ Ġit !! Ġ} Ġ?: Ġempty List () ĊĠĠĠ Ġval Ġgeometry Attribute Ġ= Ġattribute Descriptors ?. find Ġ{ Ġit Ġis ĠGeometry Descriptor Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġgeometry Ġattribute ") ĊĊĊĠĠĠ Ġval Ġc rs Ġ= Ġ( geometry Attribute Ġas ĠGeometry Descriptor ). coordinate Reference System ĊĠĠĠ Ġrequire ( CR S Util . is W GS 8 4 _ 2 D ( crs )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Geometry Ġmust Ġuse ĠW GS 8 4 Ġcoordinate Ġreference Ġsystem Ġbut Ġwas : Ġ${ crs . name } Ġ. " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata Ġ= Ġdata Attributes . map Ġ{ Ġit . local Name Ġto ĠArrayList < Any ?> () Ġ}. toMap () ĊĠĠĠ Ġval Ġge ometries Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġfeature Collection . features (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( it . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Geometry Ġ= Ġfeature . getAttribute ( geometry Attribute . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( feature Geometry Ġis ĠGeometry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Not Ġa Ġgeometry : Ġ[ ${ geometry Attribute . name }] Ġ= Ġ${ feature Geometry ?. java Class ?. simple Name } Ġ( feature Ġid : Ġ${ feature . id })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( feature Geometry . isValid ) Ġ{ Ġ" Invalid Ġgeometry , Ġfeature Ġid : Ġ${ feature . id }" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( data Attribute Ġin Ġdata Attributes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ data Attribute . local Name ]?. add ( feature . getAttribute ( data Attribute . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġge ometries . add ( geometry ToString ( feature Geometry )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠPair ( data , Ġge ometries ) Ċ }