diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f252f75..e601f2b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) } android { @@ -23,6 +24,9 @@ android { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } + buildFeatures { + viewBinding = true + } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 @@ -38,7 +42,12 @@ dependencies { implementation(libs.androidx.appcompat) implementation(libs.material) implementation(project(":maps-view")) - + implementation(project(":math")) + implementation(libs.androidx.activity) + implementation(libs.androidx.constraintlayout) + implementation(libs.kotlinx.serialization.json) +// https://mvnrepository.com/artifact/com.google.code.gson/gson + implementation("com.google.code.gson:gson:2.13.1") testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d50ab0f..8fed240 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,16 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Maps" - tools:targetApi="31" /> + tools:targetApi="31"> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/BucketData_1749810551032.json b/app/src/main/assets/BucketData_1749810551032.json new file mode 100644 index 0000000..bcff20e --- /dev/null +++ b/app/src/main/assets/BucketData_1749810551032.json @@ -0,0 +1 @@ +[{"first":{"x":1.192927201941103,"y":1.5285566496977512,"z":0.10556952803932615},"second":{"x":1.3685353193062022,"y":1.3506190507606926,"z":0.1055695280393264},"third":{"x":1.5441434366713014,"y":1.172681451823634,"z":0.10556952803932665}},{"first":{"x":1.1986481854562832,"y":1.5302684562843936,"z":0.10534460252849424},"second":{"x":1.3731424316913887,"y":1.3512384084409033,"z":0.1053446025284942},"third":{"x":1.5476366779264943,"y":1.172208360597413,"z":0.10534460252849416}},{"first":{"x":1.1696985740333659,"y":1.5020522954505582,"z":0.48414186842559126},"second":{"x":1.3441928202684714,"y":1.323022247607068,"z":0.48414186842559115},"third":{"x":1.518687066503577,"y":1.143992199763578,"z":0.48414186842559104}},{"first":{"x":1.1824153774324044,"y":1.50465999225956,"z":0.4364915606535754},"second":{"x":1.3560978002167343,"y":1.3248422622778775,"z":0.43649156065357547},"third":{"x":1.5297802230010642,"y":1.145024532296195,"z":0.4364915606535755}},{"first":{"x":1.1942097052968919,"y":1.5160519024945829,"z":0.07153344395419914},"second":{"x":1.3678921280812217,"y":1.3362341725129003,"z":0.07153344395419922},"third":{"x":1.5415745508655516,"y":1.1564164425312178,"z":0.0715334439541993}},{"first":{"x":1.1787506677985884,"y":1.5360563712691293,"z":0.07119922524204757},"second":{"x":1.3558023635221945,"y":1.3595551048674528,"z":0.07119922524204736},"third":{"x":1.5328540592458006,"y":1.1830538384657763,"z":0.07119922524204715}},{"first":{"x":1.1578458030722651,"y":1.5150863135232264,"z":0.4684591331125426},"second":{"x":1.3348974987958713,"y":1.33858504712155,"z":0.46845913311254295},"third":{"x":1.5119491945194774,"y":1.1620837807198734,"z":0.4684591331125433}},{"first":{"x":1.1975854142127704,"y":1.5331162919676595,"z":0.12221716871936333},"second":{"x":1.3725503528281848,"y":1.3545462209722536,"z":0.12221716871936344},"third":{"x":1.5475152914435992,"y":1.1759761499768477,"z":0.12221716871936356}},{"first":{"x":1.2007485072544835,"y":1.5169909011163927,"z":0.0884776873841262},"second":{"x":1.374287465515191,"y":1.3370347120986532,"z":0.08847768738412595},"third":{"x":1.5478264237758987,"y":1.1570785230809137,"z":0.0884776873841257}},{"first":{"x":1.188460348077378,"y":1.5051409372214224,"z":0.4098478238876109},"second":{"x":1.3619993063380857,"y":1.325184748203683,"z":0.409847823887611},"third":{"x":1.5355382645987934,"y":1.1452285591859435,"z":0.4098478238876111}},{"first":{"x":1.1846041657531787,"y":1.5112993635301275,"z":0.409740329929433},"second":{"x":1.359134352666758,"y":1.33230435282896,"z":0.409740329929433},"third":{"x":1.5336645395803374,"y":1.1533093421277925,"z":0.409740329929433}},{"first":{"x":1.2020619415719387,"y":1.5283216752962936,"z":0.1310408149029409},"second":{"x":1.376592128485518,"y":1.349326664595126,"z":0.1310408149029411},"third":{"x":1.5511223153990974,"y":1.1703316538939585,"z":0.13104081490294128}},{"first":{"x":1.2064783002938084,"y":1.5249051297846004,"z":0.12224432784948355},"second":{"x":1.380474253942191,"y":1.345390762354052,"z":0.12224432784948303},"third":{"x":1.5544702075905736,"y":1.1658763949235036,"z":0.1222443278494825}},{"first":{"x":1.2084665665275627,"y":1.5268322751401535,"z":0.10466579250126731},"second":{"x":1.3824625201759453,"y":1.3473179077096051,"z":0.10466579250126781},"third":{"x":1.556458473824328,"y":1.1678035402790568,"z":0.10466579250126831}},{"first":{"x":1.198425816972176,"y":1.5338845741080398,"z":0.10478247800151683},"second":{"x":1.3737931680211999,"y":1.355709681976605,"z":0.10478247800151683},"third":{"x":1.5491605190702238,"y":1.1775347898451702,"z":0.10478247800151683}},{"first":{"x":1.1794542838196218,"y":1.5152119795886732,"z":0.3923502696256319},"second":{"x":1.3548216348686457,"y":1.3370370874572384,"z":0.3923502696256316},"third":{"x":1.5301889859176696,"y":1.1588621953258036,"z":0.39235026962563124}},{"first":{"x":1.1675988996560478,"y":1.5200537579863624,"z":0.39267277262023065},"second":{"x":1.343929540372124,"y":1.342832130794143,"z":0.39267277262023076},"third":{"x":1.5202601810882004,"y":1.1656105036019238,"z":0.39267277262023087}},{"first":{"x":1.1493997481025828,"y":1.5019461031546477,"z":0.4838107366443962},"second":{"x":1.3257303888186591,"y":1.3247244759624284,"z":0.48381073664439594},"third":{"x":1.5020610295347354,"y":1.147502848770209,"z":0.48381073664439567}},{"first":{"x":1.162830270413867,"y":1.5030262090396425,"z":0.48359321141594036},"second":{"x":1.3383054080406456,"y":1.3249574692932649,"z":0.48359321141594047},"third":{"x":1.513780545667424,"y":1.1468887295468873,"z":0.4835932114159406}},{"first":{"x":1.1935029963184227,"y":1.5332521813644666,"z":0.10563374955889485},"second":{"x":1.3689781339452012,"y":1.355183441618089,"z":0.10563374955889468},"third":{"x":1.5444532715719796,"y":1.1771147018717114,"z":0.10563374955889451}},{"first":{"x":1.189542170219514,"y":1.5302737410159735,"z":0.10559646924745908},"second":{"x":1.3652905921195528,"y":1.3524747190849011,"z":0.105596469247459},"third":{"x":1.5410390140195918,"y":1.1746756971538288,"z":0.10559646924745891}},{"first":{"x":1.1685846402293478,"y":1.5095579193950746,"z":0.46062057729888395},"second":{"x":1.3443330621293865,"y":1.3317588974640022,"z":0.46062057729888395},"third":{"x":1.5200814840294252,"y":1.15395987553293,"z":0.46062057729888395}},{"first":{"x":1.164552338480093,"y":1.5060913368684081,"z":0.4607915221850662},"second":{"x":1.339841111673876,"y":1.327839139147823,"z":0.4607915221850658},"third":{"x":1.5151298848676589,"y":1.149586941427238,"z":0.4607915221850654}},{"first":{"x":1.1836903390762679,"y":1.544111256982429,"z":0.1396686789618358},"second":{"x":1.3608533618306486,"y":1.367721735273993,"z":0.1396686789618355},"third":{"x":1.5380163845850294,"y":1.191332213565557,"z":0.13966867896183519}},{"first":{"x":1.1883985421561223,"y":1.531411282900751,"z":0.13998219332876066},"second":{"x":1.3641255443748899,"y":1.3535910908774453,"z":0.13998219332876097},"third":{"x":1.5398525465936574,"y":1.1757708988541398,"z":0.13998219332876127}},{"first":{"x":1.1651984025495739,"y":1.5084842410517503,"z":0.42626156586994257},"second":{"x":1.3409254047683414,"y":1.3306640490284447,"z":0.42626156586994224},"third":{"x":1.516652406987109,"y":1.1528438570051391,"z":0.4262615658699419}},{"first":{"x":1.1825338771460605,"y":1.505207257243433,"z":0.42594160757972405},"second":{"x":1.3563760521173738,"y":1.3255439660533757,"z":0.42594160757972366},"third":{"x":1.530218227088687,"y":1.1458806748633183,"z":0.42594160757972327}},{"first":{"x":1.1895036766332905,"y":1.5119512342347725,"z":0.40162755213516},"second":{"x":1.3633458516046035,"y":1.3322879430447152,"z":0.40162755213516044},"third":{"x":1.5371880265759166,"y":1.152624651854658,"z":0.4016275521351609}},{"first":{"x":1.1827338345874387,"y":1.5150491197152436,"z":0.4018754439673668},"second":{"x":1.3576560095608878,"y":1.336437158462482,"z":0.40187544396736696},"third":{"x":1.532578184534337,"y":1.1578251972097202,"z":0.40187544396736713}},{"first":{"x":1.1790852224349315,"y":1.5114758810089737,"z":0.40073175849330395},"second":{"x":1.3540073974083806,"y":1.332863919756212,"z":0.4007317584933039},"third":{"x":1.5289295723818297,"y":1.1542519585034503,"z":0.40073175849330384}},{"first":{"x":1.1798650549035996,"y":1.5132472990865293,"z":0.40053627532872627},"second":{"x":1.3544006451544603,"y":1.3342575571017339,"z":0.40053627532872615},"third":{"x":1.528936235405321,"y":1.1552678151169384,"z":0.40053627532872604}},{"first":{"x":1.1768718216150358,"y":1.5103285522746455,"z":0.4439548476872864},"second":{"x":1.3514074118658965,"y":1.33133881028985,"z":0.443954847687286},"third":{"x":1.5259430021167573,"y":1.1523490683050546,"z":0.4439548476872856}},{"first":{"x":1.1739974084326992,"y":1.5134655058550597,"z":0.42808628067917615},"second":{"x":1.3493892517396724,"y":1.3353147233662304,"z":0.4280862806791761},"third":{"x":1.5247810950466456,"y":1.157163940877401,"z":0.42808628067917603}},{"first":{"x":1.174809092935029,"y":1.5142646201730467,"z":0.4194344019017172},"second":{"x":1.3502009362420022,"y":1.3361138376842174,"z":0.41943440190171777},"third":{"x":1.5255927795489754,"y":1.1579630551953881,"z":0.4194344019017183}},{"first":{"x":1.1543596073315672,"y":1.516546607159702,"z":0.45154116752238815},"second":{"x":1.3314089434276863,"y":1.3400429738035486,"z":0.45154116752238793},"third":{"x":1.5084582795238055,"y":1.1635393404473953,"z":0.4515411675223877}},{"first":{"x":1.1543596073315672,"y":1.516546607159702,"z":0.45154116752238815},"second":{"x":1.3314089434276863,"y":1.3400429738035486,"z":0.45154116752238793},"third":{"x":1.5084582795238055,"y":1.1635393404473953,"z":0.4515411675223877}},{"first":{"x":1.1669530163372626,"y":1.504549332154287,"z":0.45130024445289657},"second":{"x":1.3426699140711835,"y":1.3267191551573365,"z":0.45130024445289674},"third":{"x":1.5183868118051045,"y":1.148888978160386,"z":0.4513002444528969}},{"first":{"x":1.167655710050592,"y":1.5052436752711218,"z":0.44262980438414845},"second":{"x":1.343372607784513,"y":1.3274134982741712,"z":0.44262980438414845},"third":{"x":1.519089505518434,"y":1.1495833212772206,"z":0.44262980438414845}},{"first":{"x":1.1868251141131394,"y":1.540023196702864,"z":0.13969016958992794},"second":{"x":1.3637585568440225,"y":1.363403387951418,"z":0.13969016958992847},"third":{"x":1.5406919995749055,"y":1.1867835791999721,"z":0.139690169589929}},{"first":{"x":1.1853224940225993,"y":1.5385179083231784,"z":0.15701248843613555},"second":{"x":1.3622559367534823,"y":1.3618980995717325,"z":0.15701248843613572},"third":{"x":1.5391893794843654,"y":1.1852782908202866,"z":0.15701248843613588}},{"first":{"x":1.1787084461408348,"y":1.543213796191185,"z":0.1657598604083724},"second":{"x":1.3561487440314168,"y":1.3671032039926987,"z":0.16575986040837262},"third":{"x":1.5335890419219989,"y":1.1909926117942125,"z":0.16575986040837284}},{"first":{"x":1.1821362384951486,"y":1.5466674697542773,"z":0.09617330992833661},"second":{"x":1.3595765363857306,"y":1.370556877555791,"z":0.09617330992833739},"third":{"x":1.5370168342763126,"y":1.1944462853573048,"z":0.09617330992833817}},{"first":{"x":1.1907374314248025,"y":1.5191067559820484,"z":0.02010081821165539},"second":{"x":1.3650407060737195,"y":1.3398907733056582,"z":0.020100818211655602},"third":{"x":1.5393439807226366,"y":1.160674790629268,"z":0.020100818211655814}},{"first":{"x":1.1861896072474285,"y":1.5146835977636481,"z":0.38355148362418173},"second":{"x":1.3604928818963458,"y":1.335467615087258,"z":0.3835514836241817},"third":{"x":1.534796156545263,"y":1.1562516324108678,"z":0.3835514836241816}},{"first":{"x":1.1868347840516398,"y":1.5147824896460664,"z":0.3755790516620569},"second":{"x":1.3615315305273936,"y":1.335950035178802,"z":0.3755790516620569},"third":{"x":1.5362282770031475,"y":1.1571175807115377,"z":0.3755790516620569}},{"first":{"x":1.1850933380561395,"y":1.513081316609643,"z":0.41039353494463515},"second":{"x":1.3597900845318933,"y":1.3342488621423787,"z":0.41039353494463515},"third":{"x":1.5344868310076472,"y":1.1554164076751143,"z":0.41039353494463515}},{"first":{"x":1.1763583295988138,"y":1.5068656814242505,"z":0.42657313416067527},"second":{"x":1.3512907276979933,"y":1.3282637326799263,"z":0.4265731341606751},"third":{"x":1.5262231257971728,"y":1.149661783935602,"z":0.42657313416067494}},{"first":{"x":1.1763583295988138,"y":1.5068656814242505,"z":0.42657313416067527},"second":{"x":1.3512907276979933,"y":1.3282637326799263,"z":0.4265731341606751},"third":{"x":1.5262231257971728,"y":1.149661783935602,"z":0.42657313416067494}},{"first":{"x":1.1673129267913012,"y":1.5107884831800888,"z":0.4505937473246122},"second":{"x":1.342791918623211,"y":1.3327235415838932,"z":0.4505937473246124},"third":{"x":1.5182709104551206,"y":1.1546585999876975,"z":0.45059374732461255}},{"first":{"x":1.1666093054086053,"y":1.510095080145443,"z":0.4592641873933547},"second":{"x":1.342088297240515,"y":1.3320301385492472,"z":0.459264187393355},"third":{"x":1.5175672890724248,"y":1.1539651969530516,"z":0.45926418739335534}},{"first":{"x":1.1682378515619414,"y":1.5147606406605043,"z":0.4431327427125433},"second":{"x":1.3441172054816488,"y":1.3370911360605693,"z":0.4431327427125433},"third":{"x":1.5199965594013563,"y":1.1594216314606343,"z":0.4431327427125433}},{"first":{"x":1.1835411549036992,"y":1.5299097519874385,"z":0.05406845112001987},"second":{"x":1.3594205088234066,"y":1.3522402473875035,"z":0.054068451120019956},"third":{"x":1.535299862743114,"y":1.1745707427875685,"z":0.05406845112002004}},{"first":{"x":1.1892807026407777,"y":1.5268720572116528,"z":0.062438165273292504},"second":{"x":1.364425199072117,"y":1.348478096075597,"z":0.06243816527329299},"third":{"x":1.5395696955034563,"y":1.1700841349395414,"z":0.062438165273293475}},{"first":{"x":1.1894980482029385,"y":1.527085443801613,"z":0.04498841692204184},"second":{"x":1.3646425446342778,"y":1.3486914826655574,"z":0.04498841692204164},"third":{"x":1.5397870410656171,"y":1.1702975215295017,"z":0.04498841692204144}},{"first":{"x":1.187106362251495,"y":1.5462388948842467,"z":0.09597107733268971},"second":{"x":1.3643521598813937,"y":1.3699325500677852,"z":0.09597107733268917},"third":{"x":1.5415979575112924,"y":1.1936262052513238,"z":0.09597107733268863}},{"first":{"x":1.1836747597951376,"y":1.542789007047487,"z":0.1655576278127229},"second":{"x":1.3609205574250363,"y":1.3664826622310255,"z":0.16555762781272307},"third":{"x":1.538166355054935,"y":1.190176317414564,"z":0.16555762781272323}},{"first":{"x":1.1696291020467515,"y":1.51300544444408,"z":0.44396433314635253},"second":{"x":1.345876176070301,"y":1.335700709881978,"z":0.44396433314635336},"third":{"x":1.5221232500938506,"y":1.158395975319876,"z":0.4439643331463542}},{"first":{"x":1.172216326179681,"y":1.5155772352335253,"z":0.40925601953837853},"second":{"x":1.3484634002032305,"y":1.3382725006714233,"z":0.40925601953837865},"third":{"x":1.52471047422678,"y":1.1609677661093214,"z":0.40925601953837876}},{"first":{"x":1.1889620621638755,"y":1.5314974494027982,"z":0.12259427249270295},"second":{"x":1.364430789040749,"y":1.3534223925076532,"z":0.12259427249270263},"third":{"x":1.5398995159176225,"y":1.1753473356125081,"z":0.12259427249270231}},{"first":{"x":1.1458587368133943,"y":1.4890249900068593,"z":0.5163332528197238},"second":{"x":1.3213274636902679,"y":1.310949933111714,"z":0.5163332528197238},"third":{"x":1.4967961905671414,"y":1.1328748762165688,"z":0.5163332528197238}},{"first":{"x":1.1656843995288844,"y":1.4912434851788008,"z":0.5006715351805431},"second":{"x":1.3401225740084177,"y":1.3121588032982785,"z":0.5006715351805435},"third":{"x":1.514560748487951,"y":1.1330741214177562,"z":0.500671535180544}},{"first":{"x":1.166716137750721,"y":1.4922484540575909,"z":0.49206467886719174},"second":{"x":1.3411543122302543,"y":1.3131637721770686,"z":0.4920646788671922},"third":{"x":1.5155924867097876,"y":1.1340790902965463,"z":0.49206467886719263}},{"first":{"x":1.159196222414535,"y":1.4988430091371425,"z":0.49978743571581424},"second":{"x":1.3346404791324487,"y":1.3207438435447716,"z":0.4997874357158143},"third":{"x":1.5100847358503624,"y":1.1426446779524007,"z":0.49978743571581435}},{"first":{"x":1.159196222414535,"y":1.4988430091371425,"z":0.49978743571581424},"second":{"x":1.3346404791324487,"y":1.3207438435447716,"z":0.4997874357158143},"third":{"x":1.5100847358503624,"y":1.1426446779524007,"z":0.49978743571581435}},{"first":{"x":1.1738643921808172,"y":1.4995685059874073,"z":0.4683865293678041},"second":{"x":1.3485189131617872,"y":1.3206948122789475,"z":0.4683865293678042},"third":{"x":1.5231734341427572,"y":1.1418211185704876,"z":0.46838652936780434}},{"first":{"x":1.1756022613911545,"y":1.5012653833099818,"z":0.45110396855026325},"second":{"x":1.3502567823721245,"y":1.322391689601522,"z":0.4511039685502634},"third":{"x":1.5249113033530945,"y":1.1435179958930621,"z":0.4511039685502636}},{"first":{"x":1.1870365989588478,"y":1.5324769397555267,"z":0.14856815174286042},"second":{"x":1.3633364402566883,"y":1.355224673314851,"z":0.14856815174286064},"third":{"x":1.5396362815545288,"y":1.1779724068741753,"z":0.14856815174286087}},{"first":{"x":1.189193185847749,"y":1.534621938710367,"z":0.1138014581617573},"second":{"x":1.3654930271455894,"y":1.3573696722696913,"z":0.11380145816175741},"third":{"x":1.5417928684434299,"y":1.1801174058290156,"z":0.11380145816175752}},{"first":{"x":1.1912418033154917,"y":1.538247735493903,"z":0.11380863295157764},"second":{"x":1.367066755138248,"y":1.3605243934239166,"z":0.1138086329515777},"third":{"x":1.5428917069610044,"y":1.1828010513539302,"z":0.11380863295157775}},{"first":{"x":1.1903763486972667,"y":1.5373915254160266,"z":0.13121852620393476},"second":{"x":1.366201300520023,"y":1.3596681833460404,"z":0.1312185262039349},"third":{"x":1.5420262523427795,"y":1.1819448412760543,"z":0.13121852620393504}},{"first":{"x":1.1619760650270108,"y":1.5157777718161967,"z":0.4340247942834488},"second":{"x":1.3380160558923873,"y":1.3382674295368857,"z":0.4340247942834486},"third":{"x":1.5140560467577637,"y":1.1607570872575748,"z":0.43402479428344837}},{"first":{"x":1.180250786652551,"y":1.5339011204995388,"z":0.0626860177890119},"second":{"x":1.3562907775179274,"y":1.3563907782202278,"z":0.06268601778901234},"third":{"x":1.5323307683833038,"y":1.1788804359409168,"z":0.06268601778901278}},{"first":{"x":1.1923783758097009,"y":1.5366728985150293,"z":0.11374883643546918},"second":{"x":1.3684646838884325,"y":1.3592085017837354,"z":0.11374883643546865},"third":{"x":1.544550991967164,"y":1.1817441050524415,"z":0.11374883643546813}},{"first":{"x":1.1477617270837002,"y":1.49198298806172,"z":0.5163468868263469},"second":{"x":1.3229925167467247,"y":1.3136737893251633,"z":0.5163468868263467},"third":{"x":1.4982233064097492,"y":1.1353645905886067,"z":0.5163468868263464}},{"first":{"x":1.1909217268059018,"y":1.534397854410546,"z":0.12260790649932193},"second":{"x":1.3661525164689263,"y":1.3560886556739895,"z":0.12260790649932182},"third":{"x":1.5413833061319508,"y":1.177779456937433,"z":0.12260790649932171}},{"first":{"x":1.174971794882576,"y":1.5066956418501882,"z":0.4174785066270969},"second":{"x":1.3497701640511788,"y":1.3279625163921556,"z":0.41747850662709673},"third":{"x":1.5245685332197816,"y":1.149229390934123,"z":0.41747850662709657}},{"first":{"x":1.173178065475944,"y":1.5049414008598538,"z":0.4435349414576058},"second":{"x":1.3479764346445469,"y":1.3262082754018212,"z":0.4435349414576054},"third":{"x":1.5227748038131497,"y":1.1474751499437885,"z":0.443534941457605}},{"first":{"x":1.190673594554918,"y":1.5360627109509828,"z":0.1396018500514708},"second":{"x":1.366507273352549,"y":1.358348003060804,"z":0.13960185005147038},"third":{"x":1.5423409521501799,"y":1.180633295170625,"z":0.13960185005146997}},{"first":{"x":1.1919703952882403,"y":1.5373457856402668,"z":0.12224504972272825},"second":{"x":1.3678040740858712,"y":1.359631077750088,"z":0.12224504972272829},"third":{"x":1.5436377528835021,"y":1.181916369859909,"z":0.12224504972272833}},{"first":{"x":1.18940528056514,"y":1.5432864260719923,"z":0.13091335417903646},"second":{"x":1.366338824137807,"y":1.3666667183414585,"z":0.1309133541790361},"third":{"x":1.5432723677104738,"y":1.1900470106109247,"z":0.13091335417903574}},{"first":{"x":1.1471379337465157,"y":1.5009439743369688,"z":0.5159527000042982},"second":{"x":1.3240714773191826,"y":1.324324266606435,"z":0.5159527000042985},"third":{"x":1.5010050208918495,"y":1.1477045588759012,"z":0.5159527000042988}},{"first":{"x":1.1569158383618572,"y":1.5157024846878597,"z":0.4692624387341061},"second":{"x":1.3340774614162352,"y":1.3393115571526306,"z":0.4692624387341066},"third":{"x":1.5112390844706132,"y":1.1629206296174015,"z":0.4692624387341071}},{"first":{"x":1.1748389799588066,"y":1.5337039369162615,"z":0.054308730010691926},"second":{"x":1.3520006030131848,"y":1.3573130093810324,"z":0.05430873001069231},"third":{"x":1.529162226067563,"y":1.1809220818458033,"z":0.05430873001069269}},{"first":{"x":1.179974253947316,"y":1.5318505762020087,"z":0.06263562326934732},"second":{"x":1.3568946111593034,"y":1.355217659666096,"z":0.06263562326934732},"third":{"x":1.533814968371291,"y":1.1785847431301835,"z":0.06263562326934732}},{"first":{"x":1.179974253947316,"y":1.5318505762020087,"z":0.06263562326934732},"second":{"x":1.3568946111593034,"y":1.355217659666096,"z":0.06263562326934732},"third":{"x":1.533814968371291,"y":1.1785847431301835,"z":0.06263562326934732}},{"first":{"x":1.18654524244645,"y":1.5095492987170194,"z":0.37573708060721417},"second":{"x":1.3603630139788987,"y":1.329862397971602,"z":0.3757370806072143},"third":{"x":1.5341807855113474,"y":1.1501754972261846,"z":0.3757370806072144}},{"first":{"x":1.184085445435969,"y":1.5071698462749645,"z":0.4192220039585355},"second":{"x":1.3579032169684178,"y":1.3274829455295472,"z":0.4192220039585356},"third":{"x":1.5317209885008665,"y":1.1477960447841298,"z":0.4192220039585357}},{"first":{"x":1.1901821919505555,"y":1.5299754499789213,"z":0.1400784321078203},"second":{"x":1.3660227133889276,"y":1.3522675125639554,"z":0.14007843210782026},"third":{"x":1.5418632348272996,"y":1.1745595751489895,"z":0.1400784321078202}},{"first":{"x":1.191478943279091,"y":1.5312585745995908,"z":0.12272163177907827},"second":{"x":1.3673194647174631,"y":1.3535506371846249,"z":0.12272163177907841},"third":{"x":1.5431599861558352,"y":1.175842699769659,"z":0.12272163177907855}},{"first":{"x":1.1971718021085693,"y":1.5274093558007382,"z":0.13983643344635294},"second":{"x":1.371607324549191,"y":1.3483220907290214,"z":0.13983643344635305},"third":{"x":1.5460428469898129,"y":1.1692348256573046,"z":0.13983643344635316}}] \ No newline at end of file diff --git a/app/src/main/java/com/icegps/maps/MainActivity.kt b/app/src/main/java/com/icegps/maps/MainActivity.kt new file mode 100644 index 0000000..402285e --- /dev/null +++ b/app/src/main/java/com/icegps/maps/MainActivity.kt @@ -0,0 +1,113 @@ +package com.icegps.maps + +import android.os.Bundle +import android.util.Log +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope +import com.icegps.maps.databinding.ActivityMainBinding +import com.icegps.maps.ktx.TAG +import com.icegps.maps.layer.BucketTips +import com.icegps.maps.model.MapMode +import com.icegps.math.geometry.Vector3D +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.descriptors.element +import kotlinx.serialization.encoding.CompositeDecoder +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream +import kotlinx.serialization.modules.SerializersModule + +class MainActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding + val json = Json { + serializersModule = SerializersModule { + contextual( + Vector3D::class, + Vector3DSerializer + ) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + val mapView = binding.mapView + val gridLayer = mapView.createGridLayer() + mapView.addLayer(gridLayer) + val boundaryLayer = mapView.createBoundaryLayer() + mapView.addLayer(boundaryLayer) + val bucketLayer = mapView.createBucketLayer() + mapView.addLayer(bucketLayer) + + mapView.mapMode = MapMode.NorthUp + + lifecycleScope.launch { + val points = json.decodeFromStream>>(assets.open("BucketData_1749810551032.json")) + var index = 0 + while (isActive) { + val triple = points[index++ % points.size] + bucketLayer.updateTipPositions( + BucketTips( + left = triple.first, + center = triple.second, + right = triple.third + ) + ) + Log.d(TAG, "updateTipPositions: ${triple}") + delay(1000) + } + } + } +} + +object Vector3DSerializer : KSerializer { + // 描述序列化结构 + override val descriptor: SerialDescriptor = + buildClassSerialDescriptor("Vector3D") { + element("x") + element("y") + element("z") + } + + // 序列化(对象 → JSON) + override fun serialize(encoder: Encoder, value: Vector3D) { + encoder.beginStructure(descriptor).run { + encodeDoubleElement(descriptor, 0, value.x) + encodeDoubleElement(descriptor, 1, value.y) + encodeDoubleElement(descriptor, 2, value.z) + endStructure(descriptor) + } + } + + // 反序列化(JSON → 对象) + override fun deserialize(decoder: Decoder): Vector3D { + return decoder.beginStructure(descriptor).run { + var x = 0.0 + var y = 0.0 + var z = 0.0 + + while (true) { + when (val index = decodeElementIndex(descriptor)) { + 0 -> x = decodeDoubleElement(descriptor, 0) + 1 -> y = decodeDoubleElement(descriptor, 1) + 2 -> z = decodeDoubleElement(descriptor, 2) + CompositeDecoder.DECODE_DONE -> break + else -> error("Unexpected index: $index") + } + } + + endStructure(descriptor) + Vector3D(x, y, z) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..a569475 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 7bcb8e6..69913a3 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,6 +1,6 @@ - + -