diff --git a/build.gradle b/build.gradle index 01428f6..17875d0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,21 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { - google() + maven { url 'https://maven.aliyun.com/repository/public/' } + maven { url 'https://maven.aliyun.com/repository/google/' } + maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' } + maven { url 'https://dl.bintray.com/ppartisan/maven/' } + maven { url "https://clojars.org/repo/" } + maven { url "https://jitpack.io" } mavenCentral() + google() + mavenLocal() + // Nexus Maven 库地址 + // "WinBoll Release" + maven { url "https://nexus.winboll.cc/repository/maven-public/" } + // "WinBoll Snapshot" + maven { url "https://nexus.winboll.cc/repository/maven-snapshots/" } + } dependencies { classpath 'com.android.tools.build:gradle:7.2.1' @@ -13,11 +26,12 @@ buildscript { allprojects { repositories { - // Nexus Maven 库地址 - // "WinBoll Release" - maven { url "https://nexus.winboll.cc/repository/maven-public/" } - // "WinBoll Snapshot" - maven { url "https://nexus.winboll.cc/repository/maven-snapshots/" } + maven { + url "https://mirrors.tencent.com/repository/maven/tencent_public/" + } + maven { + url "https://mirrors.tencent.com/repository/maven/tencent_public_snapshots" + } maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/google/' } @@ -28,6 +42,12 @@ allprojects { mavenCentral() google() mavenLocal() + // Nexus Maven 库地址 + // "WinBoll Release" + maven { url "https://nexus.winboll.cc/repository/maven-public/" } + // "WinBoll Snapshot" + maven { url "https://nexus.winboll.cc/repository/maven-snapshots/" } + } ext { // 定义全局变量,常用于版本管理 diff --git a/gradle.properties b/gradle.properties index 88d5f12..71ba985 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m +org.gradle.jvmargs=-Xmx4096m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects @@ -18,7 +18,9 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -#org.gradle.caching=true +org.gradle.caching=true android.disableAutomaticComponentCreation=true +android.injected.testOnly=false + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 873d15b..3124347 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl = https\://services.gradle.org/distributions/gradle-7.5.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/positions/.DS_Store b/positions/.DS_Store new file mode 100644 index 0000000..9a874b5 Binary files /dev/null and b/positions/.DS_Store differ diff --git a/positions/README.md b/positions/README.md new file mode 100644 index 0000000..2679a36 --- /dev/null +++ b/positions/README.md @@ -0,0 +1,39 @@ +# Positions + +#### 介绍 +位置应用,与卫星定位有关的应用。可以根据设定的位置与时间条件判断,来发送通知的应用。 + +#### 软件架构 +以腾讯位置服务SDK源码为基础。源码地址:https://lbs.qq.com/mobile/androidMapSDK/developerGuide/configuration +适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。 +也适配安卓应用 [AndroidIDE] 的 Gradle 编译结构。 + + +#### Gradle 编译说明 +调试版编译命令 :gradle assembleBetaDebug +阶段版编译命令 :gradle assembleStageRelease + +#### 使用说明 + +在安卓系统中需要设置两个权限允许。 +1.自启动权限允许。 +2.省电策略-无限制权限允许。 + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 : ZhanGSKen(ZhanGSKen@AliYun.Com) +4. 新建 Pull Request + + +#### 特技 + +1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md +2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) +3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 +4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 +5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) +6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) + +#### 参考文档 diff --git a/positions/app_update_description.txt b/positions/app_update_description.txt new file mode 100644 index 0000000..e69de29 diff --git a/positions/build.gradle b/positions/build.gradle new file mode 100644 index 0000000..62567e9 --- /dev/null +++ b/positions/build.gradle @@ -0,0 +1,84 @@ +apply plugin: 'com.android.application' +apply from: '../.winboll/winboll_app_build.gradle' +apply from: '../.winboll/winboll_lint_build.gradle' + +def genVersionName(def versionName){ + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + // 保存基础版本号 + winbollBuildProps.setProperty("baseVersion", "${versionName}"); + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + // 返回编译版本号 + return "${versionName}." + winbollBuildProps['stageCount'] +} + +Properties properties = new Properties() +File localFile = project.rootProject.file('local.properties') +if (localFile.exists()) { + InputStream inputStream = localFile.newDataInputStream() + properties.load(inputStream) +} + +def mapsdkkey = properties.getProperty('mapsdk.key', "") + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "cc.winboll.studio.positions" + minSdkVersion 26 + targetSdkVersion 29 + versionCode 1 + // versionName 更新后需要手动设置 + // 项目模块目录的 build.gradle 文件的 stageCount=0 + // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" + versionName "1.0" + if(true) { + versionName = genVersionName("${versionName}") + } + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + manifestPlaceholders = ["TencentMapSDK_KEY": mapsdkkey] + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + // 定位服务 + implementation 'com.google.android.gms:play-services-location:20.0.0' + + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.viewpager:viewpager:1.0.0' + implementation 'androidx.fragment:fragment:1.0.0' + implementation 'com.google.android.material:material:1.4.0' + implementation 'pub.devrel:easypermissions:2.0.1' + // 地图 + implementation 'com.tencent.map:tencent-map-vector-sdk:6.2.1.250120.3f971009.140342819' + // 基础库 + implementation 'com.tencent.openmap:foundation:0.5.6.9be4e02' + implementation 'com.tencent.map:sdk-utilities:1.0.9' + implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.5.4.3' + implementation 'com.google.code.gson:gson:2.8.5' + + implementation 'io.github.medyo:android-about-page:2.0.0' + implementation 'com.github.getActivity:ToastUtils:10.5' + + implementation 'cc.winboll.studio:libapputils:9.3.2' + implementation 'cc.winboll.studio:libappbase:1.5.6' +} diff --git a/positions/build.properties b/positions/build.properties new file mode 100644 index 0000000..311254f --- /dev/null +++ b/positions/build.properties @@ -0,0 +1,8 @@ +#Created by .winboll/winboll_app_build.gradle +#Tue Feb 25 05:04:52 GMT 2025 +stageCount=0 +libraryProject= +baseVersion=1.0 +publishVersion=1.0.0 +buildCount=184 +baseBetaVersion=1.0.1 diff --git a/positions/proguard-rules.pro b/positions/proguard-rules.pro new file mode 100644 index 0000000..8032985 --- /dev/null +++ b/positions/proguard-rules.pro @@ -0,0 +1,41 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +-dontwarn com.tencent.bugly.** +-keep public class com.tencent.bugly.**{*;} + +-dontwarn com.tencent.tmsqmsp.** +-keep public class com.tencent.tmsqmsp.**{*;} + +-dontwarn com.tencent.tmsbeacon.** +-keep public class com.tencent.tmsbeacon.**{*;} + +-dontwarn com.tencent.map.** +-keep public class com.tencent.map.** {*;} + +-dontwarn com.tencent.mapsdk.** +-keep public class com.tencent.mapsdk.** {*;} + +-dontwarn com.tencent.tencentmap.** +-keep public class com.tencent.tencentmap.** {*;} + +-dontwarn com.tencent.lbssearch.** +-keep public class com.tencent.lbssearch.** {*;} \ No newline at end of file diff --git a/positions/src/.DS_Store b/positions/src/.DS_Store new file mode 100644 index 0000000..9d6a566 Binary files /dev/null and b/positions/src/.DS_Store differ diff --git a/positions/src/beta/AndroidManifest.xml b/positions/src/beta/AndroidManifest.xml new file mode 100644 index 0000000..c598f4f --- /dev/null +++ b/positions/src/beta/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/positions/src/beta/res/values/strings.xml b/positions/src/beta/res/values/strings.xml new file mode 100644 index 0000000..7ef2ccf --- /dev/null +++ b/positions/src/beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + Positions+ + + diff --git a/positions/src/main/.DS_Store b/positions/src/main/.DS_Store new file mode 100644 index 0000000..d381763 Binary files /dev/null and b/positions/src/main/.DS_Store differ diff --git a/positions/src/main/AndroidManifest.xml b/positions/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7bf84d9 --- /dev/null +++ b/positions/src/main/AndroidManifest.xml @@ -0,0 +1,741 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/positions/src/main/assets/21.jpg b/positions/src/main/assets/21.jpg new file mode 100644 index 0000000..4587875 Binary files /dev/null and b/positions/src/main/assets/21.jpg differ diff --git a/positions/src/main/assets/22.jpg b/positions/src/main/assets/22.jpg new file mode 100644 index 0000000..f9562dc Binary files /dev/null and b/positions/src/main/assets/22.jpg differ diff --git a/positions/src/main/assets/23.jpg b/positions/src/main/assets/23.jpg new file mode 100644 index 0000000..dc031f1 Binary files /dev/null and b/positions/src/main/assets/23.jpg differ diff --git a/positions/src/main/assets/24.jpg b/positions/src/main/assets/24.jpg new file mode 100644 index 0000000..fdf0f61 Binary files /dev/null and b/positions/src/main/assets/24.jpg differ diff --git a/positions/src/main/assets/25.jpg b/positions/src/main/assets/25.jpg new file mode 100644 index 0000000..921f9ce Binary files /dev/null and b/positions/src/main/assets/25.jpg differ diff --git a/positions/src/main/assets/26.jpg b/positions/src/main/assets/26.jpg new file mode 100644 index 0000000..3c45645 Binary files /dev/null and b/positions/src/main/assets/26.jpg differ diff --git a/positions/src/main/assets/arc.dat b/positions/src/main/assets/arc.dat new file mode 100644 index 0000000..2f5b23f --- /dev/null +++ b/positions/src/main/assets/arc.dat @@ -0,0 +1,50 @@ +31.23037 121.4737 40.07733 116.60039 45.0 +30.5702 104.06476 40.07733 116.60039 45.0 +22.54286 114.05956 40.07733 116.60039 45.0 +23.12908 113.26436 40.07733 116.60039 45.0 +29.56471 106.55073 40.07733 116.60039 45.0 +30.27415 120.15515 40.07733 116.60039 45.0 +24.87966 102.83322 40.07733 116.60039 45.0 +34.32932 108.70929 40.07733 116.60039 45.0 +45.80216 126.5358 40.07733 116.60039 45.0 +28.22778 112.93886 40.07733 116.60039 45.0 +18.25248 109.51209 40.07733 116.60039 45.0 +43.82663 87.61688 40.07733 116.60039 45.0 +30.59276 114.30525 40.07733 116.60039 45.0 +22.27534 114.16546 40.07733 116.60039 45.0 +26.64702 106.63024 40.07733 116.60039 45.0 +24.47951 118.08948 40.07733 116.60039 45.0 +20.04422 110.19989 40.07733 116.60039 45.0 +28.68202 115.85794 40.07733 116.60039 45.0 +43.81602 125.32357 40.07733 116.60039 45.0 +36.06623 120.38299 40.07733 116.60039 45.0 +22.81673 108.3669 40.07733 116.60039 45.0 +26.07421 119.29647 40.07733 116.60039 45.0 +38.91369 121.61476 40.07733 116.60039 45.0 +41.80563 123.43236 40.07733 116.60039 45.0 +32.05838 118.79647 40.07733 116.60039 45.0 +36.06138 103.83417 40.07733 116.60039 45.0 +38.48644 106.23248 40.07733 116.60039 45.0 +27.99492 120.69939 40.07733 116.60039 45.0 +37.46353 121.44801 40.07733 116.60039 45.0 +22.27073 113.57668 40.07733 116.60039 45.0 +29.87386 121.55027 40.07733 116.60039 45.0 +31.82057 117.22901 40.07733 116.60039 45.0 +34.34127 108.93984 40.07733 116.60039 45.0 +49.21163 119.76584 40.07733 116.60039 45.0 +40.84149 111.75199 40.07733 116.60039 45.0 +37.87059 112.55067 40.07733 116.60039 45.0 +46.58758 125.10307 40.07733 116.60039 45.0 +25.27361 110.29002 40.07733 116.60039 45.0 +31.46751 104.6796 40.07733 116.60039 45.0 +24.87389 118.67587 40.07733 116.60039 45.0 +30.69186 111.28642 40.07733 116.60039 45.0 +23.54972 116.37271 40.07733 116.60039 45.0 +40.65781 109.84021 40.07733 116.60039 45.0 +37.51348 122.12171 40.07733 116.60039 45.0 +31.49099 120.31237 40.07733 116.60039 45.0 +22.18684 113.54294 40.07733 116.60039 45.0 +34.74725 113.62493 40.07733 116.60039 45.0 +34.61812 112.45361 40.07733 116.60039 45.0 +36.50204 102.104287 40.07733 116.60039 45.0 +24.954708 121.48068 40.07733 116.60039 45.0 \ No newline at end of file diff --git a/positions/src/main/assets/arcDistricts.dat b/positions/src/main/assets/arcDistricts.dat new file mode 100644 index 0000000..804ceda --- /dev/null +++ b/positions/src/main/assets/arcDistricts.dat @@ -0,0 +1,10 @@ +39.90469 116.40717 29.56471 106.55073 30.0 +39.90469 116.40717 39.53775 116.68376 30.0 +39.90469 116.40717 31.23037 121.4737 30.0 +39.90469 116.40717 23.12908 113.26436 30.0 +39.90469 116.40717 28.22778 112.93886 30.0 +29.56471 106.55073 39.90469 116.40717 60.0 +18.25248 109.51209 39.90469 116.40717 60.0 +31.23037 121.4737 39.90469 116.40717 60.0 +23.12908 113.26436 39.90469 116.40717 60.0 +39.53775 116.68376 39.90469 116.40717 60.0 \ No newline at end of file diff --git a/positions/src/main/assets/cluster_new b/positions/src/main/assets/cluster_new new file mode 100644 index 0000000..8e6a771 --- /dev/null +++ b/positions/src/main/assets/cluster_new @@ -0,0 +1,25 @@ +116.307621 39.984059 +116.304703 39.981954 +116.312256 39.984355 +116.315346 39.980442 +116.308994 39.981527 +116.310539 39.979751 +116.305776 39.977252 +116.316419 39.984026 +116.314874 39.976956 +116.311827 39.978501 +116.312814 39.980277 +116.369022 39.980236 +116.368486 39.980236 +116.367488 39.977161 +116.396713 39.915398 +116.455421 39.937645 +116.321182 39.896304 +121.452827 31.254487 +121.485443 31.225133 +121.442528 31.216912 +121.500893 31.251552 +121.455917 31.249204 +114.042892 22.546885 +113.999805 22.538086 +114.082031 22.538086 \ No newline at end of file diff --git a/positions/src/main/assets/color_arrow_texture.png b/positions/src/main/assets/color_arrow_texture.png new file mode 100644 index 0000000..b784e9b Binary files /dev/null and b/positions/src/main/assets/color_arrow_texture.png differ diff --git a/positions/src/main/assets/color_texture.png b/positions/src/main/assets/color_texture.png new file mode 100644 index 0000000..648f0fe Binary files /dev/null and b/positions/src/main/assets/color_texture.png differ diff --git a/positions/src/main/assets/data2k b/positions/src/main/assets/data2k new file mode 100644 index 0000000..556a3ad --- /dev/null +++ b/positions/src/main/assets/data2k @@ -0,0 +1,2000 @@ +116.895579 24.306521 43 +113.951068 22.772504 48 +110.00006 40.603564 38 +111.846788 21.897821 97 +120.607979 28.022674 49 +120.244238 27.642108 21 +113.304118 23.154842 9 +113.924164 23.219795 94 +101.692567 36.945368 39 +121.595172 38.977931 86 +117.215115 39.211625 63 +117.29184 34.208296 25 +113.268392 22.855112 38 +104.40182 30.763942 78 +103.858606 36.042294 29 +111.807038 40.480162 21 +116.492689 23.270168 14 +113.714688 34.727011 93 +100.300696 24.294623 13 +106.520348 29.584038 43 +120.713809 32.500059 74 +113.899515 22.496365 23 +114.277144 26.734914 16 +117.789959 36.139838 17 +113.816098 23.108165 22 +117.999552 24.613994 88 +114.521645 32.202431 8 +105.895828 32.423113 48 +114.413938 30.468402 66 +123.622729 41.922734 86 +119.278829 26.030958 49 +113.7508 23.096938 28 +109.550306 18.759454 99 +117.087296 37.416999 57 +116.616979 35.410712 59 +104.680951 23.442143 77 +116.011224 36.972677 21 +121.662662 31.265527 98 +113.160712 22.311906 98 +113.259499 23.147357 39 +116.490488 39.752985 28 +108.962473 34.245263 90 +112.926264 28.357455 85 +106.099789 25.172186 39 +124.919729 46.610268 14 +122.265164 43.626166 3 +103.965711 30.759318 66 +81.864027 41.799725 23 +109.026665 34.999063 8 +117.723772 34.562502 18 +121.538642 31.221014 71 +113.616099 23.125 31 +118.539784 32.98618 51 +118.045868 33.910477 58 +102.733748 24.999628 80 +110.120424 21.814721 69 +113.53721 34.831027 63 +103.750423 29.564131 51 +108.343693 22.847061 48 +120.974335 31.425611 95 +121.486648 31.273243 39 +121.578509 45.415852 12 +120.176218 30.284694 18 +113.244533 22.83731 47 +113.882833 22.600005 16 +120.861598 32.049926 93 +119.601994 31.745735 78 +115.550205 34.846048 95 +113.832878 34.025948 79 +113.96713 35.715252 18 +110.199547 22.683293 66 +106.46486 29.548186 23 +102.782912 24.937195 34 +122.036842 37.188304 91 +110.042236 40.593977 6 +113.225579 23.470736 91 +113.303911 34.779328 33 +124.900308 46.63403 55 +113.726187 34.763102 7 +105.918555 34.488574 17 +119.195951 36.717647 47 +120.548152 40.445429 6 +103.664276 30.931069 85 +118.046192 24.664057 94 +87.313148 44.015054 77 +121.404588 37.457301 26 +101.211857 25.436678 9 +113.924128 22.545625 100 +108.878912 34.242935 97 +114.245129 30.742 100 +117.196682 35.092336 22 +115.686622 29.687971 84 +113.38943 22.984364 80 +113.154963 29.343102 19 +116.336689 40.043326 33 +116.58314 40.293543 36 +103.871946 36.065076 84 +120.696238 30.501609 20 +120.560863 30.640925 96 +115.777431 37.77055 53 +103.40683 23.3597 78 +124.794362 40.729217 96 +111.005031 21.540118 11 +112.794518 24.053766 76 +109.506441 18.28923 74 +118.015658 36.636986 6 +119.184336 34.943714 76 +114.244123 22.69433 80 +108.349909 22.804557 21 +106.629241 29.711155 65 +106.581181 29.521255 8 +114.263939 30.583946 70 +113.84196 34.020578 7 +123.182658 42.507064 74 +109.305814 24.261247 35 +115.958638 34.541096 13 +112.695893 22.383657 85 +119.061564 31.670387 83 +108.346603 22.766239 74 +116.606783 35.41594 61 +121.342874 31.285673 48 +118.012281 36.845991 70 +123.429054 41.79428 26 +114.082059 32.128462 77 +113.28104 23.054131 71 +114.372122 30.529026 24 +113.495223 23.074605 96 +120.551656 31.441625 75 +126.592051 43.849908 35 +114.609949 33.561748 15 +120.405007 36.324941 7 +109.382718 24.267424 70 +118.170706 32.674172 94 +119.269432 33.433043 51 +104.099379 26.245409 14 +118.876388 31.773252 30 +111.690258 40.813707 61 +116.093437 35.355328 74 +111.440493 27.690723 15 +111.298247 27.698935 84 +112.950275 34.172299 82 +104.104841 30.627695 16 +105.34373 30.113237 14 +117.247194 31.900168 84 +114.931865 36.357763 69 +116.227878 23.433224 51 +112.622439 28.706619 16 +121.576038 31.120998 68 +114.148076 30.628068 93 +114.428581 38.048127 22 +108.947704 34.305244 10 +116.375703 30.85227 76 +120.093295 31.793165 78 +112.469682 34.150657 59 +118.300304 35.003092 84 +119.145206 28.076615 57 +114.674115 33.647391 26 +114.283226 31.506408 96 +115.047325 26.325752 95 +86.0981 44.312374 59 +124.285543 42.063808 68 +113.271518 23.12112 12 +123.617563 47.23076 7 +114.435812 30.60946 49 +113.67466 34.758357 28 +116.350074 39.850893 60 +122.447143 36.970817 87 +113.201558 33.768945 41 +110.198837 20.344352 31 +113.532988 23.852085 43 +116.412668 34.936767 91 +106.741385 26.568277 59 +103.894323 30.810307 75 +120.679961 31.143168 72 +112.374264 34.680019 99 +121.457857 31.22919 75 +108.346855 22.810562 16 +118.568368 34.845626 73 +114.512357 36.618399 2 +116.742472 23.495446 55 +112.153191 30.361585 45 +119.483364 25.894396 85 +103.704735 36.100581 28 +105.639146 30.326327 49 +114.461522 22.809171 17 +119.790396 33.798703 12 +116.647449 33.643499 27 +113.00942 28.234725 3 +105.859034 37.011078 84 +116.673222 23.482735 63 +109.25735 25.072275 57 +116.431901 39.976948 39 +118.796951 32.047455 86 +119.991868 28.893313 31 +114.938504 25.862368 10 +121.871976 29.901115 100 +118.319564 32.325613 3 +119.609908 25.754623 88 +109.603979 19.51865 17 +108.958673 34.212378 68 +118.794112 32.027077 54 +106.520582 29.513649 70 +121.318593 30.227412 42 +115.361714 28.865907 28 +117.487158 23.806616 68 +111.323758 30.708287 41 +123.52714 41.805983 31 +116.264151 40.123681 13 +113.817778 23.122358 18 +121.551542 29.800633 95 +113.819557 22.801575 4 +103.933408 36.052048 50 +118.793591 32.056514 21 +108.604884 23.4393 57 +113.091345 28.236316 2 +111.489999 27.65158 95 +103.401458 25.898118 18 +123.340274 41.750622 45 +117.075654 39.383565 51 +111.309134 23.835195 19 +110.433556 34.874668 69 +113.682215 34.838649 4 +112.445508 37.685577 22 +115.942818 28.660941 12 +116.34181 37.480486 65 +106.248781 29.456216 30 +113.327043 23.041378 61 +104.276929 30.574837 58 +114.336145 23.003402 38 +113.19492 23.141243 98 +121.341006 30.322438 63 +118.193882 24.489244 32 +109.898947 40.676985 30 +113.587237 30.949514 59 +104.379875 31.155592 96 +115.347008 38.764412 13 +126.657079 45.783459 45 +117.532361 36.659289 66 +101.520919 36.653542 3 +121.50006 29.828554 92 +121.525769 31.297708 72 +113.634362 34.73597 56 +113.97641 22.701582 33 +114.019465 22.918772 34 +103.984504 30.688165 85 +114.358037 36.11059 82 +113.105529 22.852906 80 +120.504827 36.314211 5 +112.064205 37.455123 98 +120.417943 31.913633 49 +108.301014 22.839067 24 +120.366713 27.464139 96 +104.079221 30.663379 73 +114.130352 22.545107 74 +109.862045 29.004063 98 +130.351639 46.816811 23 +113.612407 23.010421 77 +117.019896 36.653593 65 +121.640465 38.925981 55 +114.299979 30.593024 40 +106.077241 29.827019 61 +114.292353 30.587599 43 +106.329782 38.116598 36 +117.94038 40.974879 12 +104.047457 34.448159 50 +99.968826 25.672386 89 +119.875133 31.815582 59 +117.180216 26.90989 38 +113.501844 22.229378 97 +104.456446 30.223605 93 +111.582659 39.425966 93 +113.849668 22.897724 1 +126.54807 44.835942 61 +117.847217 36.817495 71 +119.678916 29.042816 21 +108.952376 34.236422 65 +118.645137 42.325882 51 +119.901121 29.453032 77 +108.523812 25.923353 80 +103.785807 30.881098 49 +107.389037 40.765086 63 +120.698583 31.350765 55 +119.978788 36.299043 45 +123.787819 41.307084 9 +120.209572 30.182794 95 +114.045732 22.629222 81 +118.786494 30.943196 51 +113.670114 34.753204 79 +103.857366 30.064645 57 +111.546197 24.459818 77 +130.578712 46.241894 91 +115.602945 34.427542 41 +111.230505 28.384471 89 +104.953748 28.378647 71 +112.051314 22.919446 2 +110.065744 20.911429 34 +121.453761 31.20029 80 +110.088741 20.923584 17 +120.904196 31.959406 7 +112.510501 26.91796 5 +121.564064 31.20917 72 +119.647134 32.313111 82 +104.834813 29.503992 29 +114.129795 22.601698 27 +121.753615 36.877897 66 +114.477062 38.025497 93 +116.483868 23.598642 42 +125.667065 44.393236 24 +116.407386 36.858264 83 +119.459101 32.213811 74 +114.968408 22.75695 50 +120.702661 27.944057 21 +121.442568 31.182883 41 +122.629859 40.959483 80 +117.000888 36.728639 65 +113.357199 22.054562 15 +117.033837 25.098962 58 +121.317012 31.3424 33 +113.263065 23.187418 33 +123.434579 41.16338 55 +118.238528 25.4884 21 +116.08864 39.40688 83 +103.960501 30.786864 28 +110.422614 29.115576 36 +118.714594 32.210145 63 +113.425955 23.430637 67 +110.347471 20.006486 30 +120.047769 30.248909 53 +118.461335 24.725227 29 +121.358199 31.446493 69 +112.709422 22.373807 21 +112.37942 34.606271 4 +125.251797 43.849577 74 +120.344201 27.470742 55 +118.110996 24.473459 29 +117.488066 33.254768 19 +99.8885 22.495856 71 +118.050459 36.782992 57 +108.37313 22.805215 6 +113.901985 34.804882 39 +100.74755 21.701881 45 +112.794276 22.301206 4 +112.936846 28.727622 27 +119.222568 36.441418 70 +120.256284 29.832165 24 +113.047876 22.944583 14 +107.393375 29.712386 16 +113.118699 22.628404 56 +114.502565 38.053042 35 +103.854609 30.705189 59 +120.545547 27.515926 35 +113.194111 27.805359 94 +113.14775 23.183208 49 +121.524628 31.223678 1 +121.479138 28.752966 88 +116.410701 39.768945 48 +120.783742 30.748185 17 +108.945531 34.211416 45 +110.655635 26.745005 43 +115.8792 28.658064 14 +120.2004 36.017958 5 +118.122054 24.434422 31 +129.318902 47.486015 8 +116.58004 35.059465 64 +107.610927 37.602414 38 +115.444421 28.173071 33 +107.733797 33.2567 11 +118.205857 33.770041 48 +111.558791 36.091971 76 +118.842827 32.055374 18 +106.484461 28.018217 18 +109.090912 21.454102 72 +113.37344 23.139523 26 +113.014756 28.190169 94 +121.296827 28.666194 90 +103.858229 30.216357 99 +106.531577 29.548296 47 +103.88419 30.535045 51 +119.939092 31.653983 87 +103.600119 29.755751 14 +105.4613 28.888016 74 +106.95608 27.726239 36 +114.490151 38.016514 52 +119.571739 30.597322 64 +119.066352 36.726108 63 +110.301451 25.28171 77 +120.396375 36.185228 95 +120.756667 27.968642 11 +117.650021 39.025688 36 +110.0089 40.357459 100 +110.312796 20.008669 89 +118.232051 39.625161 59 +123.426467 41.841899 89 +113.759631 23.102273 55 +116.349311 39.721074 77 +120.383969 36.311579 56 +103.776501 29.60599 100 +114.262295 33.335506 83 +110.400013 34.018685 6 +113.839759 22.736044 46 +104.103664 30.663324 92 +121.695037 39.091729 12 +113.239979 33.957255 33 +98.400628 36.967443 91 +112.095223 31.526194 3 +120.136998 29.424487 24 +117.790462 28.223227 94 +121.531869 38.883555 99 +116.993135 35.428412 97 +105.819832 25.84264 76 +111.097906 35.464367 98 +113.043061 36.545926 85 +113.260712 30.637864 23 +115.478332 25.619351 77 +120.376639 31.562323 60 +123.397631 41.791584 34 +117.79101 34.421452 41 +111.302774 30.692543 20 +104.04098 30.685564 59 +116.972465 35.600247 3 +107.869414 31.090047 95 +117.117074 36.189132 31 +106.626339 26.627589 5 +108.349595 28.287039 12 +123.400614 41.813417 70 +103.810241 30.875209 8 +112.147801 32.025156 28 +131.589836 46.729328 21 +113.27248 23.125997 12 +120.293896 30.909305 4 +114.375239 22.75395 23 +113.111845 41.037154 92 +116.83966 30.749744 20 +111.50607 27.840126 73 +81.277721 43.932733 53 +130.374986 46.820998 85 +109.563574 24.005736 36 +110.419551 21.202871 66 +118.961296 42.275432 91 +113.973993 22.538139 32 +120.725253 36.991372 78 +104.818778 34.684798 41 +118.540206 36.519472 38 +113.400371 22.356678 20 +108.156261 28.245409 41 +112.36193 28.563687 68 +117.588047 34.583152 96 +131.215863 45.085972 30 +130.713674 47.587207 47 +116.413971 40.072726 45 +113.763529 34.391922 2 +113.741188 34.37106 5 +113.177627 23.444215 34 +122.282762 29.950633 63 +116.43977 23.866461 50 +111.854477 33.04647 74 +113.094894 34.361078 25 +110.513289 24.128716 62 +87.595306 43.890357 23 +119.380813 25.905414 18 +104.539818 30.269295 100 +126.414608 47.265041 99 +117.027127 32.643767 46 +114.58414 38.016052 22 +121.626496 39.214665 59 +114.088653 23.083092 66 +102.716725 24.981362 100 +117.832117 24.444102 92 +114.054697 22.659391 14 +116.688268 23.335222 62 +121.604784 38.974229 90 +110.76565 31.356509 9 +112.208113 27.46103 80 +114.100466 22.84239 82 +111.502252 30.296529 97 +110.019949 27.607477 93 +118.832335 35.936373 38 +119.183815 26.07666 56 +103.960618 30.762507 32 +118.815249 35.214194 25 +114.380962 30.619227 79 +114.684724 23.11419 33 +106.416621 29.811931 77 +115.052211 40.613806 48 +120.156338 29.619053 5 +107.413533 40.763426 84 +116.51583 40.125543 25 +108.909131 34.219341 45 +119.386706 29.541863 91 +114.187754 22.58363 15 +119.053111 33.548826 38 +98.291492 39.772883 38 +121.732164 29.945626 15 +120.60073 31.935538 49 +114.51719 38.048205 31 +118.304428 34.018438 30 +116.968665 36.654867 37 +103.523915 30.592527 50 +116.640407 23.489928 67 +117.61134 38.518714 23 +114.898439 33.447225 77 +109.48252 28.586161 23 +121.300735 31.258049 48 +114.918014 32.58126 34 +117.936545 33.907219 39 +106.093994 28.557389 58 +121.471512 31.211772 4 +107.400697 40.736871 54 +121.520829 31.238144 87 +109.040203 21.937848 71 +120.178248 30.264967 51 +109.615639 23.111946 42 +109.640244 18.265028 88 +128.882307 47.7249 32 +117.294777 40.868893 61 +121.262359 38.812483 3 +114.395442 22.789123 20 +121.498461 31.192877 49 +113.851985 23.113035 96 +114.178933 22.581118 83 +120.017577 36.288033 16 +123.406228 41.892663 96 +103.852803 30.377468 29 +119.654114 27.092087 26 +110.538837 24.923392 25 +117.39651 36.103942 30 +121.124631 31.164592 62 +116.762864 25.665555 82 +113.323566 23.125208 34 +118.533747 25.086314 31 +107.521438 26.290037 68 +120.583914 31.306841 78 +127.50004 45.757734 58 +125.692901 42.540602 80 +104.169599 35.942035 38 +108.879038 18.500466 34 +122.76473 40.861009 50 +110.014173 19.739533 11 +121.578994 29.885248 48 +117.210426 39.200184 24 +112.647061 26.898018 97 +112.936944 27.887263 80 +113.144175 27.832635 79 +108.340818 26.858866 21 +113.43271 23.202607 67 +86.003751 41.769839 19 +120.845357 31.756804 89 +121.61887 29.809941 36 +118.332347 35.073904 60 +106.857401 23.462963 23 +116.523294 39.889041 8 +116.994177 36.576705 55 +109.403505 25.214118 73 +120.818767 27.926177 3 +115.030131 35.226977 86 +116.819915 32.788889 36 +114.525292 37.983821 12 +108.94448 34.13893 100 +112.001898 31.785768 33 +116.204683 39.05636 13 +115.479284 38.500848 38 +116.939569 32.615944 88 +114.112593 22.557315 64 +121.545819 29.88769 66 +115.502846 33.869107 41 +117.158109 31.800285 83 +106.064979 33.800668 18 +114.752941 25.876478 57 +120.153679 30.273326 45 +118.393468 25.042463 34 +104.027667 30.665072 51 +118.233848 33.452633 72 +118.870037 34.116652 84 +120.344965 31.872904 26 +114.576181 35.499475 86 +110.135776 31.545261 9 +113.802156 35.198717 51 +116.838213 36.553682 69 +113.331462 35.264414 8 +100.109555 26.002962 99 +114.549268 30.965803 63 +115.798335 32.887267 81 +109.088011 21.470366 23 +117.190268 34.204512 48 +117.242765 39.077348 34 +120.16419 30.27657 49 +120.103895 30.378808 42 +104.121244 30.665173 91 +119.962071 31.652922 44 +115.935075 28.562894 26 +114.044834 22.926727 98 +98.905987 39.422434 30 +116.603792 23.258457 36 +82.321282 43.486412 79 +106.694619 26.335871 60 +120.645574 31.312764 64 +119.46396 31.648373 42 +111.847722 38.924977 73 +118.71622 32.026243 87 +105.193901 34.188694 41 +118.693663 36.774038 9 +121.388544 28.442293 90 +118.206432 39.602823 32 +123.488234 41.878774 14 +114.333854 22.778652 68 +114.469723 38.084859 22 +115.701273 24.130794 91 +114.221809 30.477887 5 +111.257742 37.91321 9 +112.875914 34.156258 80 +108.774718 36.829975 68 +106.628504 29.56029 15 +121.432696 31.144806 74 +121.804495 39.034433 67 +78.55484 39.788423 41 +121.494068 28.548704 62 +115.960695 32.895491 41 +103.699633 36.30465 91 +118.361165 29.800438 84 +114.574861 30.675307 38 +109.223089 27.740355 69 +114.102595 22.794729 50 +118.184755 24.509187 65 +103.959773 30.47998 51 +113.135623 27.907911 69 +115.484233 38.869026 83 +114.66197 37.899843 64 +108.959311 34.262069 83 +108.96046 34.270146 14 +87.594417 43.819696 10 +103.402653 30.158979 65 +117.331114 36.693958 93 +107.338938 30.877937 69 +120.222005 32.041471 79 +117.168817 34.274479 87 +109.379125 24.264871 84 +120.994484 40.727652 96 +114.032473 22.62325 94 +112.463493 22.498727 78 +120.133477 30.288943 89 +106.245754 29.561013 78 +117.412015 39.555899 84 +102.767542 24.99691 56 +116.419477 40.072008 42 +121.623649 29.864273 2 +110.377663 21.272686 10 +126.780973 45.190118 25 +119.784754 33.007263 93 +121.30281 30.21514 7 +116.025786 28.687767 16 +112.100595 34.144615 9 +113.226855 23.131988 31 +104.092049 30.699569 62 +104.208595 29.774798 19 +119.606333 29.060111 33 +116.666026 26.259512 70 +76.131356 38.982769 90 +113.652813 34.734547 1 +120.617951 30.664481 57 +122.146516 40.180421 1 +114.932863 27.799791 57 +114.897936 25.807996 21 +119.303864 26.084675 2 +120.508744 30.087476 21 +113.454863 30.37577 4 +100.592206 25.830519 98 +117.330611 31.929577 30 +118.797391 32.050538 7 +115.108284 30.214196 33 +113.685988 35.110971 38 +121.244645 30.198567 33 +115.322062 35.233242 1 +103.574158 35.491416 68 +118.922471 33.313364 32 +103.838772 30.692349 99 +104.104841 30.627276 84 +108.966165 34.231512 60 +112.991525 23.106495 83 +106.985024 26.448616 39 +109.53145 18.301802 47 +115.521935 38.60602 16 +104.167956 30.696836 95 +114.497166 36.587558 58 +125.298446 43.925923 74 +120.272876 31.914545 92 +113.309077 40.084236 45 +120.707251 27.922179 68 +106.520133 29.593884 24 +112.989738 28.158454 61 +120.964283 31.386115 57 +119.632626 39.988675 49 +117.144697 34.218782 4 +117.543428 36.725573 79 +121.610911 38.91212 2 +114.778228 25.657357 14 +116.260998 37.324294 34 +118.857937 31.946438 27 +113.256023 23.164702 1 +118.530127 34.150373 96 +106.707537 26.578811 94 +117.182812 31.741229 89 +118.814396 32.109203 31 +121.809625 39.069771 57 +113.262922 23.176214 17 +120.233117 33.307284 96 +106.580535 29.565309 35 +121.51198 31.154232 54 +126.694305 45.706839 37 +117.210094 34.295917 2 +107.342576 34.345983 48 +116.703602 39.518609 5 +121.390961 31.251327 29 +114.326381 30.632589 34 +119.549084 35.402783 73 +114.080496 38.211767 10 +121.438193 30.995672 89 +121.498793 31.292585 62 +119.153255 36.730078 8 +112.571325 37.825674 86 +109.539858 23.439416 56 +115.725123 39.147307 54 +107.465402 26.896085 92 +111.798037 22.169931 61 +114.431725 34.824975 69 +112.625017 22.35865 1 +119.01682 25.448725 18 +112.044137 21.888574 92 +120.96732 30.901939 79 +116.8386 36.553696 77 +118.386138 35.904974 60 +120.133737 30.198488 60 +120.910628 32.364133 42 +113.458465 23.194037 19 +100.144822 24.442754 28 +119.176566 29.029481 1 +121.10141 30.878262 87 +117.733842 39.016613 13 +123.420601 41.790771 100 +121.53698 31.050641 98 +118.239301 39.700772 68 +109.468991 36.625416 73 +122.252049 40.668305 19 +107.046656 35.634283 2 +105.258804 30.58491 91 +107.206555 22.838818 31 +120.171367 30.267127 78 +123.360711 42.748317 30 +116.378982 39.965032 38 +108.646359 24.500433 65 +124.8616 46.663996 95 +123.520277 41.602829 20 +108.972731 34.320354 51 +113.217315 34.335528 2 +121.490565 31.268228 71 +107.305701 34.345662 76 +130.971344 45.298068 16 +109.987924 22.280907 14 +113.770797 34.193397 40 +118.70668 43.535796 61 +120.973563 31.376311 9 +121.375366 31.083367 48 +120.084645 29.313935 48 +120.180584 30.310061 39 +120.136764 30.287906 5 +113.788799 22.743201 4 +113.275327 23.131398 9 +107.175743 32.060974 56 +121.327046 31.122157 39 +118.475339 24.717555 50 +107.046432 27.838761 76 +108.360419 22.829808 56 +118.639963 32.094055 69 +109.215974 23.719988 81 +111.350779 24.632118 75 +120.77652 27.95016 74 +105.719123 33.73995 9 +108.443998 34.488969 3 +112.903896 28.303506 23 +114.801422 27.19001 17 +114.346817 36.110838 96 +113.549023 22.366621 69 +120.393284 30.32748 25 +119.951336 30.074233 42 +109.010011 35.653577 8 +106.405266 30.420493 80 +116.508949 39.809322 4 +107.443375 28.217761 28 +106.518084 29.505516 73 +120.612651 28.029314 45 +119.467042 32.713795 34 +116.927837 34.741466 45 +113.383771 31.73038 39 +105.723964 28.581919 19 +102.590944 26.636841 28 +103.362822 24.714199 19 +120.165169 30.267361 12 +116.36398 40.049381 95 +121.526829 38.938737 88 +120.455753 43.350823 58 +113.368931 22.355541 47 +114.277459 30.62235 27 +116.188757 36.148938 88 +121.948503 29.209567 49 +101.360913 23.208063 42 +113.684945 34.846907 52 +114.662149 37.884508 90 +118.679776 37.42233 84 +104.149055 29.998773 19 +120.883651 27.975134 80 +114.307471 30.606919 41 +121.524934 31.234207 71 +106.142745 26.422258 81 +120.553542 31.444367 10 +111.10212 35.189949 71 +121.421683 37.544461 5 +116.306956 30.463935 33 +103.69524 30.919065 47 +111.537753 36.072019 81 +84.860181 45.608276 20 +109.448186 18.296035 90 +121.560588 31.011419 52 +79.938383 37.108676 20 +110.312545 25.323629 26 +117.632432 24.527877 28 +110.853451 32.611907 12 +122.152472 37.416412 13 +118.128773 37.077933 72 +111.640285 40.066376 22 +113.542986 22.102288 60 +123.203148 41.792754 86 +114.412043 30.508726 29 +116.227698 39.909273 59 +114.190799 36.691426 87 +103.343149 30.314823 5 +100.590238 25.826779 45 +120.177511 30.246296 46 +112.503997 23.082435 38 +113.768048 23.003693 27 +102.075595 25.146848 99 +112.024374 33.031875 29 +106.545088 29.588977 9 +111.676541 40.82219 27 +118.781859 32.047952 60 +120.143511 32.522873 18 +125.300817 43.853438 78 +113.575972 26.953259 22 +113.417547 23.059934 11 +113.135892 27.830663 58 +115.56641 34.860274 7 +114.247527 22.567444 61 +91.046991 29.641374 93 +120.297363 27.757995 29 +103.893514 36.063705 92 +108.792585 30.40904 75 +116.138954 23.306392 47 +113.22663 23.415956 20 +114.415888 23.07724 80 +104.08638 30.6608 45 +118.636046 32.062328 44 +110.15288 35.228768 97 +115.037623 30.159409 69 +120.141364 29.692465 77 +113.773213 23.044862 32 +99.181219 25.0772 13 +109.854607 40.585841 53 +120.441479 36.164616 66 +114.46569 34.485777 53 +117.219697 39.149594 57 +113.354728 23.023518 64 +116.406093 37.638242 50 +87.564216 43.926605 89 +115.324021 35.013817 63 +109.473555 26.825632 50 +110.548485 40.563613 46 +119.011134 33.581533 59 +120.669468 31.288697 71 +119.659674 29.097131 15 +113.772629 23.007203 19 +112.561453 28.265733 6 +113.931881 22.956813 11 +118.264067 35.120633 63 +121.019772 31.257293 22 +118.143505 24.537723 88 +118.043263 37.36595 89 +115.341466 26.336535 5 +121.868248 29.895166 84 +119.944545 32.134662 62 +106.776105 31.86704 78 +119.515945 32.212185 51 +121.418179 31.237681 93 +104.037827 30.689717 39 +108.932811 34.205102 15 +117.85311 39.351914 73 +117.126965 34.26732 5 +117.15863 35.116404 93 +113.673501 34.747435 98 +126.719969 45.687834 58 +117.035823 30.100857 50 +117.852643 31.583697 99 +120.286961 31.796748 75 +116.530229 32.340433 59 +121.652933 31.076841 40 +120.975458 28.034798 30 +87.367549 43.882996 46 +118.143182 36.190675 30 +115.080598 30.200416 8 +116.662253 40.135356 59 +114.285184 30.572334 35 +120.621688 27.776414 4 +119.589858 34.212177 96 +121.633207 31.266337 9 +113.767706 34.783138 22 +113.655427 34.732151 77 +121.442568 31.184884 30 +114.503185 38.049789 98 +112.667174 32.835331 74 +118.956373 40.412628 88 +117.853397 36.812259 41 +118.848468 31.918629 11 +113.44278 36.808127 85 +110.398782 27.721146 57 +110.112358 34.798946 70 +115.664002 34.990148 43 +109.088128 34.218461 61 +120.811086 32.02635 90 +109.318983 32.572034 1 +120.728505 30.731439 75 +110.472569 19.261343 12 +112.16336 23.03461 18 +107.451711 28.796823 25 +104.530898 32.414091 29 +113.190132 40.043899 3 +121.570092 38.975694 30 +113.489753 22.953577 8 +100.559408 25.481763 69 +108.830862 27.179839 61 +120.685342 31.456658 31 +120.803406 32.682811 6 +114.507317 36.582914 85 +113.019741 28.103639 7 +120.16136 30.284772 10 +120.79895 30.786747 45 +116.441414 39.965543 40 +108.981274 34.262934 86 +118.745118 36.887452 64 +113.017001 28.203604 60 +120.553758 30.033775 65 +114.050008 22.712501 8 +86.068016 44.303705 76 +113.965621 22.803416 54 +113.4646 29.479973 5 +113.918685 22.584556 85 +126.40956 44.064045 6 +112.900105 29.818418 60 +121.209907 28.878567 8 +117.273119 30.417231 89 +116.438432 39.887678 19 +119.136842 25.447453 75 +116.577534 39.800515 65 +118.931211 27.988141 69 +122.445877 37.158341 60 +105.170932 31.63736 51 +111.580252 38.710235 34 +120.197678 30.308845 8 +117.281312 34.260413 47 +108.977914 34.267581 70 +113.312355 34.822234 78 +109.415479 24.310316 57 +121.579811 29.886587 61 +118.71675 39.753346 45 +120.598547 30.292865 57 +116.278551 24.372821 37 +114.427251 37.066488 45 +116.367672 23.570176 66 +116.496705 33.368762 16 +126.461078 43.976298 16 +112.044828 37.439782 92 +111.248022 23.427363 63 +114.151813 30.495292 82 +114.05467 22.551432 76 +125.606026 46.016797 28 +114.315951 30.611332 46 +114.472355 37.243066 32 +114.094941 22.546167 72 +118.799116 32.056146 4 +119.139205 36.603842 53 +112.518424 37.860254 18 +116.324877 27.944751 41 +114.5799 38.185756 10 +108.542856 23.642191 27 +108.01794 35.090254 66 +108.983888 24.757109 89 +120.551925 31.439407 24 +106.631082 26.466971 91 +114.045849 33.576698 90 +129.133842 47.641269 90 +120.28008 31.897524 28 +100.221466 25.419978 4 +104.024559 30.657352 84 +113.052601 23.067914 25 +121.072942 40.842667 93 +113.338244 23.029314 88 +113.331938 33.751492 37 +121.491319 31.18907 6 +113.672711 34.75849 98 +114.309196 30.609856 93 +113.863969 22.995468 65 +123.258053 41.737852 26 +129.404915 44.581266 94 +113.227097 23.124094 80 +114.391831 23.101525 14 +113.870616 22.933991 33 +112.376303 32.533208 14 +103.766476 25.508082 67 +101.80419 36.634742 33 +117.294517 39.078363 41 +103.826582 36.063041 82 +113.215311 23.651277 33 +122.381998 41.186397 62 +104.058443 30.637716 14 +109.971836 38.617566 46 +119.95457 32.457432 9 +110.334625 34.645035 1 +121.468574 30.940787 64 +120.697037 28.067626 31 +118.616795 35.014016 42 +118.814944 32.091149 74 +100.927705 28.744123 39 +129.806278 43.024408 65 +114.045633 32.982227 41 +113.234167 23.093514 7 +106.077394 30.874256 9 +117.823978 28.408986 79 +117.375418 31.917181 35 +115.710005 24.131775 45 +120.41196 31.766982 94 +113.153957 27.848527 86 +121.478527 30.851456 92 +114.021136 24.94387 13 +114.06094 22.539766 9 +118.112235 24.472275 57 +113.758741 23.062378 7 +103.819961 30.658952 5 +116.308078 40.056484 43 +112.441978 39.326669 58 +108.739711 34.119163 73 +114.36225 33.297161 23 +117.197113 39.123911 55 +113.358735 23.305147 4 +120.071763 29.320871 21 +110.077863 23.37404 97 +120.567502 27.687492 4 +105.324093 35.863413 59 +104.258954 23.362313 81 +116.953727 31.462072 6 +104.047376 30.634159 72 +120.645484 31.49069 66 +116.740909 23.406081 58 +107.975684 21.55054 64 +117.413758 30.618815 100 +97.015476 33.001752 91 +113.177214 23.468366 90 +119.949773 35.904448 94 +116.430284 39.991522 33 +116.806467 39.958962 61 +114.162161 33.467888 89 +113.245207 22.717093 81 +126.70132 45.776149 76 +118.053091 28.353601 67 +114.857198 22.786424 3 +113.506398 24.713263 41 +118.836144 32.083815 8 +113.719117 28.644054 31 +118.174102 39.807881 77 +114.368996 30.598122 55 +117.67582 29.375494 84 +103.693794 30.638563 57 +119.42236 32.398689 16 +108.93617 34.35321 30 +121.479641 31.243455 73 +111.846195 31.797078 39 +120.30207 30.432685 28 +114.436127 30.591291 80 +113.636464 23.136773 34 +117.191239 39.234663 27 +114.482147 36.606746 29 +115.111688 35.818354 48 +123.382782 41.821091 48 +114.488974 22.552951 65 +120.624814 31.308561 69 +112.562468 37.428757 68 +115.31378 38.809278 76 +118.640592 24.753606 38 +114.499215 37.075536 69 +121.04417 28.21562 82 +126.325128 44.259401 31 +112.500467 34.688798 69 +115.221991 40.385417 63 +114.031673 22.533583 29 +115.08747 25.541241 38 +121.566696 29.855362 8 +120.265105 30.298883 24 +105.938462 29.380317 91 +119.292465 42.052186 45 +120.477276 37.597439 99 +113.557647 26.797081 56 +112.567085 37.908641 76 +111.359026 23.227235 62 +114.362591 36.091373 4 +118.003064 32.782423 78 +114.024936 32.981296 5 +114.259187 22.697631 73 +120.037807 32.455916 29 +114.057697 22.546459 80 +121.213087 31.536105 11 +118.423804 39.734011 90 +119.322432 26.07335 47 +114.766407 32.356913 91 +104.018585 30.780775 95 +118.75244 32.036428 18 +121.53875 29.917316 14 +121.370416 31.153576 41 +113.978107 22.543689 8 +116.286699 23.303222 11 +117.261953 39.174778 53 +112.567588 37.807907 32 +98.524791 25.037422 18 +125.298859 43.87193 76 +121.335876 30.185955 56 +123.000005 41.119447 63 +110.834631 27.105948 87 +116.584388 39.587262 25 +112.947095 22.793588 97 +125.089347 45.533364 98 +120.357613 31.861174 57 +123.407755 41.864775 29 +114.268269 33.269069 86 +101.716642 36.647129 31 +113.684451 34.770515 53 +115.598166 36.741517 58 +105.533694 30.567592 14 +106.243365 29.274246 92 +106.524804 29.51904 10 +112.588779 23.040355 89 +118.25503 37.065617 63 +83.619567 45.94191 64 +114.517738 38.078717 88 +103.163255 23.387574 19 +113.832025 22.76983 89 +121.561746 29.843475 6 +124.351766 42.563576 11 +115.905386 34.948943 39 +116.465318 39.961955 55 +119.424956 32.4057 14 +117.550543 33.279227 28 +118.799681 32.093428 13 +110.968272 26.562348 50 +118.359521 34.360668 37 +117.092802 36.661323 45 +106.912971 28.849228 23 +105.169638 31.638566 93 +109.295124 29.550456 34 +111.670109 29.048539 90 +109.906502 40.652611 5 +118.122422 24.530441 11 +117.662624 39.036815 68 +117.202764 37.717611 88 +114.010941 22.965033 32 +113.169615 27.865358 38 +111.192103 34.783576 35 +118.76198 37.147131 14 +117.302036 31.866311 43 +102.783146 24.936433 10 +112.837304 23.09732 50 +113.029946 22.915576 55 +113.698178 34.756748 10 +113.805067 23.09752 76 +117.107418 31.497118 58 +116.326027 37.487738 46 +115.95446 28.663167 15 +113.817347 22.70935 54 +120.352286 36.060123 83 +128.926756 44.481651 54 +113.306373 40.11815 87 +115.659744 39.034776 25 +109.026944 34.199459 94 +109.808236 40.652714 96 +118.353799 31.012665 82 +116.342358 40.042939 72 +116.095324 24.307369 87 +116.474373 39.998625 36 +120.383682 36.2523 35 +102.904417 37.474529 36 +113.266964 22.657056 98 +114.046891 22.5458 46 +112.705721 34.175741 84 +123.380016 41.774519 28 +112.38746 31.81816 82 +105.118399 25.63511 57 +102.456836 22.928167 69 +101.769147 36.673076 41 +113.111952 28.242489 95 +112.541241 28.269225 17 +126.598348 45.706342 4 +117.009727 36.672143 65 +121.701559 31.279586 3 +120.494443 36.177639 11 +116.823499 34.629465 43 +115.406898 27.762086 90 +115.998433 29.711531 26 +121.622777 39.012892 8 +85.955296 44.255372 71 +126.578082 45.725938 85 +116.022058 26.466761 72 +119.84583 32.932135 89 +119.070116 29.618017 63 +109.003543 34.275426 52 +113.561752 22.231569 32 +108.87867 26.946609 61 +117.819998 30.933516 37 +113.726986 22.793238 23 +103.871057 24.887308 49 +102.840332 23.635032 45 +116.833201 35.603981 48 +117.963566 33.904927 17 +103.843568 30.702705 23 +113.274249 23.131373 30 +119.902423 29.305534 93 +120.263812 32.033107 41 +113.924173 22.926136 59 +120.729197 49.290056 3 +116.370062 39.964347 98 +107.968066 22.700282 10 +120.493895 30.755462 67 +113.066651 25.999155 35 +106.571839 29.567453 70 +113.537417 22.354371 28 +113.178463 23.206568 76 +115.441079 30.236617 46 +108.050764 24.699254 32 +110.245379 25.216619 23 +120.090582 31.703303 5 +110.386062 21.260501 70 +119.947464 30.038246 23 +126.646623 45.76941 75 +123.452042 41.776698 24 +113.283547 23.145804 54 +120.409687 31.885844 46 +109.958352 21.331213 35 +118.180506 39.759829 58 +121.726028 29.946213 11 +113.894421 34.751202 34 +115.15434 38.701401 14 +105.867307 35.349572 55 +118.127605 24.71529 38 +121.655979 31.121902 37 +116.340687 39.976429 89 +116.952864 36.662177 32 +111.52285 36.109169 60 +117.169715 39.098995 4 +112.172999 32.154137 14 +113.520816 23.141883 8 +113.27407 23.665982 2 +106.302204 38.467922 1 +100.903253 22.112794 26 +113.246689 23.081288 11 +117.032724 32.652994 5 +113.217692 23.040422 68 +113.537174 34.713177 30 +100.348828 24.644451 20 +117.932637 27.642908 28 +118.797112 31.991299 80 +121.451776 31.229221 49 +118.778095 32.073573 80 +102.838966 37.251052 33 +117.845061 31.61546 34 +114.823287 39.08568 42 +120.325588 32.867907 83 +113.208583 23.396455 21 +108.32155 22.803599 44 +120.71716 31.382138 67 +120.455726 36.169577 90 +121.58512 38.938547 100 +121.721339 44.899903 30 +114.940615 25.839193 37 +120.139226 29.356442 23 +121.777501 31.055281 79 +118.510463 33.904807 90 +120.639726 27.901542 48 +114.056449 22.644424 15 +110.031375 18.515379 61 +120.976204 28.116813 91 +119.406604 32.373366 3 +116.71378 34.226356 28 +108.488419 22.919446 28 +103.276872 26.211201 54 +120.954034 31.428284 21 +99.326969 22.310476 29 +107.35615 30.337486 92 +100.214288 25.619726 9 +104.00768 30.712587 14 +114.533027 36.601445 83 +111.132231 38.468954 13 +116.636858 40.333079 34 +120.043664 29.283626 78 +118.609852 24.723717 88 +113.280465 23.175766 30 +116.877146 39.626043 48 +117.57035 26.199045 62 +121.548631 31.272394 53 +114.442442 39.807874 97 +116.520627 39.872362 23 +116.49065 31.751608 7 +121.48045 31.238244 45 +100.822657 38.450638 78 +122.023574 39.620319 73 +108.718556 34.304625 6 +112.083869 32.693028 28 +102.681511 25.250178 90 +116.404637 39.868354 33 +113.38439 31.741298 67 +114.4694 22.861731 16 +93.514968 42.854325 68 +113.198783 41.450517 63 +87.623064 43.799229 52 +106.04395 28.140801 78 +82.996467 41.712972 33 +103.841431 36.074645 94 +113.932087 22.927201 100 +113.53712 22.19217 86 +117.859757 25.698003 61 +106.51176 29.617883 83 +113.462929 23.105365 72 +116.63569 35.015849 82 +114.355845 35.945169 93 +117.231114 29.605825 77 +121.438993 31.198978 98 +113.936372 32.994992 88 +114.133802 23.977855 100 +120.522057 36.429252 33 +121.261443 31.023133 26 +116.233214 36.087443 15 +120.900288 30.974937 37 +118.791157 31.942991 63 +106.066003 31.368534 44 +120.948725 32.039719 33 +110.813476 32.596615 46 +102.077688 25.145515 12 +121.57408 30.924378 99 +104.562051 27.328869 83 +114.053053 22.55492 27 +110.836383 35.28183 11 +114.55234 38.055536 2 +105.992719 34.561298 57 +108.206306 24.713181 36 +121.492631 31.405341 63 +104.552161 31.319328 5 +123.406794 41.772737 93 +120.744791 27.990901 58 +120.135183 30.266254 55 +103.578865 35.294374 42 +120.390446 30.307037 19 +121.426174 31.276661 90 +119.750017 41.134711 2 +113.531766 22.252519 29 +116.543066 35.38031 24 +108.272825 33.032593 64 +122.630101 42.330275 26 +113.264233 23.138551 76 +79.253901 39.952104 23 +113.687039 22.917906 14 +113.288155 23.586795 54 +75.821665 39.396328 12 +112.559063 37.830483 18 +116.384776 35.320031 22 +120.251056 30.054682 58 +114.386504 27.792354 12 +121.629712 29.882312 51 +117.262223 34.66522 62 +103.716674 27.341626 1 +123.425021 41.919419 81 +115.735382 28.730433 85 +118.906733 29.015213 47 +102.571343 25.070597 37 +125.281567 45.714561 45 +116.022956 28.682903 94 +121.419194 29.659854 92 +118.602144 31.153668 28 +109.701607 37.15182 29 +118.184836 39.613607 61 +121.508558 31.24648 36 +119.356909 25.722329 100 +104.698055 31.582267 60 +108.793753 29.541737 88 +112.925168 32.779456 58 +114.096531 22.55895 21 +109.37713 35.977976 76 +110.774705 32.653716 52 +117.198533 31.551461 70 +115.73275 34.141104 66 +121.169214 36.78357 9 +113.426674 22.682235 43 +113.178607 23.457924 72 +123.333923 41.811851 40 +111.65853 29.445743 82 +114.889429 35.411425 67 +112.606081 37.78486 44 +115.029547 37.242305 1 +114.054949 22.560102 49 +102.719914 24.127092 93 +116.612397 35.429125 20 +117.313408 39.094151 65 +107.983697 28.152673 88 +122.05762 37.203691 76 +121.110977 30.612203 10 +111.76409 34.775089 33 +126.639068 45.611781 64 +110.429953 20.021737 21 +120.70876 30.519919 22 +123.444918 41.853096 25 +118.30043 35.104179 61 +118.998315 30.032336 15 +112.459908 32.96494 89 +115.862465 39.345477 27 +115.082403 38.5145 84 +120.152233 32.511509 96 +118.739863 25.07477 25 +117.968255 41.153942 58 +120.109627 30.330332 84 +115.972247 39.499924 62 +105.052517 30.348691 37 +119.957669 31.721588 24 +113.356633 22.051639 97 +117.137843 39.148657 71 +86.132164 41.766442 25 +121.43593 29.341598 6 +115.716104 39.398573 63 +122.36299 39.414072 61 +103.427994 24.413003 25 +107.725551 31.366861 85 +117.000537 36.670616 47 +104.097501 30.653904 62 +118.839647 32.035258 85 +118.851828 31.951142 37 +121.617082 39.028085 14 +114.902078 30.456915 14 +113.302923 40.051604 1 +113.015277 28.340193 55 +115.143237 36.099247 5 +104.093738 30.659814 37 +120.258673 31.757602 98 +118.11016 24.594117 47 +105.684232 37.496542 2 +100.78615 21.965781 13 +112.173439 29.420744 69 +120.530456 30.652265 30 +125.979649 47.410995 27 +112.003443 27.751745 76 +120.684335 27.830104 12 +113.215482 23.381968 82 +112.656745 26.878653 21 +113.762847 23.019568 65 +113.354486 23.182186 57 +116.70936 38.688193 8 +116.124725 38.102445 5 +115.269287 33.057213 48 +113.495205 31.247576 38 +121.084288 31.45424 20 +106.498196 29.529262 43 +117.751413 34.572594 41 +126.709046 45.789945 45 +110.32487 20.031297 53 +116.441486 39.975469 14 +113.25949 23.103088 80 +104.345416 30.672744 83 +110.33273 30.621301 54 +112.42509 34.694044 41 +113.823554 34.81095 41 +122.598059 41.867998 9 +119.444476 35.934941 68 +112.224696 32.763275 81 +113.637766 34.802977 17 +111.292614 30.702395 60 +120.486807 30.076483 96 +103.947808 30.984125 8 +120.103024 30.274223 27 +114.325554 30.518799 57 +121.597391 31.101311 17 +108.405954 22.830724 93 +111.766955 40.872685 50 +115.169889 28.258471 80 +105.710472 38.844358 7 +84.714108 44.43319 94 +109.021123 34.299466 77 +117.776179 24.46684 66 +113.304504 33.737826 27 +106.428335 29.571843 56 +106.851365 29.053512 16 +110.011972 27.116672 22 +120.852022 29.978699 37 +104.98845 26.487773 43 +121.406061 44.673459 97 +110.345989 20.05349 83 +104.250276 35.651245 23 +114.899508 25.806963 35 +112.271929 31.469071 21 +116.203498 34.982991 25 +116.156669 23.443568 100 +119.446291 30.897562 82 +118.108938 24.478129 2 +106.146159 38.543059 100 +104.615725 36.800195 18 +116.404709 39.903434 89 +123.56724 40.240396 4 +108.224371 22.588226 53 +113.022266 28.288478 100 +120.668085 31.482984 17 +117.664735 24.339942 100 +103.946972 22.531454 23 +109.161339 33.428855 96 +119.115705 35.20699 17 +103.643642 30.996616 29 +120.029758 30.28839 34 +116.497845 39.899649 44 +104.409007 30.759954 45 +124.977643 44.229818 40 +102.731466 25.079884 85 +119.925465 29.182522 73 +132.036644 47.254314 92 +117.646078 35.953328 7 +114.971049 36.780448 71 +103.624831 36.128302 80 +119.024491 33.630334 14 +108.5006 31.385167 74 +121.374593 31.182458 47 +110.35013 19.995124 53 +120.967993 31.424386 71 +116.48173 23.24945 54 +103.827722 25.61018 31 +120.618418 31.312178 51 +121.681958 30.868762 88 +109.693352 26.577931 42 +121.058875 31.092637 71 +111.576048 21.791122 62 +107.061092 33.075556 90 +103.060408 30.024957 13 +106.704537 26.57646 12 +125.695982 42.541758 60 +115.798335 32.887267 12 +105.070681 24.058171 26 +114.333235 36.383874 83 +117.216688 36.857124 75 +115.416771 33.161502 85 +114.286101 33.451669 55 +108.30944 22.861023 76 +106.737702 26.566436 62 +118.520605 31.711567 10 +117.984424 28.470581 42 +103.470269 36.170829 20 +114.142219 24.367093 32 +113.260074 23.125648 34 +112.640836 33.260021 10 +109.440668 24.309081 50 +121.577592 38.917117 53 +116.379916 23.084363 22 +117.351757 34.814847 98 +110.09794 23.39648 88 +119.458454 32.219646 91 +125.321595 48.191542 74 +111.749277 27.252091 51 +113.78101 36.007813 69 +103.798869 25.501796 52 +123.662137 47.229843 37 +118.845863 31.919671 100 +118.766363 32.049498 64 +121.203673 31.026824 72 +121.109117 31.453516 43 +117.789869 36.907921 24 +107.110104 24.303351 20 +117.106699 36.656532 41 +120.341407 31.575522 94 +112.729589 23.324388 82 +80.933607 44.317425 12 +106.044058 32.705182 85 +103.947736 30.338865 88 +101.636594 26.603243 92 +104.153259 30.003402 76 +119.665891 31.952995 100 +121.434519 31.356354 91 +118.853849 32.004658 57 +114.453122 39.926055 37 +113.868146 34.567823 19 +112.862825 26.422072 72 +117.712193 35.868093 71 +119.458759 36.080398 99 +103.569298 25.437836 91 +118.481744 36.705004 40 +108.127749 35.867171 47 +116.401547 39.956411 62 +86.352958 42.065809 58 +116.981394 37.712394 59 +113.131697 35.830697 66 +105.610796 25.909379 86 +126.532619 43.830317 20 +112.626257 22.341585 50 +110.640974 26.736544 92 +81.965041 43.563735 55 +119.883667 32.008401 36 +113.277025 23.188315 14 +122.123825 30.025653 31 +121.470119 32.119892 47 +121.4399 31.039657 62 +115.784196 23.940977 54 +113.054775 23.029081 52 +112.188602 30.358796 38 +122.974736 41.102699 84 +101.825498 36.605986 48 +108.072252 22.843472 66 +121.203781 32.300873 62 +113.055045 23.721137 1 +119.491053 36.83147 36 +114.953056 27.078988 75 +116.141191 27.65314 58 +121.410597 28.71541 28 +112.087201 31.95265 65 +113.974344 22.59067 75 +121.486989 29.890485 65 +103.49234 29.607458 98 +103.383043 23.598121 50 +98.801721 24.775106 74 +111.998278 38.449769 21 +115.71932 36.725074 26 +116.783525 36.097249 18 +103.737649 36.112988 41 +118.391177 35.589043 92 +113.438145 34.756192 24 +119.811668 35.934452 12 +108.724476 34.336787 98 +108.257671 27.941416 18 +120.413577 36.174114 76 +112.401312 26.415132 37 +105.775033 26.661115 44 +103.887909 25.309764 6 +106.446229 31.098141 46 +116.768352 35.583832 42 +117.276326 39.135134 25 +113.177816 23.037429 22 +118.719885 32.060798 61 +110.97474 41.365665 70 +114.530368 38.083865 3 +106.706522 26.554931 1 +117.088948 36.696591 22 +113.18891 22.825336 45 +121.551101 29.831899 85 +118.521126 31.719538 6 +89.707851 44.141349 93 +104.753256 31.450567 33 +103.618211 29.810584 4 +118.886593 34.286821 86 +118.01582 24.32357 93 +119.90731 29.463835 7 +114.04628 22.634942 78 +110.40878 21.229406 39 +127.510227 45.767819 64 +108.07898 30.501601 64 +114.480108 22.802217 40 +113.841457 30.925679 97 +118.849897 40.097394 56 +117.231303 39.099611 44 +118.981741 34.31322 27 +120.125212 30.278636 35 +112.490541 34.694021 30 +117.180585 28.987011 62 +117.102154 36.142774 20 +112.414921 23.110384 56 +113.455842 30.375412 39 +117.135984 39.78809 56 +103.46646 30.41899 11 +113.139207 23.150921 40 +121.240503 37.534947 97 +102.806681 24.977399 23 +117.304488 31.263829 63 +116.443309 33.928893 51 +118.681653 40.987575 65 +118.122575 27.330995 34 +114.440438 22.644224 57 +104.021702 30.729662 99 +120.098308 30.336364 14 +109.14305 18.730835 44 +121.480575 31.239418 33 +122.698803 45.513385 18 +120.475632 31.408292 20 +100.655267 23.901527 40 +101.470685 36.52011 7 +113.616917 23.53222 86 +120.459777 32.540224 44 +100.499447 25.338145 96 +116.553469 39.972248 30 +119.462748 32.213559 2 +118.907011 42.278141 8 +119.283185 33.794923 10 +110.850585 21.569617 5 +119.04526 37.129618 75 +114.116914 22.736135 68 +104.154346 30.841566 74 +117.615508 24.559383 25 +113.326315 22.984872 75 +114.495244 38.056807 83 +113.031563 27.965978 1 +102.752657 25.088957 4 +110.516891 22.817933 40 +105.07581 29.580795 56 +111.348192 30.73608 14 +114.174477 22.721402 36 +102.751921 25.059772 61 +115.990231 36.979048 3 +112.310116 30.287127 99 +113.328471 38.01812 25 +126.315381 45.392912 10 +118.101393 24.524343 16 +80.307084 41.179942 11 +113.021969 34.383514 97 +101.661162 36.67414 82 +114.142003 22.820006 40 +113.358034 23.186389 82 +115.928886 28.691284 24 +110.014388 39.8151 77 +112.415793 29.384464 33 +117.227665 34.169962 22 +117.124018 31.812767 52 +111.682721 40.817024 75 +116.588763 35.411432 10 +112.67658 37.751785 61 +120.717707 31.725228 13 +113.313119 33.747598 88 +113.106715 23.657914 31 +110.293124 18.675935 11 +118.701362 33.731649 41 +114.671312 22.777053 86 +113.712092 34.445695 26 +113.350704 30.867057 88 +111.332229 27.731331 65 +120.230592 30.260865 73 +87.557532 43.892358 83 +103.21806 35.606248 20 +118.159019 24.509475 83 +109.009059 34.230676 69 +108.605459 22.412294 48 +121.440861 29.66781 38 +113.437588 24.950021 13 +116.965764 35.559568 30 +121.160895 41.124257 1 +113.884666 23.083482 82 +118.845962 32.109104 74 +120.313587 31.578306 67 +113.783103 22.779318 6 +120.322606 29.298431 80 +121.459384 31.206151 32 +111.296145 30.731299 42 +122.974916 39.712742 88 +113.481003 22.318108 31 +115.892226 28.653468 23 +117.794433 26.403442 18 +109.533112 34.515319 34 +106.57377 29.534942 40 +122.122864 30.027482 63 +124.833402 45.123335 61 +125.299362 43.902986 77 +109.057504 21.788076 24 +114.392208 30.514039 62 +109.195547 25.565111 82 +120.656515 28.007845 54 +120.874821 31.258257 34 +116.392492 39.567025 26 +118.784365 34.119126 39 +113.284885 22.471528 80 +81.553528 43.692717 57 +101.997901 24.078776 3 +120.501324 31.172518 99 +121.523056 31.244635 34 +113.294174 33.719173 52 +116.309857 38.922402 53 +121.615555 31.273768 70 +117.985619 27.6435 54 +110.033756 18.509945 31 +117.015251 39.802927 79 +116.44277 39.427798 99 +106.573088 29.535287 98 +117.35411 32.907071 60 +115.733172 33.635173 99 +107.373694 33.130676 85 +117.674931 39.022584 57 +125.023977 44.012454 23 +123.328147 41.800155 33 +118.890222 32.176503 81 +119.121508 26.664554 75 +125.840609 44.16043 1 +120.524464 27.589669 66 +113.273665 23.144724 55 +114.444714 38.05545 58 +118.827664 25.299597 62 +113.88957 22.570022 32 +120.863745 30.056339 58 +108.89554 34.946576 68 +121.180191 28.097154 100 +121.187099 31.903311 56 +120.758491 31.29203 6 +106.767409 25.430682 22 +117.420055 33.655452 13 +110.790273 32.628671 20 +114.587455 35.370156 52 +116.945085 36.671817 29 +110.181509 20.335268 27 +116.57015 40.068543 28 +109.121293 24.467325 45 +114.404246 30.603072 21 +117.97015 36.644038 94 +113.157523 23.061513 61 +119.298969 29.489146 5 +121.450662 28.667248 3 +108.343944 22.828076 18 +115.912357 28.555874 63 +109.793001 28.672596 77 +111.800256 30.836853 76 +109.837925 29.217693 18 +130.753163 46.773847 8 +111.254831 23.428291 5 +110.121116 32.80662 29 +117.170928 39.107248 8 +116.549498 39.923807 75 +120.152224 30.301939 50 +116.431389 39.924561 93 +121.499161 28.653809 14 +114.110509 32.858414 37 +117.514889 35.961413 53 +118.780592 32.047325 49 +117.959209 33.904343 96 +119.95121 28.475121 78 +102.810769 36.331745 74 +120.903765 30.890504 12 +109.149131 21.42267 34 +106.449086 29.502082 86 +112.755972 37.694771 37 +119.839668 33.993936 54 +120.37734 36.235738 29 +113.595609 24.793731 67 +113.333969 23.102024 98 +112.315748 39.007782 79 +120.681128 27.976873 10 +120.175005 29.339701 11 +115.29735 23.486812 10 +108.963083 34.312751 69 +116.428649 23.24877 12 +114.360768 34.821041 39 +109.115211 21.458012 15 +120.599185 30.039606 68 +109.988328 27.55732 25 +115.410896 35.3561 98 +112.920389 28.22314 28 +121.337727 28.418096 39 +113.631002 34.731246 33 +117.240879 30.727085 6 +114.211999 22.715793 73 +122.996825 41.119142 94 +116.411797 39.955588 20 +115.882569 29.001717 56 +123.972601 47.309301 12 +115.380174 25.955023 77 +106.63481 29.743138 26 +118.770702 32.238072 77 +121.821384 29.921902 71 +109.029639 34.069507 72 +111.626748 22.817191 7 +112.944373 27.849597 45 +115.23799 37.930282 38 +115.517956 33.817511 55 +121.091142 28.182249 13 +118.808036 35.597092 18 +109.773795 21.627016 97 +120.602841 30.009907 16 +112.564264 37.803873 81 +121.477764 31.295309 40 +112.636228 35.093244 85 +125.365801 43.849356 95 +108.547393 32.523032 25 +116.498914 39.873912 100 +102.698238 37.827391 18 +114.576999 38.037413 93 +117.135103 36.164368 76 +119.717561 29.802537 85 +115.553843 28.852384 98 +98.770604 23.698555 71 +121.855366 31.032022 98 +115.035126 30.204817 30 +106.293239 29.199163 67 +105.379662 24.889414 11 +121.62461 38.925545 12 +125.993034 46.075442 73 +123.921388 41.872 95 +103.633428 26.564489 21 +108.759788 32.501902 69 +120.822665 31.371687 70 +116.322496 39.751453 71 +122.260269 43.628065 72 +111.470946 27.328604 40 +114.497571 30.514653 90 +108.129555 36.431749 7 +120.259545 30.300099 49 +114.700462 23.762867 19 +113.346159 23.140545 88 +118.415288 35.037723 36 +120.475003 32.545124 71 +116.288504 39.846088 39 +105.57525 30.52667 70 +116.488153 39.921628 33 +113.343886 23.109187 41 +114.627376 36.837558 96 +118.188915 29.791983 9 +118.608046 24.910636 26 +113.812047 34.806779 30 +123.022499 41.112633 42 +109.492949 22.164777 18 +124.414863 43.140827 91 +118.129123 24.484681 77 +87.602079 43.815357 74 +113.114054 23.007793 53 +120.273702 30.198184 92 +118.207501 39.697712 27 +120.235129 30.864453 4 +114.261891 30.532448 97 +123.481488 41.81054 49 +105.647788 30.668209 28 +117.105064 36.687562 20 +112.532608 37.880663 47 +123.399913 41.947217 78 +118.654524 37.434388 23 +117.233755 34.230535 14 +104.551011 30.391332 44 +113.89991 22.809937 27 +103.974245 30.704693 40 +110.284967 33.708971 84 +121.604569 37.4196 7 +117.287582 39.150293 47 +120.658015 31.212537 65 +119.160001 37.036311 58 +105.614802 27.152358 57 +116.266334 35.212918 27 +120.426989 31.872858 7 +110.270792 39.042231 71 +114.161604 22.62079 46 +123.158925 41.686378 76 +107.745062 27.310061 56 +121.556931 38.894817 91 +112.93548 28.270441 92 +132.711901 45.634178 99 +120.416604 36.064295 42 +106.268571 38.471192 26 +103.435837 30.423132 100 +120.841377 29.621305 41 +104.568465 33.007444 42 +113.665309 27.976562 87 +120.280933 31.908353 29 +113.409139 34.790261 51 +121.078718 31.566861 67 +104.682029 24.785366 49 +110.594595 19.16494 34 +111.017679 21.513523 94 +121.213096 28.911906 27 +118.415081 35.00188 23 +119.626123 39.976077 47 +121.418997 29.790784 19 +120.044481 35.903256 52 +87.609032 43.843075 79 +112.206712 25.388662 54 +116.941249 34.721916 93 +116.438674 23.266715 66 +115.596611 32.640871 10 +121.437035 31.275844 55 +116.120243 24.373981 27 +116.760465 23.370491 53 +114.488408 22.989155 90 +117.018135 36.677259 14 +107.085508 29.853945 44 +103.932456 30.588128 16 +107.325437 24.270553 31 +101.720729 26.585725 63 +121.436783 28.741882 79 +120.614537 30.665188 72 +107.501001 31.219154 40 +121.425321 31.271399 61 +106.37617 30.651946 90 +113.604996 24.812362 18 +118.807371 31.948713 96 +115.40618 28.441626 57 +114.368161 30.530076 7 +117.967437 28.419065 87 +114.35271 30.524725 75 +114.45738 38.018078 86 +118.318819 32.313378 92 +116.598815 35.415404 82 \ No newline at end of file diff --git a/positions/src/main/assets/datab b/positions/src/main/assets/datab new file mode 100644 index 0000000..12b9bab --- /dev/null +++ b/positions/src/main/assets/datab @@ -0,0 +1,1000 @@ +116.895579 24.306521 43 +113.951068 22.772504 48 +110.00006 40.603564 38 +111.846788 21.897821 97 +120.607979 28.022674 49 +120.244238 27.642108 21 +113.304118 23.154842 9 +113.924164 23.219795 94 +101.692567 36.945368 39 +121.595172 38.977931 86 +117.215115 39.211625 63 +117.29184 34.208296 25 +113.268392 22.855112 38 +104.40182 30.763942 78 +103.858606 36.042294 29 +111.807038 40.480162 21 +116.492689 23.270168 14 +113.714688 34.727011 93 +100.300696 24.294623 13 +106.520348 29.584038 43 +120.713809 32.500059 74 +113.899515 22.496365 23 +114.277144 26.734914 16 +117.789959 36.139838 17 +113.816098 23.108165 22 +117.999552 24.613994 88 +114.521645 32.202431 8 +105.895828 32.423113 48 +114.413938 30.468402 66 +123.622729 41.922734 86 +119.278829 26.030958 49 +113.7508 23.096938 28 +109.550306 18.759454 99 +117.087296 37.416999 57 +116.616979 35.410712 59 +104.680951 23.442143 77 +116.011224 36.972677 21 +121.662662 31.265527 98 +113.160712 22.311906 98 +113.259499 23.147357 39 +116.490488 39.752985 28 +108.962473 34.245263 90 +112.926264 28.357455 85 +106.099789 25.172186 39 +124.919729 46.610268 14 +122.265164 43.626166 3 +103.965711 30.759318 66 +81.864027 41.799725 23 +109.026665 34.999063 8 +117.723772 34.562502 18 +121.538642 31.221014 71 +113.616099 23.125 31 +118.539784 32.98618 51 +118.045868 33.910477 58 +102.733748 24.999628 80 +110.120424 21.814721 69 +113.53721 34.831027 63 +103.750423 29.564131 51 +108.343693 22.847061 48 +120.974335 31.425611 95 +121.486648 31.273243 39 +121.578509 45.415852 12 +120.176218 30.284694 18 +113.244533 22.83731 47 +113.882833 22.600005 16 +120.861598 32.049926 93 +119.601994 31.745735 78 +115.550205 34.846048 95 +113.832878 34.025948 79 +113.96713 35.715252 18 +110.199547 22.683293 66 +106.46486 29.548186 23 +102.782912 24.937195 34 +122.036842 37.188304 91 +110.042236 40.593977 6 +113.225579 23.470736 91 +113.303911 34.779328 33 +124.900308 46.63403 55 +113.726187 34.763102 7 +105.918555 34.488574 17 +119.195951 36.717647 47 +120.548152 40.445429 6 +103.664276 30.931069 85 +118.046192 24.664057 94 +87.313148 44.015054 77 +121.404588 37.457301 26 +101.211857 25.436678 9 +113.924128 22.545625 100 +108.878912 34.242935 97 +114.245129 30.742 100 +117.196682 35.092336 22 +115.686622 29.687971 84 +113.38943 22.984364 80 +113.154963 29.343102 19 +116.336689 40.043326 33 +116.58314 40.293543 36 +103.871946 36.065076 84 +120.696238 30.501609 20 +120.560863 30.640925 96 +115.777431 37.77055 53 +103.40683 23.3597 78 +124.794362 40.729217 96 +111.005031 21.540118 11 +112.794518 24.053766 76 +109.506441 18.28923 74 +118.015658 36.636986 6 +119.184336 34.943714 76 +114.244123 22.69433 80 +108.349909 22.804557 21 +106.629241 29.711155 65 +106.581181 29.521255 8 +114.263939 30.583946 70 +113.84196 34.020578 7 +123.182658 42.507064 74 +109.305814 24.261247 35 +115.958638 34.541096 13 +112.695893 22.383657 85 +119.061564 31.670387 83 +108.346603 22.766239 74 +116.606783 35.41594 61 +121.342874 31.285673 48 +118.012281 36.845991 70 +123.429054 41.79428 26 +114.082059 32.128462 77 +113.28104 23.054131 71 +114.372122 30.529026 24 +113.495223 23.074605 96 +120.551656 31.441625 75 +126.592051 43.849908 35 +114.609949 33.561748 15 +120.405007 36.324941 7 +109.382718 24.267424 70 +118.170706 32.674172 94 +119.269432 33.433043 51 +104.099379 26.245409 14 +118.876388 31.773252 30 +111.690258 40.813707 61 +116.093437 35.355328 74 +111.440493 27.690723 15 +111.298247 27.698935 84 +112.950275 34.172299 82 +104.104841 30.627695 16 +105.34373 30.113237 14 +117.247194 31.900168 84 +114.931865 36.357763 69 +116.227878 23.433224 51 +112.622439 28.706619 16 +121.576038 31.120998 68 +114.148076 30.628068 93 +114.428581 38.048127 22 +108.947704 34.305244 10 +116.375703 30.85227 76 +120.093295 31.793165 78 +112.469682 34.150657 59 +118.300304 35.003092 84 +119.145206 28.076615 57 +114.674115 33.647391 26 +114.283226 31.506408 96 +115.047325 26.325752 95 +86.0981 44.312374 59 +124.285543 42.063808 68 +113.271518 23.12112 12 +123.617563 47.23076 7 +114.435812 30.60946 49 +113.67466 34.758357 28 +116.350074 39.850893 60 +122.447143 36.970817 87 +113.201558 33.768945 41 +110.198837 20.344352 31 +113.532988 23.852085 43 +116.412668 34.936767 91 +106.741385 26.568277 59 +103.894323 30.810307 75 +120.679961 31.143168 72 +112.374264 34.680019 99 +121.457857 31.22919 75 +108.346855 22.810562 16 +118.568368 34.845626 73 +114.512357 36.618399 2 +116.742472 23.495446 55 +112.153191 30.361585 45 +119.483364 25.894396 85 +103.704735 36.100581 28 +105.639146 30.326327 49 +114.461522 22.809171 17 +119.790396 33.798703 12 +116.647449 33.643499 27 +113.00942 28.234725 3 +105.859034 37.011078 84 +116.673222 23.482735 63 +109.25735 25.072275 57 +116.431901 39.976948 39 +118.796951 32.047455 86 +119.991868 28.893313 31 +114.938504 25.862368 10 +121.871976 29.901115 100 +118.319564 32.325613 3 +119.609908 25.754623 88 +109.603979 19.51865 17 +108.958673 34.212378 68 +118.794112 32.027077 54 +106.520582 29.513649 70 +121.318593 30.227412 42 +115.361714 28.865907 28 +117.487158 23.806616 68 +111.323758 30.708287 41 +123.52714 41.805983 31 +116.264151 40.123681 13 +113.817778 23.122358 18 +121.551542 29.800633 95 +113.819557 22.801575 4 +103.933408 36.052048 50 +118.793591 32.056514 21 +108.604884 23.4393 57 +113.091345 28.236316 2 +111.489999 27.65158 95 +103.401458 25.898118 18 +123.340274 41.750622 45 +117.075654 39.383565 51 +111.309134 23.835195 19 +110.433556 34.874668 69 +113.682215 34.838649 4 +112.445508 37.685577 22 +115.942818 28.660941 12 +116.34181 37.480486 65 +106.248781 29.456216 30 +113.327043 23.041378 61 +104.276929 30.574837 58 +114.336145 23.003402 38 +113.19492 23.141243 98 +121.341006 30.322438 63 +118.193882 24.489244 32 +109.898947 40.676985 30 +113.587237 30.949514 59 +104.379875 31.155592 96 +115.347008 38.764412 13 +126.657079 45.783459 45 +117.532361 36.659289 66 +101.520919 36.653542 3 +121.50006 29.828554 92 +121.525769 31.297708 72 +113.634362 34.73597 56 +113.97641 22.701582 33 +114.019465 22.918772 34 +103.984504 30.688165 85 +114.358037 36.11059 82 +113.105529 22.852906 80 +120.504827 36.314211 5 +112.064205 37.455123 98 +120.417943 31.913633 49 +108.301014 22.839067 24 +120.366713 27.464139 96 +104.079221 30.663379 73 +114.130352 22.545107 74 +109.862045 29.004063 98 +130.351639 46.816811 23 +113.612407 23.010421 77 +117.019896 36.653593 65 +121.640465 38.925981 55 +114.299979 30.593024 40 +106.077241 29.827019 61 +114.292353 30.587599 43 +106.329782 38.116598 36 +117.94038 40.974879 12 +104.047457 34.448159 50 +99.968826 25.672386 89 +119.875133 31.815582 59 +117.180216 26.90989 38 +113.501844 22.229378 97 +104.456446 30.223605 93 +111.582659 39.425966 93 +113.849668 22.897724 1 +126.54807 44.835942 61 +117.847217 36.817495 71 +119.678916 29.042816 21 +108.952376 34.236422 65 +118.645137 42.325882 51 +119.901121 29.453032 77 +108.523812 25.923353 80 +103.785807 30.881098 49 +107.389037 40.765086 63 +120.698583 31.350765 55 +119.978788 36.299043 45 +123.787819 41.307084 9 +120.209572 30.182794 95 +114.045732 22.629222 81 +118.786494 30.943196 51 +113.670114 34.753204 79 +103.857366 30.064645 57 +111.546197 24.459818 77 +130.578712 46.241894 91 +115.602945 34.427542 41 +111.230505 28.384471 89 +104.953748 28.378647 71 +112.051314 22.919446 2 +110.065744 20.911429 34 +121.453761 31.20029 80 +110.088741 20.923584 17 +120.904196 31.959406 7 +112.510501 26.91796 5 +121.564064 31.20917 72 +119.647134 32.313111 82 +104.834813 29.503992 29 +114.129795 22.601698 27 +121.753615 36.877897 66 +114.477062 38.025497 93 +116.483868 23.598642 42 +125.667065 44.393236 24 +116.407386 36.858264 83 +119.459101 32.213811 74 +114.968408 22.75695 50 +120.702661 27.944057 21 +121.442568 31.182883 41 +122.629859 40.959483 80 +117.000888 36.728639 65 +113.357199 22.054562 15 +117.033837 25.098962 58 +121.317012 31.3424 33 +113.263065 23.187418 33 +123.434579 41.16338 55 +118.238528 25.4884 21 +116.08864 39.40688 83 +103.960501 30.786864 28 +110.422614 29.115576 36 +118.714594 32.210145 63 +113.425955 23.430637 67 +110.347471 20.006486 30 +120.047769 30.248909 53 +118.461335 24.725227 29 +121.358199 31.446493 69 +112.709422 22.373807 21 +112.37942 34.606271 4 +125.251797 43.849577 74 +120.344201 27.470742 55 +118.110996 24.473459 29 +117.488066 33.254768 19 +99.8885 22.495856 71 +118.050459 36.782992 57 +108.37313 22.805215 6 +113.901985 34.804882 39 +100.74755 21.701881 45 +112.794276 22.301206 4 +112.936846 28.727622 27 +119.222568 36.441418 70 +120.256284 29.832165 24 +113.047876 22.944583 14 +107.393375 29.712386 16 +113.118699 22.628404 56 +114.502565 38.053042 35 +103.854609 30.705189 59 +120.545547 27.515926 35 +113.194111 27.805359 94 +113.14775 23.183208 49 +121.524628 31.223678 1 +121.479138 28.752966 88 +116.410701 39.768945 48 +120.783742 30.748185 17 +108.945531 34.211416 45 +110.655635 26.745005 43 +115.8792 28.658064 14 +120.2004 36.017958 5 +118.122054 24.434422 31 +129.318902 47.486015 8 +116.58004 35.059465 64 +107.610927 37.602414 38 +115.444421 28.173071 33 +107.733797 33.2567 11 +118.205857 33.770041 48 +111.558791 36.091971 76 +118.842827 32.055374 18 +106.484461 28.018217 18 +109.090912 21.454102 72 +113.37344 23.139523 26 +113.014756 28.190169 94 +121.296827 28.666194 90 +103.858229 30.216357 99 +106.531577 29.548296 47 +103.88419 30.535045 51 +119.939092 31.653983 87 +103.600119 29.755751 14 +105.4613 28.888016 74 +106.95608 27.726239 36 +114.490151 38.016514 52 +119.571739 30.597322 64 +119.066352 36.726108 63 +110.301451 25.28171 77 +120.396375 36.185228 95 +120.756667 27.968642 11 +117.650021 39.025688 36 +110.0089 40.357459 100 +110.312796 20.008669 89 +118.232051 39.625161 59 +123.426467 41.841899 89 +113.759631 23.102273 55 +116.349311 39.721074 77 +120.383969 36.311579 56 +103.776501 29.60599 100 +114.262295 33.335506 83 +110.400013 34.018685 6 +113.839759 22.736044 46 +104.103664 30.663324 92 +121.695037 39.091729 12 +113.239979 33.957255 33 +98.400628 36.967443 91 +112.095223 31.526194 3 +120.136998 29.424487 24 +117.790462 28.223227 94 +121.531869 38.883555 99 +116.993135 35.428412 97 +105.819832 25.84264 76 +111.097906 35.464367 98 +113.043061 36.545926 85 +113.260712 30.637864 23 +115.478332 25.619351 77 +120.376639 31.562323 60 +123.397631 41.791584 34 +117.79101 34.421452 41 +111.302774 30.692543 20 +104.04098 30.685564 59 +116.972465 35.600247 3 +107.869414 31.090047 95 +117.117074 36.189132 31 +106.626339 26.627589 5 +108.349595 28.287039 12 +123.400614 41.813417 70 +103.810241 30.875209 8 +112.147801 32.025156 28 +131.589836 46.729328 21 +113.27248 23.125997 12 +120.293896 30.909305 4 +114.375239 22.75395 23 +113.111845 41.037154 92 +116.83966 30.749744 20 +111.50607 27.840126 73 +81.277721 43.932733 53 +130.374986 46.820998 85 +109.563574 24.005736 36 +110.419551 21.202871 66 +118.961296 42.275432 91 +113.973993 22.538139 32 +120.725253 36.991372 78 +104.818778 34.684798 41 +118.540206 36.519472 38 +113.400371 22.356678 20 +108.156261 28.245409 41 +112.36193 28.563687 68 +117.588047 34.583152 96 +131.215863 45.085972 30 +130.713674 47.587207 47 +116.413971 40.072726 45 +113.763529 34.391922 2 +113.741188 34.37106 5 +113.177627 23.444215 34 +122.282762 29.950633 63 +116.43977 23.866461 50 +111.854477 33.04647 74 +113.094894 34.361078 25 +110.513289 24.128716 62 +87.595306 43.890357 23 +119.380813 25.905414 18 +104.539818 30.269295 100 +126.414608 47.265041 99 +117.027127 32.643767 46 +114.58414 38.016052 22 +121.626496 39.214665 59 +114.088653 23.083092 66 +102.716725 24.981362 100 +117.832117 24.444102 92 +114.054697 22.659391 14 +116.688268 23.335222 62 +121.604784 38.974229 90 +110.76565 31.356509 9 +112.208113 27.46103 80 +114.100466 22.84239 82 +111.502252 30.296529 97 +110.019949 27.607477 93 +118.832335 35.936373 38 +119.183815 26.07666 56 +103.960618 30.762507 32 +118.815249 35.214194 25 +114.380962 30.619227 79 +114.684724 23.11419 33 +106.416621 29.811931 77 +115.052211 40.613806 48 +120.156338 29.619053 5 +107.413533 40.763426 84 +116.51583 40.125543 25 +108.909131 34.219341 45 +119.386706 29.541863 91 +114.187754 22.58363 15 +119.053111 33.548826 38 +98.291492 39.772883 38 +121.732164 29.945626 15 +120.60073 31.935538 49 +114.51719 38.048205 31 +118.304428 34.018438 30 +116.968665 36.654867 37 +103.523915 30.592527 50 +116.640407 23.489928 67 +117.61134 38.518714 23 +114.898439 33.447225 77 +109.48252 28.586161 23 +121.300735 31.258049 48 +114.918014 32.58126 34 +117.936545 33.907219 39 +106.093994 28.557389 58 +121.471512 31.211772 4 +107.400697 40.736871 54 +121.520829 31.238144 87 +109.040203 21.937848 71 +120.178248 30.264967 51 +109.615639 23.111946 42 +109.640244 18.265028 88 +128.882307 47.7249 32 +117.294777 40.868893 61 +121.262359 38.812483 3 +114.395442 22.789123 20 +121.498461 31.192877 49 +113.851985 23.113035 96 +114.178933 22.581118 83 +120.017577 36.288033 16 +123.406228 41.892663 96 +103.852803 30.377468 29 +119.654114 27.092087 26 +110.538837 24.923392 25 +117.39651 36.103942 30 +121.124631 31.164592 62 +116.762864 25.665555 82 +113.323566 23.125208 34 +118.533747 25.086314 31 +107.521438 26.290037 68 +120.583914 31.306841 78 +127.50004 45.757734 58 +125.692901 42.540602 80 +104.169599 35.942035 38 +108.879038 18.500466 34 +122.76473 40.861009 50 +110.014173 19.739533 11 +121.578994 29.885248 48 +117.210426 39.200184 24 +112.647061 26.898018 97 +112.936944 27.887263 80 +113.144175 27.832635 79 +108.340818 26.858866 21 +113.43271 23.202607 67 +86.003751 41.769839 19 +120.845357 31.756804 89 +121.61887 29.809941 36 +118.332347 35.073904 60 +106.857401 23.462963 23 +116.523294 39.889041 8 +116.994177 36.576705 55 +109.403505 25.214118 73 +120.818767 27.926177 3 +115.030131 35.226977 86 +116.819915 32.788889 36 +114.525292 37.983821 12 +108.94448 34.13893 100 +112.001898 31.785768 33 +116.204683 39.05636 13 +115.479284 38.500848 38 +116.939569 32.615944 88 +114.112593 22.557315 64 +121.545819 29.88769 66 +115.502846 33.869107 41 +117.158109 31.800285 83 +106.064979 33.800668 18 +114.752941 25.876478 57 +120.153679 30.273326 45 +118.393468 25.042463 34 +104.027667 30.665072 51 +118.233848 33.452633 72 +118.870037 34.116652 84 +120.344965 31.872904 26 +114.576181 35.499475 86 +110.135776 31.545261 9 +113.802156 35.198717 51 +116.838213 36.553682 69 +113.331462 35.264414 8 +100.109555 26.002962 99 +114.549268 30.965803 63 +115.798335 32.887267 81 +109.088011 21.470366 23 +117.190268 34.204512 48 +117.242765 39.077348 34 +120.16419 30.27657 49 +120.103895 30.378808 42 +104.121244 30.665173 91 +119.962071 31.652922 44 +115.935075 28.562894 26 +114.044834 22.926727 98 +98.905987 39.422434 30 +116.603792 23.258457 36 +82.321282 43.486412 79 +106.694619 26.335871 60 +120.645574 31.312764 64 +119.46396 31.648373 42 +111.847722 38.924977 73 +118.71622 32.026243 87 +105.193901 34.188694 41 +118.693663 36.774038 9 +121.388544 28.442293 90 +118.206432 39.602823 32 +123.488234 41.878774 14 +114.333854 22.778652 68 +114.469723 38.084859 22 +115.701273 24.130794 91 +114.221809 30.477887 5 +111.257742 37.91321 9 +112.875914 34.156258 80 +108.774718 36.829975 68 +106.628504 29.56029 15 +121.432696 31.144806 74 +121.804495 39.034433 67 +78.55484 39.788423 41 +121.494068 28.548704 62 +115.960695 32.895491 41 +103.699633 36.30465 91 +118.361165 29.800438 84 +114.574861 30.675307 38 +109.223089 27.740355 69 +114.102595 22.794729 50 +118.184755 24.509187 65 +103.959773 30.47998 51 +113.135623 27.907911 69 +115.484233 38.869026 83 +114.66197 37.899843 64 +108.959311 34.262069 83 +108.96046 34.270146 14 +87.594417 43.819696 10 +103.402653 30.158979 65 +117.331114 36.693958 93 +107.338938 30.877937 69 +120.222005 32.041471 79 +117.168817 34.274479 87 +109.379125 24.264871 84 +120.994484 40.727652 96 +114.032473 22.62325 94 +112.463493 22.498727 78 +120.133477 30.288943 89 +106.245754 29.561013 78 +117.412015 39.555899 84 +102.767542 24.99691 56 +116.419477 40.072008 42 +121.623649 29.864273 2 +110.377663 21.272686 10 +126.780973 45.190118 25 +119.784754 33.007263 93 +121.30281 30.21514 7 +116.025786 28.687767 16 +112.100595 34.144615 9 +113.226855 23.131988 31 +104.092049 30.699569 62 +104.208595 29.774798 19 +119.606333 29.060111 33 +116.666026 26.259512 70 +76.131356 38.982769 90 +113.652813 34.734547 1 +120.617951 30.664481 57 +122.146516 40.180421 1 +114.932863 27.799791 57 +114.897936 25.807996 21 +119.303864 26.084675 2 +120.508744 30.087476 21 +113.454863 30.37577 4 +100.592206 25.830519 98 +117.330611 31.929577 30 +118.797391 32.050538 7 +115.108284 30.214196 33 +113.685988 35.110971 38 +121.244645 30.198567 33 +115.322062 35.233242 1 +103.574158 35.491416 68 +118.922471 33.313364 32 +103.838772 30.692349 99 +104.104841 30.627276 84 +108.966165 34.231512 60 +112.991525 23.106495 83 +106.985024 26.448616 39 +109.53145 18.301802 47 +115.521935 38.60602 16 +104.167956 30.696836 95 +114.497166 36.587558 58 +125.298446 43.925923 74 +120.272876 31.914545 92 +113.309077 40.084236 45 +120.707251 27.922179 68 +106.520133 29.593884 24 +112.989738 28.158454 61 +120.964283 31.386115 57 +119.632626 39.988675 49 +117.144697 34.218782 4 +117.543428 36.725573 79 +121.610911 38.91212 2 +114.778228 25.657357 14 +116.260998 37.324294 34 +118.857937 31.946438 27 +113.256023 23.164702 1 +118.530127 34.150373 96 +106.707537 26.578811 94 +117.182812 31.741229 89 +118.814396 32.109203 31 +121.809625 39.069771 57 +113.262922 23.176214 17 +120.233117 33.307284 96 +106.580535 29.565309 35 +121.51198 31.154232 54 +126.694305 45.706839 37 +117.210094 34.295917 2 +107.342576 34.345983 48 +116.703602 39.518609 5 +121.390961 31.251327 29 +114.326381 30.632589 34 +119.549084 35.402783 73 +114.080496 38.211767 10 +121.438193 30.995672 89 +121.498793 31.292585 62 +119.153255 36.730078 8 +112.571325 37.825674 86 +109.539858 23.439416 56 +115.725123 39.147307 54 +107.465402 26.896085 92 +111.798037 22.169931 61 +114.431725 34.824975 69 +112.625017 22.35865 1 +119.01682 25.448725 18 +112.044137 21.888574 92 +120.96732 30.901939 79 +116.8386 36.553696 77 +118.386138 35.904974 60 +120.133737 30.198488 60 +120.910628 32.364133 42 +113.458465 23.194037 19 +100.144822 24.442754 28 +119.176566 29.029481 1 +121.10141 30.878262 87 +117.733842 39.016613 13 +123.420601 41.790771 100 +121.53698 31.050641 98 +118.239301 39.700772 68 +109.468991 36.625416 73 +122.252049 40.668305 19 +107.046656 35.634283 2 +105.258804 30.58491 91 +107.206555 22.838818 31 +120.171367 30.267127 78 +123.360711 42.748317 30 +116.378982 39.965032 38 +108.646359 24.500433 65 +124.8616 46.663996 95 +123.520277 41.602829 20 +108.972731 34.320354 51 +113.217315 34.335528 2 +121.490565 31.268228 71 +107.305701 34.345662 76 +130.971344 45.298068 16 +109.987924 22.280907 14 +113.770797 34.193397 40 +118.70668 43.535796 61 +120.973563 31.376311 9 +121.375366 31.083367 48 +120.084645 29.313935 48 +120.180584 30.310061 39 +120.136764 30.287906 5 +113.788799 22.743201 4 +113.275327 23.131398 9 +107.175743 32.060974 56 +121.327046 31.122157 39 +118.475339 24.717555 50 +107.046432 27.838761 76 +108.360419 22.829808 56 +118.639963 32.094055 69 +109.215974 23.719988 81 +111.350779 24.632118 75 +120.77652 27.95016 74 +105.719123 33.73995 9 +108.443998 34.488969 3 +112.903896 28.303506 23 +114.801422 27.19001 17 +114.346817 36.110838 96 +113.549023 22.366621 69 +120.393284 30.32748 25 +119.951336 30.074233 42 +109.010011 35.653577 8 +106.405266 30.420493 80 +116.508949 39.809322 4 +107.443375 28.217761 28 +106.518084 29.505516 73 +120.612651 28.029314 45 +119.467042 32.713795 34 +116.927837 34.741466 45 +113.383771 31.73038 39 +105.723964 28.581919 19 +102.590944 26.636841 28 +103.362822 24.714199 19 +120.165169 30.267361 12 +116.36398 40.049381 95 +121.526829 38.938737 88 +120.455753 43.350823 58 +113.368931 22.355541 47 +114.277459 30.62235 27 +116.188757 36.148938 88 +121.948503 29.209567 49 +101.360913 23.208063 42 +113.684945 34.846907 52 +114.662149 37.884508 90 +118.679776 37.42233 84 +104.149055 29.998773 19 +120.883651 27.975134 80 +114.307471 30.606919 41 +121.524934 31.234207 71 +106.142745 26.422258 81 +120.553542 31.444367 10 +111.10212 35.189949 71 +121.421683 37.544461 5 +116.306956 30.463935 33 +103.69524 30.919065 47 +111.537753 36.072019 81 +84.860181 45.608276 20 +109.448186 18.296035 90 +121.560588 31.011419 52 +79.938383 37.108676 20 +110.312545 25.323629 26 +117.632432 24.527877 28 +110.853451 32.611907 12 +122.152472 37.416412 13 +118.128773 37.077933 72 +111.640285 40.066376 22 +113.542986 22.102288 60 +123.203148 41.792754 86 +114.412043 30.508726 29 +116.227698 39.909273 59 +114.190799 36.691426 87 +103.343149 30.314823 5 +100.590238 25.826779 45 +120.177511 30.246296 46 +112.503997 23.082435 38 +113.768048 23.003693 27 +102.075595 25.146848 99 +112.024374 33.031875 29 +106.545088 29.588977 9 +111.676541 40.82219 27 +118.781859 32.047952 60 +120.143511 32.522873 18 +125.300817 43.853438 78 +113.575972 26.953259 22 +113.417547 23.059934 11 +113.135892 27.830663 58 +115.56641 34.860274 7 +114.247527 22.567444 61 +91.046991 29.641374 93 +120.297363 27.757995 29 +103.893514 36.063705 92 +108.792585 30.40904 75 +116.138954 23.306392 47 +113.22663 23.415956 20 +114.415888 23.07724 80 +104.08638 30.6608 45 +118.636046 32.062328 44 +110.15288 35.228768 97 +115.037623 30.159409 69 +120.141364 29.692465 77 +113.773213 23.044862 32 +99.181219 25.0772 13 +109.854607 40.585841 53 +120.441479 36.164616 66 +114.46569 34.485777 53 +117.219697 39.149594 57 +113.354728 23.023518 64 +116.406093 37.638242 50 +87.564216 43.926605 89 +115.324021 35.013817 63 +109.473555 26.825632 50 +110.548485 40.563613 46 +119.011134 33.581533 59 +120.669468 31.288697 71 +119.659674 29.097131 15 +113.772629 23.007203 19 +112.561453 28.265733 6 +113.931881 22.956813 11 +118.264067 35.120633 63 +121.019772 31.257293 22 +118.143505 24.537723 88 +118.043263 37.36595 89 +115.341466 26.336535 5 +121.868248 29.895166 84 +119.944545 32.134662 62 +106.776105 31.86704 78 +119.515945 32.212185 51 +121.418179 31.237681 93 +104.037827 30.689717 39 +108.932811 34.205102 15 +117.85311 39.351914 73 +117.126965 34.26732 5 +117.15863 35.116404 93 +113.673501 34.747435 98 +126.719969 45.687834 58 +117.035823 30.100857 50 +117.852643 31.583697 99 +120.286961 31.796748 75 +116.530229 32.340433 59 +121.652933 31.076841 40 +120.975458 28.034798 30 +87.367549 43.882996 46 +118.143182 36.190675 30 +115.080598 30.200416 8 +116.662253 40.135356 59 +114.285184 30.572334 35 +120.621688 27.776414 4 +119.589858 34.212177 96 +121.633207 31.266337 9 +113.767706 34.783138 22 +113.655427 34.732151 77 +121.442568 31.184884 30 +114.503185 38.049789 98 +112.667174 32.835331 74 +118.956373 40.412628 88 +117.853397 36.812259 41 +118.848468 31.918629 11 +113.44278 36.808127 85 +110.398782 27.721146 57 +110.112358 34.798946 70 +115.664002 34.990148 43 +109.088128 34.218461 61 +120.811086 32.02635 90 +109.318983 32.572034 1 +120.728505 30.731439 75 +110.472569 19.261343 12 +112.16336 23.03461 18 +107.451711 28.796823 25 +104.530898 32.414091 29 +113.190132 40.043899 3 +121.570092 38.975694 30 +113.489753 22.953577 8 +100.559408 25.481763 69 +108.830862 27.179839 61 +120.685342 31.456658 31 +120.803406 32.682811 6 +114.507317 36.582914 85 +113.019741 28.103639 7 +120.16136 30.284772 10 +120.79895 30.786747 45 +116.441414 39.965543 40 +108.981274 34.262934 86 +118.745118 36.887452 64 +113.017001 28.203604 60 +120.553758 30.033775 65 +114.050008 22.712501 8 +86.068016 44.303705 76 +113.965621 22.803416 54 +113.4646 29.479973 5 +113.918685 22.584556 85 +126.40956 44.064045 6 +112.900105 29.818418 60 +121.209907 28.878567 8 +117.273119 30.417231 89 +116.438432 39.887678 19 +119.136842 25.447453 75 +116.577534 39.800515 65 +118.931211 27.988141 69 +122.445877 37.158341 60 +105.170932 31.63736 51 +111.580252 38.710235 34 +120.197678 30.308845 8 +117.281312 34.260413 47 +108.977914 34.267581 70 +113.312355 34.822234 78 +109.415479 24.310316 57 +121.579811 29.886587 61 +118.71675 39.753346 45 +120.598547 30.292865 57 +116.278551 24.372821 37 +114.427251 37.066488 45 +116.367672 23.570176 66 +116.496705 33.368762 16 +126.461078 43.976298 16 +112.044828 37.439782 92 +111.248022 23.427363 63 +114.151813 30.495292 82 +114.05467 22.551432 76 +125.606026 46.016797 28 +114.315951 30.611332 46 +114.472355 37.243066 32 +114.094941 22.546167 72 +118.799116 32.056146 4 +119.139205 36.603842 53 +112.518424 37.860254 18 +116.324877 27.944751 41 +114.5799 38.185756 10 +108.542856 23.642191 27 +108.01794 35.090254 66 +108.983888 24.757109 89 +120.551925 31.439407 24 +106.631082 26.466971 91 +114.045849 33.576698 90 +129.133842 47.641269 90 +120.28008 31.897524 28 +100.221466 25.419978 4 +104.024559 30.657352 84 +113.052601 23.067914 25 diff --git a/positions/src/main/assets/gltf-BrainStem/BrainStem.gltf b/positions/src/main/assets/gltf-BrainStem/BrainStem.gltf new file mode 100644 index 0000000..b0a768a --- /dev/null +++ b/positions/src/main/assets/gltf-BrainStem/BrainStem.gltf @@ -0,0 +1,9162 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 21, + 1 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "mesh": 0, + "skin": 0 + }, + { + "children": [ + 3 + ], + "rotation": [ + -0.7071066498756409, + 0.00048056046944111586, + 0.0004805605276487768, + -0.7071065306663513 + ] + }, + { + "children": [ + 12, + 8, + 4 + ], + "translation": [ + 0.0, + 0.9148268103599548, + 0.0 + ], + "rotation": [ + 1.4210853021136108e-14, + -0.0006796148954890668, + -0.0, + -0.9999997615814208 + ], + "scale": [ + 1.0, + 0.9999998807907105, + 0.9999998807907105 + ] + }, + { + "children": [ + 5 + ], + "translation": [ + 0.1415490955114365, + -0.03931922093033791, + -1.2286400341565697e-8 + ], + "rotation": [ + 0.7388415336608887, + 1.436989833791813e-7, + -0.6716854572296143, + -0.054411567747592929 + ], + "scale": [ + 1.0000085830688477, + 1.0000001192092896, + 1.000010371208191 + ] + }, + { + "children": [ + 6 + ], + "translation": [ + -7.450580152834618e-9, + 0.3586178123950958, + 0.0 + ], + "rotation": [ + 0.026200557127594949, + -0.5283005833625794, + 0.015088041312992573, + -0.848518967628479 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ] + }, + { + "children": [ + 7 + ], + "translation": [ + -7.450580152834618e-9, + 0.39689669013023379, + -5.5879398885849708e-9 + ], + "rotation": [ + 0.455043375492096, + -0.16150842607021333, + -0.07667787373065949, + -0.8723365664482117 + ], + "scale": [ + 0.9999998807907105, + 1.0, + 1.0 + ] + }, + { + "translation": [ + 7.450580152834618e-9, + 0.12854869663715366, + 0.0 + ], + "rotation": [ + 0.9033632874488832, + 5.500013600112653e-8, + 8.110696114727035e-8, + -0.4288763403892517 + ], + "scale": [ + 1.0, + 1.0, + 1.0000003576278689 + ] + }, + { + "children": [ + 9 + ], + "translation": [ + -0.1415490955114365, + -0.03931922093033791, + -1.2220500167359204e-8 + ], + "rotation": [ + 0.7388415336608887, + -1.436989833791813e-7, + 0.6716854572296143, + -0.054411567747592929 + ], + "scale": [ + 1.0000085830688477, + 1.0000001192092896, + 1.000010371208191 + ] + }, + { + "children": [ + 10 + ], + "translation": [ + 7.450580152834618e-9, + 0.3586178123950958, + 0.0 + ], + "rotation": [ + 0.026200557127594949, + 0.5283005833625794, + -0.015088041312992573, + -0.848518967628479 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ] + }, + { + "children": [ + 11 + ], + "translation": [ + 7.450580152834618e-9, + 0.39689669013023379, + -5.5879398885849708e-9 + ], + "rotation": [ + 0.455043375492096, + 0.16150842607021333, + 0.07667787373065949, + -0.8723365664482117 + ], + "scale": [ + 0.9999998807907105, + 1.0, + 1.0 + ] + }, + { + "translation": [ + -7.450580152834618e-9, + 0.12854869663715366, + 0.0 + ], + "rotation": [ + 0.9033632874488832, + -5.500013600112653e-8, + -8.110696114727035e-8, + -0.4288763403892517 + ], + "scale": [ + 1.0, + 1.0, + 1.0000003576278689 + ] + }, + { + "children": [ + 20, + 18, + 13 + ], + "translation": [ + -5.492820174396451e-12, + 0.10747220367193222, + -0.02359149046242237 + ], + "rotation": [ + -1.6928350277112263e-8, + -1.1641550223817632e-10, + -0.0, + -1.0 + ] + }, + { + "children": [ + 14 + ], + "translation": [ + 0.4194048047065735, + 0.3407667875289917, + -0.0131063899025321 + ], + "rotation": [ + 0.0097780404612422, + 4.91621790388308e-7, + 0.6920724511146545, + -0.72176194190979 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ] + }, + { + "children": [ + 17, + 16, + 15 + ], + "translation": [ + 1.1920899822825962e-7, + 0.1857225000858307, + 2.7939699442924854e-9 + ], + "rotation": [ + -0.009778017178177834, + -4.709763175014814e-7, + -0.6920723915100098, + -0.7217618823051453 + ], + "scale": [ + 1.0, + 0.9999998807907105, + 0.9999999403953552 + ] + }, + { + "translation": [ + 0.41257110238075259, + -0.021677140146493913, + 0.055014971643686298 + ], + "rotation": [ + -0.0, + -0.0, + -3.165049888842475e-10, + -1.0 + ], + "scale": [ + 0.9999998807907105, + 1.0, + 1.0 + ] + }, + { + "translation": [ + 0.411934107542038, + 0.02158582024276257, + 0.05764370039105415 + ], + "rotation": [ + -1.69283520534691e-8, + -0.0, + -3.1650501663982308e-10, + -0.9999999403953552 + ], + "scale": [ + 0.9999998807907105, + 0.9999998807907105, + 1.0 + ] + }, + { + "translation": [ + 0.4094892144203186, + 0.0027067658957093956, + 0.015727709978818898 + ], + "rotation": [ + -0.0, + -0.0, + -3.1650501663982308e-10, + -0.9999999403953552 + ], + "scale": [ + 0.9999998807907105, + 0.9999998807907105, + 1.0 + ] + }, + { + "children": [ + 19 + ], + "translation": [ + -0.41940489411354067, + 0.3407664895057678, + -0.013106339611113072 + ], + "rotation": [ + 0.009349151514470578, + -4.459962354985692e-8, + -0.6824582815170288, + -0.7308647036552429 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ] + }, + { + "translation": [ + 1.1920899822825962e-7, + 0.1918196976184845, + 9.313230187046884e-10 + ], + "rotation": [ + -0.009349144995212557, + 3.408685245176457e-8, + 0.6824582815170288, + -0.7308647036552429 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ] + }, + { + "translation": [ + 0.0, + 0.5242561101913452, + -0.015727709978818898 + ], + "rotation": [ + 1.66283751212859e-8, + -0.0, + -0.0, + -1.0 + ] + }, + { + "children": [ + 2 + ] + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "JOINTS_0": 1, + "NORMAL": 2, + "POSITION": 3, + "WEIGHTS_0": 4 + }, + "indices": 0, + "mode": 4, + "material": 0 + }, + { + "attributes": { + "JOINTS_0": 6, + "NORMAL": 7, + "POSITION": 8, + "WEIGHTS_0": 9 + }, + "indices": 5, + "mode": 4, + "material": 1 + }, + { + "attributes": { + "JOINTS_0": 11, + "NORMAL": 12, + "POSITION": 13, + "WEIGHTS_0": 14 + }, + "indices": 10, + "mode": 4, + "material": 2 + }, + { + "attributes": { + "JOINTS_0": 16, + "NORMAL": 17, + "POSITION": 18, + "WEIGHTS_0": 19 + }, + "indices": 15, + "mode": 4, + "material": 3 + }, + { + "attributes": { + "JOINTS_0": 21, + "NORMAL": 22, + "POSITION": 23, + "WEIGHTS_0": 24 + }, + "indices": 20, + "mode": 4, + "material": 4 + }, + { + "attributes": { + "JOINTS_0": 26, + "NORMAL": 27, + "POSITION": 28, + "WEIGHTS_0": 29 + }, + "indices": 25, + "mode": 4, + "material": 5 + }, + { + "attributes": { + "JOINTS_0": 31, + "NORMAL": 32, + "POSITION": 33, + "WEIGHTS_0": 34 + }, + "indices": 30, + "mode": 4, + "material": 6 + }, + { + "attributes": { + "JOINTS_0": 36, + "NORMAL": 37, + "POSITION": 38, + "WEIGHTS_0": 39 + }, + "indices": 35, + "mode": 4, + "material": 7 + }, + { + "attributes": { + "JOINTS_0": 41, + "NORMAL": 42, + "POSITION": 43, + "WEIGHTS_0": 44 + }, + "indices": 40, + "mode": 4, + "material": 8 + }, + { + "attributes": { + "JOINTS_0": 46, + "NORMAL": 47, + "POSITION": 48, + "WEIGHTS_0": 49 + }, + "indices": 45, + "mode": 4, + "material": 9 + }, + { + "attributes": { + "JOINTS_0": 51, + "NORMAL": 52, + "POSITION": 53, + "WEIGHTS_0": 54 + }, + "indices": 50, + "mode": 4, + "material": 10 + }, + { + "attributes": { + "JOINTS_0": 56, + "NORMAL": 57, + "POSITION": 58, + "WEIGHTS_0": 59 + }, + "indices": 55, + "mode": 4, + "material": 11 + }, + { + "attributes": { + "JOINTS_0": 61, + "NORMAL": 62, + "POSITION": 63, + "WEIGHTS_0": 64 + }, + "indices": 60, + "mode": 4, + "material": 12 + }, + { + "attributes": { + "JOINTS_0": 66, + "NORMAL": 67, + "POSITION": 68, + "WEIGHTS_0": 69 + }, + "indices": 65, + "mode": 4, + "material": 13 + }, + { + "attributes": { + "JOINTS_0": 71, + "NORMAL": 72, + "POSITION": 73, + "WEIGHTS_0": 74 + }, + "indices": 70, + "mode": 4, + "material": 14 + }, + { + "attributes": { + "JOINTS_0": 76, + "NORMAL": 77, + "POSITION": 78, + "WEIGHTS_0": 79 + }, + "indices": 75, + "mode": 4, + "material": 15 + }, + { + "attributes": { + "JOINTS_0": 81, + "NORMAL": 82, + "POSITION": 83, + "WEIGHTS_0": 84 + }, + "indices": 80, + "mode": 4, + "material": 16 + }, + { + "attributes": { + "JOINTS_0": 86, + "NORMAL": 87, + "POSITION": 88, + "WEIGHTS_0": 89 + }, + "indices": 85, + "mode": 4, + "material": 17 + }, + { + "attributes": { + "JOINTS_0": 91, + "NORMAL": 92, + "POSITION": 93, + "WEIGHTS_0": 94 + }, + "indices": 90, + "mode": 4, + "material": 18 + }, + { + "attributes": { + "JOINTS_0": 96, + "NORMAL": 97, + "POSITION": 98, + "WEIGHTS_0": 99 + }, + "indices": 95, + "mode": 4, + "material": 19 + }, + { + "attributes": { + "JOINTS_0": 101, + "NORMAL": 102, + "POSITION": 103, + "WEIGHTS_0": 104 + }, + "indices": 100, + "mode": 4, + "material": 20 + }, + { + "attributes": { + "JOINTS_0": 106, + "NORMAL": 107, + "POSITION": 108, + "WEIGHTS_0": 109 + }, + "indices": 105, + "mode": 4, + "material": 21 + }, + { + "attributes": { + "JOINTS_0": 111, + "NORMAL": 112, + "POSITION": 113, + "WEIGHTS_0": 114 + }, + "indices": 110, + "mode": 4, + "material": 22 + }, + { + "attributes": { + "JOINTS_0": 116, + "NORMAL": 117, + "POSITION": 118, + "WEIGHTS_0": 119 + }, + "indices": 115, + "mode": 4, + "material": 23 + }, + { + "attributes": { + "JOINTS_0": 121, + "NORMAL": 122, + "POSITION": 123, + "WEIGHTS_0": 124 + }, + "indices": 120, + "mode": 4, + "material": 24 + }, + { + "attributes": { + "JOINTS_0": 126, + "NORMAL": 127, + "POSITION": 128, + "WEIGHTS_0": 129 + }, + "indices": 125, + "mode": 4, + "material": 25 + }, + { + "attributes": { + "JOINTS_0": 131, + "NORMAL": 132, + "POSITION": 133, + "WEIGHTS_0": 134 + }, + "indices": 130, + "mode": 4, + "material": 26 + }, + { + "attributes": { + "JOINTS_0": 136, + "NORMAL": 137, + "POSITION": 138, + "WEIGHTS_0": 139 + }, + "indices": 135, + "mode": 4, + "material": 27 + }, + { + "attributes": { + "JOINTS_0": 141, + "NORMAL": 142, + "POSITION": 143, + "WEIGHTS_0": 144 + }, + "indices": 140, + "mode": 4, + "material": 28 + }, + { + "attributes": { + "JOINTS_0": 146, + "NORMAL": 147, + "POSITION": 148, + "WEIGHTS_0": 149 + }, + "indices": 145, + "mode": 4, + "material": 29 + }, + { + "attributes": { + "JOINTS_0": 151, + "NORMAL": 152, + "POSITION": 153, + "WEIGHTS_0": 154 + }, + "indices": 150, + "mode": 4, + "material": 30 + }, + { + "attributes": { + "JOINTS_0": 156, + "NORMAL": 157, + "POSITION": 158, + "WEIGHTS_0": 159 + }, + "indices": 155, + "mode": 4, + "material": 31 + }, + { + "attributes": { + "JOINTS_0": 161, + "NORMAL": 162, + "POSITION": 163, + "WEIGHTS_0": 164 + }, + "indices": 160, + "mode": 4, + "material": 32 + }, + { + "attributes": { + "JOINTS_0": 166, + "NORMAL": 167, + "POSITION": 168, + "WEIGHTS_0": 169 + }, + "indices": 165, + "mode": 4, + "material": 33 + }, + { + "attributes": { + "JOINTS_0": 171, + "NORMAL": 172, + "POSITION": 173, + "WEIGHTS_0": 174 + }, + "indices": 170, + "mode": 4, + "material": 34 + }, + { + "attributes": { + "JOINTS_0": 176, + "NORMAL": 177, + "POSITION": 178, + "WEIGHTS_0": 179 + }, + "indices": 175, + "mode": 4, + "material": 35 + }, + { + "attributes": { + "JOINTS_0": 181, + "NORMAL": 182, + "POSITION": 183, + "WEIGHTS_0": 184 + }, + "indices": 180, + "mode": 4, + "material": 36 + }, + { + "attributes": { + "JOINTS_0": 186, + "NORMAL": 187, + "POSITION": 188, + "WEIGHTS_0": 189 + }, + "indices": 185, + "mode": 4, + "material": 37 + }, + { + "attributes": { + "JOINTS_0": 191, + "NORMAL": 192, + "POSITION": 193, + "WEIGHTS_0": 194 + }, + "indices": 190, + "mode": 4, + "material": 38 + }, + { + "attributes": { + "JOINTS_0": 196, + "NORMAL": 197, + "POSITION": 198, + "WEIGHTS_0": 199 + }, + "indices": 195, + "mode": 4, + "material": 39 + }, + { + "attributes": { + "JOINTS_0": 201, + "NORMAL": 202, + "POSITION": 203, + "WEIGHTS_0": 204 + }, + "indices": 200, + "mode": 4, + "material": 40 + }, + { + "attributes": { + "JOINTS_0": 206, + "NORMAL": 207, + "POSITION": 208, + "WEIGHTS_0": 209 + }, + "indices": 205, + "mode": 4, + "material": 41 + }, + { + "attributes": { + "JOINTS_0": 211, + "NORMAL": 212, + "POSITION": 213, + "WEIGHTS_0": 214 + }, + "indices": 210, + "mode": 4, + "material": 42 + }, + { + "attributes": { + "JOINTS_0": 216, + "NORMAL": 217, + "POSITION": 218, + "WEIGHTS_0": 219 + }, + "indices": 215, + "mode": 4, + "material": 43 + }, + { + "attributes": { + "JOINTS_0": 221, + "NORMAL": 222, + "POSITION": 223, + "WEIGHTS_0": 224 + }, + "indices": 220, + "mode": 4, + "material": 44 + }, + { + "attributes": { + "JOINTS_0": 226, + "NORMAL": 227, + "POSITION": 228, + "WEIGHTS_0": 229 + }, + "indices": 225, + "mode": 4, + "material": 45 + }, + { + "attributes": { + "JOINTS_0": 231, + "NORMAL": 232, + "POSITION": 233, + "WEIGHTS_0": 234 + }, + "indices": 230, + "mode": 4, + "material": 46 + }, + { + "attributes": { + "JOINTS_0": 236, + "NORMAL": 237, + "POSITION": 238, + "WEIGHTS_0": 239 + }, + "indices": 235, + "mode": 4, + "material": 47 + }, + { + "attributes": { + "JOINTS_0": 241, + "NORMAL": 242, + "POSITION": 243, + "WEIGHTS_0": 244 + }, + "indices": 240, + "mode": 4, + "material": 48 + }, + { + "attributes": { + "JOINTS_0": 246, + "NORMAL": 247, + "POSITION": 248, + "WEIGHTS_0": 249 + }, + "indices": 245, + "mode": 4, + "material": 49 + }, + { + "attributes": { + "JOINTS_0": 251, + "NORMAL": 252, + "POSITION": 253, + "WEIGHTS_0": 254 + }, + "indices": 250, + "mode": 4, + "material": 50 + }, + { + "attributes": { + "JOINTS_0": 256, + "NORMAL": 257, + "POSITION": 258, + "WEIGHTS_0": 259 + }, + "indices": 255, + "mode": 4, + "material": 51 + }, + { + "attributes": { + "JOINTS_0": 261, + "NORMAL": 262, + "POSITION": 263, + "WEIGHTS_0": 264 + }, + "indices": 260, + "mode": 4, + "material": 52 + }, + { + "attributes": { + "JOINTS_0": 266, + "NORMAL": 267, + "POSITION": 268, + "WEIGHTS_0": 269 + }, + "indices": 265, + "mode": 4, + "material": 53 + }, + { + "attributes": { + "JOINTS_0": 271, + "NORMAL": 272, + "POSITION": 273, + "WEIGHTS_0": 274 + }, + "indices": 270, + "mode": 4, + "material": 54 + }, + { + "attributes": { + "JOINTS_0": 276, + "NORMAL": 277, + "POSITION": 278, + "WEIGHTS_0": 279 + }, + "indices": 275, + "mode": 4, + "material": 55 + }, + { + "attributes": { + "JOINTS_0": 281, + "NORMAL": 282, + "POSITION": 283, + "WEIGHTS_0": 284 + }, + "indices": 280, + "mode": 4, + "material": 56 + }, + { + "attributes": { + "JOINTS_0": 286, + "NORMAL": 287, + "POSITION": 288, + "WEIGHTS_0": 289 + }, + "indices": 285, + "mode": 4, + "material": 57 + }, + { + "attributes": { + "JOINTS_0": 291, + "NORMAL": 292, + "POSITION": 293, + "WEIGHTS_0": 294 + }, + "indices": 290, + "mode": 4, + "material": 58 + } + ], + "name": "Figure_2_geometry" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 2, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 2, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 7, + "path": "scale" + } + } + ], + "samplers": [ + { + "input": 295, + "interpolation": "LINEAR", + "output": 296 + }, + { + "input": 295, + "interpolation": "LINEAR", + "output": 297 + }, + { + "input": 295, + "interpolation": "LINEAR", + "output": 298 + }, + { + "input": 299, + "interpolation": "LINEAR", + "output": 300 + }, + { + "input": 299, + "interpolation": "LINEAR", + "output": 301 + }, + { + "input": 299, + "interpolation": "LINEAR", + "output": 302 + }, + { + "input": 303, + "interpolation": "LINEAR", + "output": 304 + }, + { + "input": 303, + "interpolation": "LINEAR", + "output": 305 + }, + { + "input": 303, + "interpolation": "LINEAR", + "output": 306 + }, + { + "input": 307, + "interpolation": "LINEAR", + "output": 308 + }, + { + "input": 307, + "interpolation": "LINEAR", + "output": 309 + }, + { + "input": 307, + "interpolation": "LINEAR", + "output": 310 + }, + { + "input": 311, + "interpolation": "LINEAR", + "output": 312 + }, + { + "input": 311, + "interpolation": "LINEAR", + "output": 313 + }, + { + "input": 311, + "interpolation": "LINEAR", + "output": 314 + }, + { + "input": 315, + "interpolation": "LINEAR", + "output": 316 + }, + { + "input": 315, + "interpolation": "LINEAR", + "output": 317 + }, + { + "input": 315, + "interpolation": "LINEAR", + "output": 318 + }, + { + "input": 319, + "interpolation": "LINEAR", + "output": 320 + }, + { + "input": 319, + "interpolation": "LINEAR", + "output": 321 + }, + { + "input": 319, + "interpolation": "LINEAR", + "output": 322 + }, + { + "input": 323, + "interpolation": "LINEAR", + "output": 324 + }, + { + "input": 323, + "interpolation": "LINEAR", + "output": 325 + }, + { + "input": 323, + "interpolation": "LINEAR", + "output": 326 + }, + { + "input": 327, + "interpolation": "LINEAR", + "output": 328 + }, + { + "input": 327, + "interpolation": "LINEAR", + "output": 329 + }, + { + "input": 327, + "interpolation": "LINEAR", + "output": 330 + }, + { + "input": 331, + "interpolation": "LINEAR", + "output": 332 + }, + { + "input": 331, + "interpolation": "LINEAR", + "output": 333 + }, + { + "input": 331, + "interpolation": "LINEAR", + "output": 334 + }, + { + "input": 335, + "interpolation": "LINEAR", + "output": 336 + }, + { + "input": 335, + "interpolation": "LINEAR", + "output": 337 + }, + { + "input": 335, + "interpolation": "LINEAR", + "output": 338 + }, + { + "input": 339, + "interpolation": "LINEAR", + "output": 340 + }, + { + "input": 339, + "interpolation": "LINEAR", + "output": 341 + }, + { + "input": 339, + "interpolation": "LINEAR", + "output": 342 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 344 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 345 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 346 + }, + { + "input": 347, + "interpolation": "LINEAR", + "output": 348 + }, + { + "input": 347, + "interpolation": "LINEAR", + "output": 349 + }, + { + "input": 347, + "interpolation": "LINEAR", + "output": 350 + }, + { + "input": 351, + "interpolation": "LINEAR", + "output": 352 + }, + { + "input": 351, + "interpolation": "LINEAR", + "output": 353 + }, + { + "input": 351, + "interpolation": "LINEAR", + "output": 354 + }, + { + "input": 355, + "interpolation": "LINEAR", + "output": 356 + }, + { + "input": 355, + "interpolation": "LINEAR", + "output": 357 + }, + { + "input": 355, + "interpolation": "LINEAR", + "output": 358 + }, + { + "input": 359, + "interpolation": "LINEAR", + "output": 360 + }, + { + "input": 359, + "interpolation": "LINEAR", + "output": 361 + }, + { + "input": 359, + "interpolation": "LINEAR", + "output": 362 + }, + { + "input": 363, + "interpolation": "LINEAR", + "output": 364 + }, + { + "input": 363, + "interpolation": "LINEAR", + "output": 365 + }, + { + "input": 363, + "interpolation": "LINEAR", + "output": 366 + }, + { + "input": 367, + "interpolation": "LINEAR", + "output": 368 + }, + { + "input": 367, + "interpolation": "LINEAR", + "output": 369 + }, + { + "input": 367, + "interpolation": "LINEAR", + "output": 370 + } + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 371, + "skeleton": 2, + "joints": [ + 3, + 12, + 20, + 18, + 19, + 13, + 14, + 17, + 16, + 15, + 8, + 9, + 10, + 11, + 4, + 5, + 6, + 7 + ], + "name": "Poser_scene_root" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 2778, + "max": [ + 537 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 538, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 538, + "max": [ + 0.999993622303009, + 0.9999939203262328, + 0.999158501625061 + ], + "min": [ + -0.9999936819076538, + -0.9994093775749208, + -0.9991332292556764 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 6456, + "componentType": 5126, + "count": 538, + "max": [ + 0.27433979511260989, + -0.03274767845869064, + 1.4563469886779786 + ], + "min": [ + -0.27433979511260989, + -0.15003690123558045, + 1.0480209589004517 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 538, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 5556, + "componentType": 5123, + "count": 5928, + "max": [ + 1018 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 4304, + "componentType": 5123, + "count": 1019, + "max": [ + 9, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 12912, + "componentType": 5126, + "count": 1019, + "max": [ + 0.9997758865356444, + 1.0, + 0.9999942779541016 + ], + "min": [ + -0.998135507106781, + -1.0, + -0.9999982118606569 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 25140, + "componentType": 5126, + "count": 1019, + "max": [ + 1.0657269954681397, + 0.18310239911079408, + 1.477118968963623 + ], + "min": [ + -0.6080120205879211, + -0.06099873036146164, + 1.2819770574569705 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 8608, + "componentType": 5126, + "count": 1019, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 17412, + "componentType": 5123, + "count": 1134, + "max": [ + 194 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 12456, + "componentType": 5123, + "count": 195, + "max": [ + 9, + 0, + 0, + 0 + ], + "min": [ + 7, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 37368, + "componentType": 5126, + "count": 195, + "max": [ + 0.9890540838241576, + 0.9962993264198304, + 0.9998664855957032 + ], + "min": [ + -0.9995861053466796, + -0.999724507331848, + -0.9998739957809448 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 39708, + "componentType": 5126, + "count": 195, + "max": [ + 1.1625219583511353, + 0.07000333070755005, + 1.4373669624328614 + ], + "min": [ + 1.05805504322052, + -0.0497577115893364, + 1.3069430589675904 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 24912, + "componentType": 5126, + "count": 195, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 19680, + "componentType": 5123, + "count": 6240, + "max": [ + 1063 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 14016, + "componentType": 5123, + "count": 1064, + "max": [ + 17, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 42048, + "componentType": 5126, + "count": 1064, + "max": [ + 0.9828354716300964, + 0.9910786151885986, + 0.9789444208145142 + ], + "min": [ + -0.9828354716300964, + -0.9889308214187622, + -0.9869906902313232 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 54816, + "componentType": 5126, + "count": 1064, + "max": [ + 0.29972508549690249, + 0.15624010562896729, + 1.0176169872283936 + ], + "min": [ + -0.29972508549690249, + -0.18406230211257938, + -0.0005402960232459009 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 28032, + "componentType": 5126, + "count": 1064, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 32160, + "componentType": 5123, + "count": 312, + "max": [ + 55 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 22528, + "componentType": 5123, + "count": 56, + "max": [ + 17, + 0, + 0, + 0 + ], + "min": [ + 13, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 67584, + "componentType": 5126, + "count": 56, + "max": [ + 0.9857615232467653, + 0.8871999979019165, + 0.9572769999504088 + ], + "min": [ + -0.9857615232467653, + -0.9230722188949584, + -0.8607563972473145 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 68256, + "componentType": 5126, + "count": 56, + "max": [ + 0.13851790130138398, + -0.009335458278656006, + 0.0813794732093811 + ], + "min": [ + -0.13851790130138398, + -0.1495622992515564, + 0.009157179854810238 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 45056, + "componentType": 5126, + "count": 56, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 32784, + "componentType": 5123, + "count": 1512, + "max": [ + 255 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 22976, + "componentType": 5123, + "count": 256, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 68928, + "componentType": 5126, + "count": 256, + "max": [ + 0.9439724087715148, + 0.8987488150596619, + 0.8993107080459595 + ], + "min": [ + -0.9439724087715148, + -0.8987488150596619, + -0.8987488150596619 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 72000, + "componentType": 5126, + "count": 256, + "max": [ + 0.19411979615688325, + 0.11213520169258118, + 0.590918779373169 + ], + "min": [ + -0.19411979615688325, + -0.04480987042188645, + 0.43397119641304018 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 45952, + "componentType": 5126, + "count": 256, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 35808, + "componentType": 5123, + "count": 4740, + "max": [ + 801 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 25024, + "componentType": 5123, + "count": 802, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 75072, + "componentType": 5126, + "count": 802, + "max": [ + 1.0, + 0.9724298715591432, + 1.0 + ], + "min": [ + -1.0, + -0.9724298715591432, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 84696, + "componentType": 5126, + "count": 802, + "max": [ + 0.2310234010219574, + 0.08274096250534058, + 0.9715561270713806 + ], + "min": [ + -0.2310234010219574, + -0.08323144167661667, + 0.7902671098709106 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 50048, + "componentType": 5126, + "count": 802, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 45288, + "componentType": 5123, + "count": 912, + "max": [ + 255 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 31440, + "componentType": 5123, + "count": 256, + "max": [ + 16, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 94320, + "componentType": 5126, + "count": 256, + "max": [ + 0.9600872993469238, + 0.9742028713226318, + 0.8843736052513123 + ], + "min": [ + -0.9600872993469238, + -0.9742028713226318, + -0.8074885010719299 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 97392, + "componentType": 5126, + "count": 256, + "max": [ + 0.21291349828243257, + 0.13475050032138825, + 0.9194201231002808 + ], + "min": [ + -0.21291349828243257, + -0.07738721370697022, + 0.028027350082993509 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 62880, + "componentType": 5126, + "count": 256, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 47112, + "componentType": 5123, + "count": 216, + "max": [ + 39 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 33488, + "componentType": 5123, + "count": 40, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 100464, + "componentType": 5126, + "count": 40, + "max": [ + 0.8866037130355835, + 0.9289718866348268, + 0.8427919745445252 + ], + "min": [ + -0.8866037130355835, + -0.8696268200874329, + -0.886997401714325 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 100944, + "componentType": 5126, + "count": 40, + "max": [ + 0.2023569941520691, + 0.0949479267001152, + 0.7937266230583191 + ], + "min": [ + -0.2023569941520691, + -0.09374946355819702, + 0.5446745157241821 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 66976, + "componentType": 5126, + "count": 40, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 47544, + "componentType": 5123, + "count": 2136, + "max": [ + 359 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 33808, + "componentType": 5123, + "count": 360, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 101424, + "componentType": 5126, + "count": 360, + "max": [ + 0.9960393905639648, + 0.9997833967208862, + 0.9787524938583374 + ], + "min": [ + -0.9960393905639648, + -0.998805820941925, + -0.9636300802230836 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 105744, + "componentType": 5126, + "count": 360, + "max": [ + 0.211068794131279, + -0.008979082107543946, + 0.8112161159515381 + ], + "min": [ + -0.211068794131279, + -0.13384099304676057, + 0.5610147714614868 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 67616, + "componentType": 5126, + "count": 360, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 51816, + "componentType": 5123, + "count": 3696, + "max": [ + 751 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 36688, + "componentType": 5123, + "count": 752, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 110064, + "componentType": 5126, + "count": 752, + "max": [ + 0.9693763852119446, + 0.8814008235931397, + 0.9578943848609924 + ], + "min": [ + -0.9693763852119446, + -0.8814032077789307, + -0.9575083255767822 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 119088, + "componentType": 5126, + "count": 752, + "max": [ + 0.23553599417209626, + 0.11558250337839128, + 0.9121201038360596 + ], + "min": [ + -0.23553599417209626, + -0.07996975630521774, + 0.7004975080490112 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 73376, + "componentType": 5126, + "count": 752, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 59208, + "componentType": 5123, + "count": 2286, + "max": [ + 844 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 42704, + "componentType": 5123, + "count": 845, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 128112, + "componentType": 5126, + "count": 845, + "max": [ + 0.9470654129981996, + 0.9950131773948668, + 0.8914204239845276 + ], + "min": [ + -0.9470654129981996, + -1.0, + -0.8969339728355408 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 138252, + "componentType": 5126, + "count": 845, + "max": [ + 0.9558497071266174, + 0.11391989886760712, + 1.7040820121765137 + ], + "min": [ + -0.48123040795326235, + -0.15868650376796726, + 0.8420313000679016 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 85408, + "componentType": 5126, + "count": 845, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 63780, + "componentType": 5123, + "count": 2160, + "max": [ + 383 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 49464, + "componentType": 5123, + "count": 384, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 148392, + "componentType": 5126, + "count": 384, + "max": [ + 0.9981030225753784, + 0.9971495270729064, + 0.9903702139854432 + ], + "min": [ + -0.9981030225753784, + -0.996716320514679, + -0.988967776298523 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 153000, + "componentType": 5126, + "count": 384, + "max": [ + 0.23765680193901066, + 0.07498443126678467, + 0.66653972864151 + ], + "min": [ + -0.23765680193901066, + 0.009939253330230712, + 0.4954768121242523 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 98928, + "componentType": 5126, + "count": 384, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 68100, + "componentType": 5123, + "count": 2400, + "max": [ + 415 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 52536, + "componentType": 5123, + "count": 416, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 157608, + "componentType": 5126, + "count": 416, + "max": [ + 0.9137194156646729, + 0.9571294784545898, + 0.9627177715301514 + ], + "min": [ + -0.9137194156646729, + -0.9602304100990297, + -0.956984519958496 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 162600, + "componentType": 5126, + "count": 416, + "max": [ + 0.22231070697307588, + 0.1638278067111969, + 0.8088477253913879 + ], + "min": [ + -0.22231070697307588, + -0.023381469771265985, + 0.26134440302848818 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 105072, + "componentType": 5126, + "count": 416, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 72900, + "componentType": 5123, + "count": 192, + "max": [ + 39 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 55864, + "componentType": 5123, + "count": 40, + "max": [ + 14, + 0, + 0, + 0 + ], + "min": [ + 10, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 167592, + "componentType": 5126, + "count": 40, + "max": [ + 0.5957040786743164, + 0.8023154735565186, + 0.7747489809989929 + ], + "min": [ + -0.5957040786743164, + -0.763891875743866, + -0.8032039999961853 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 168072, + "componentType": 5126, + "count": 40, + "max": [ + 0.20008769631385804, + 0.06951904296875, + 0.6722120046615601 + ], + "min": [ + -0.20008769631385804, + -0.0024563069455325605, + 0.4808647036552429 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 111728, + "componentType": 5126, + "count": 40, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 73284, + "componentType": 5123, + "count": 2772, + "max": [ + 451 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 56184, + "componentType": 5123, + "count": 452, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 11, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 168552, + "componentType": 5126, + "count": 452, + "max": [ + 0.8853335976600647, + 0.9719336032867432, + 0.9429377913475036 + ], + "min": [ + -0.8853335976600647, + -0.9943298101425172, + -0.9822759032249452 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 173976, + "componentType": 5126, + "count": 452, + "max": [ + 0.2163134962320328, + -0.05576251819729805, + 0.5708295106887817 + ], + "min": [ + -0.2163134962320328, + -0.10501089692115784, + 0.3875563144683838 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 112368, + "componentType": 5126, + "count": 452, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 78828, + "componentType": 5123, + "count": 312, + "max": [ + 55 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 59800, + "componentType": 5123, + "count": 56, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 11, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 179400, + "componentType": 5126, + "count": 56, + "max": [ + 0.957885205745697, + 0.91736102104187, + 0.9233493208885192 + ], + "min": [ + -0.957885205745697, + -0.8525092005729675, + -0.7849010229110718 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 180072, + "componentType": 5126, + "count": 56, + "max": [ + 0.1761814057826996, + 0.15912020206451417, + 0.3996171951293946 + ], + "min": [ + -0.1761814057826996, + 0.010912589728832244, + 0.23135539889335633 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 119600, + "componentType": 5126, + "count": 56, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 79452, + "componentType": 5123, + "count": 2280, + "max": [ + 383 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 60248, + "componentType": 5123, + "count": 384, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 11, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 180744, + "componentType": 5126, + "count": 384, + "max": [ + 0.9248775243759156, + 0.9958348274230956, + 0.9056941866874696 + ], + "min": [ + -0.9248775243759156, + -0.9664828181266784, + -0.9603514075279236 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 185352, + "componentType": 5126, + "count": 384, + "max": [ + 0.1790281981229782, + 0.11717420071363448, + 0.21458619832992557 + ], + "min": [ + -0.1790281981229782, + 0.01100200042128563, + 0.09651278704404833 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 120496, + "componentType": 5126, + "count": 384, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 84012, + "componentType": 5123, + "count": 1680, + "max": [ + 283 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 63320, + "componentType": 5123, + "count": 284, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 11, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 189960, + "componentType": 5126, + "count": 284, + "max": [ + 1.0, + 0.9999998807907105, + 0.9999998807907105 + ], + "min": [ + -1.0, + -0.9999998807907105, + -0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 193368, + "componentType": 5126, + "count": 284, + "max": [ + 0.14629970490932465, + 0.11732079833745957, + 0.18243469297885896 + ], + "min": [ + -0.14629970490932465, + -0.0004646930028684438, + 0.06464897841215134 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 126640, + "componentType": 5126, + "count": 284, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 87372, + "componentType": 5123, + "count": 1080, + "max": [ + 183 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 65592, + "componentType": 5123, + "count": 184, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 11, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 196776, + "componentType": 5126, + "count": 184, + "max": [ + 0.994773805141449, + 0.8861510753631592, + 0.8839060068130493 + ], + "min": [ + -0.994773805141449, + -0.946777880191803, + -0.9507442116737366 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 198984, + "componentType": 5126, + "count": 184, + "max": [ + 0.19786760210990909, + 0.08225148171186447, + 0.4101054072380066 + ], + "min": [ + -0.19786760210990909, + -0.04774051159620285, + 0.26395460963249209 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 131184, + "componentType": 5126, + "count": 184, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 89532, + "componentType": 5123, + "count": 1296, + "max": [ + 205 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 67064, + "componentType": 5123, + "count": 206, + "max": [ + 15, + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 201192, + "componentType": 5126, + "count": 206, + "max": [ + 0.9693763852119446, + 0.9059634804725648, + 0.957452118396759 + ], + "min": [ + -0.9693763852119446, + -0.9059634804725648, + -0.9059612154960632 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 203664, + "componentType": 5126, + "count": 206, + "max": [ + 0.1905521005392075, + 0.11099349707365036, + 1.0104299783706666 + ], + "min": [ + -0.1905521005392075, + -0.15254150331020356, + 0.3594444990158081 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 134128, + "componentType": 5126, + "count": 206, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 92124, + "componentType": 5123, + "count": 3456, + "max": [ + 605 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 68712, + "componentType": 5123, + "count": 606, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 206136, + "componentType": 5126, + "count": 606, + "max": [ + 0.9994738101959229, + 1.0, + 0.999590277671814 + ], + "min": [ + -0.9994738101959229, + -1.0, + -0.9999163150787354 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 213408, + "componentType": 5126, + "count": 606, + "max": [ + 0.11763300001621248, + 0.12999069690704349, + 1.507748007774353 + ], + "min": [ + -0.11763300001621248, + -0.15254150331020356, + 0.788148820400238 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 137424, + "componentType": 5126, + "count": 606, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 99036, + "componentType": 5123, + "count": 6996, + "max": [ + 1213 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 73560, + "componentType": 5123, + "count": 1214, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 220680, + "componentType": 5126, + "count": 1214, + "max": [ + 0.9999105930328368, + 0.9989426136016846, + 0.9997345209121704 + ], + "min": [ + -0.9999105930328368, + -0.9954121112823486, + -0.9995654225349426 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 235248, + "componentType": 5126, + "count": 1214, + "max": [ + 0.3850386142730713, + 0.17256119847297669, + 1.5223779678344729 + ], + "min": [ + -0.7090775966644287, + -0.19458280503749848, + 0.8746052980422974 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 147120, + "componentType": 5126, + "count": 1214, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 113028, + "componentType": 5123, + "count": 9453, + "max": [ + 1693 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 83272, + "componentType": 5123, + "count": 1694, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 249816, + "componentType": 5126, + "count": 1694, + "max": [ + 0.997044324874878, + 0.9997971057891846, + 0.9955812096595764 + ], + "min": [ + -0.997044324874878, + -0.9997332096099854, + -0.995496928691864 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 270144, + "componentType": 5126, + "count": 1694, + "max": [ + 0.39696240425109866, + 0.1524769961833954, + 1.5549310445785525 + ], + "min": [ + -0.3173973858356476, + -0.25572049617767336, + 0.8218048214912415 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 166544, + "componentType": 5126, + "count": 1694, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 131934, + "componentType": 5123, + "count": 7077, + "max": [ + 1235 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 96824, + "componentType": 5123, + "count": 1236, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 290472, + "componentType": 5126, + "count": 1236, + "max": [ + 0.9987723231315612, + 0.991940975189209, + 0.9963619112968444 + ], + "min": [ + -0.9987723231315612, + -0.99470192193985, + -0.9995126128196716 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 305304, + "componentType": 5126, + "count": 1236, + "max": [ + 0.4361900985240937, + 0.18784199655056, + 1.624858021736145 + ], + "min": [ + -0.4361900985240937, + -0.0925891324877739, + 1.1335359811782838 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 193648, + "componentType": 5126, + "count": 1236, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 146088, + "componentType": 5123, + "count": 19842, + "max": [ + 3349 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 106712, + "componentType": 5123, + "count": 3350, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 320136, + "componentType": 5126, + "count": 3350, + "max": [ + 0.99986732006073, + 0.9998542070388794, + 0.993185579776764 + ], + "min": [ + -0.99986732006073, + -0.9979618191719056, + -0.9952840805053712 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 360336, + "componentType": 5126, + "count": 3350, + "max": [ + 0.20052820444107057, + 0.13036410510540009, + 1.5314489603042605 + ], + "min": [ + -0.20052820444107057, + -0.06539397686719895, + 1.017976999282837 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 213424, + "componentType": 5126, + "count": 3350, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 185772, + "componentType": 5123, + "count": 8064, + "max": [ + 1353 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 133512, + "componentType": 5123, + "count": 1354, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 400536, + "componentType": 5126, + "count": 1354, + "max": [ + 0.9974765777587892, + 0.9980245232582092, + 0.971380889415741 + ], + "min": [ + -0.9974765777587892, + -0.9980245232582092, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 416784, + "componentType": 5126, + "count": 1354, + "max": [ + 0.165345698595047, + 0.145689994096756, + 1.5680040121078492 + ], + "min": [ + -0.07679343223571778, + -0.06932251900434494, + 1.478713035583496 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 267024, + "componentType": 5126, + "count": 1354, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 201900, + "componentType": 5123, + "count": 5736, + "max": [ + 1082 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 144344, + "componentType": 5123, + "count": 1083, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 433032, + "componentType": 5126, + "count": 1083, + "max": [ + 0.9896860122680664, + 0.9514285922050476, + 0.9746636152267456 + ], + "min": [ + -0.9896860122680664, + -0.951424479484558, + -0.9957829117774965 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 446028, + "componentType": 5126, + "count": 1083, + "max": [ + 0.4518538117408753, + 0.15092650055885316, + 1.5663119554519654 + ], + "min": [ + -0.44873571395874026, + -0.03955334052443504, + 1.235440015792847 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 288688, + "componentType": 5126, + "count": 1083, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 213372, + "componentType": 5123, + "count": 3318, + "max": [ + 760 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 153008, + "componentType": 5123, + "count": 761, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 459024, + "componentType": 5126, + "count": 761, + "max": [ + 0.972135603427887, + 0.9999951124191284, + 0.999996781349182 + ], + "min": [ + -0.972135603427887, + -0.9999951124191284, + -0.999996781349182 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 468156, + "componentType": 5126, + "count": 761, + "max": [ + 0.9396100044250488, + 0.14587870240211488, + 1.5722160339355469 + ], + "min": [ + -0.7408316135406494, + -0.03310345858335495, + 1.2442729473114014 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 306016, + "componentType": 5126, + "count": 761, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 220008, + "componentType": 5123, + "count": 2928, + "max": [ + 660 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 159096, + "componentType": 5123, + "count": 661, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 477288, + "componentType": 5126, + "count": 661, + "max": [ + 0.9413095712661744, + 0.8966817259788513, + 0.941277027130127 + ], + "min": [ + -0.9413095712661744, + -0.8911949992179871, + -0.9413095712661744 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 485220, + "componentType": 5126, + "count": 661, + "max": [ + 0.4716292023658753, + 0.20401230454444889, + 1.5722160339355469 + ], + "min": [ + -0.4716292023658753, + -0.010853170417249205, + 1.3943560123443604 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 318192, + "componentType": 5126, + "count": 661, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 225864, + "componentType": 5123, + "count": 1584, + "max": [ + 439 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 164384, + "componentType": 5123, + "count": 440, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 493152, + "componentType": 5126, + "count": 440, + "max": [ + 1.0, + 0.948270618915558, + 1.0 + ], + "min": [ + -1.0, + -0.9523791074752808, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 498432, + "componentType": 5126, + "count": 440, + "max": [ + 0.05540227144956589, + 0.3284950852394104, + 1.7050449848175049 + ], + "min": [ + -0.05540227144956589, + -0.0619271881878376, + 1.0184400081634522 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 328768, + "componentType": 5126, + "count": 440, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 229032, + "componentType": 5123, + "count": 7209, + "max": [ + 1262 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 167904, + "componentType": 5123, + "count": 1263, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 503712, + "componentType": 5126, + "count": 1263, + "max": [ + 0.9470654129981996, + 0.9975249767303468, + 0.998879075050354 + ], + "min": [ + -0.9470654129981996, + -0.9992849230766296, + -0.9998152256011964 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 518868, + "componentType": 5126, + "count": 1263, + "max": [ + 0.15658919513225556, + 0.3413881063461304, + 1.7174659967422486 + ], + "min": [ + -0.08176165074110031, + -0.07656610012054444, + 1.005632996559143 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 335808, + "componentType": 5126, + "count": 1263, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 243450, + "componentType": 5123, + "count": 3531, + "max": [ + 597 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 178008, + "componentType": 5123, + "count": 598, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 534024, + "componentType": 5126, + "count": 598, + "max": [ + 0.995135486125946, + 0.999998927116394, + 0.9990856051445008 + ], + "min": [ + -0.9951385855674744, + -0.9292241930961608, + -0.9992175102233888 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 541200, + "componentType": 5126, + "count": 598, + "max": [ + 0.248561292886734, + 0.1261782944202423, + 1.447119951248169 + ], + "min": [ + -0.248561292886734, + -0.05304466933012009, + 1.144036054611206 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 356016, + "componentType": 5126, + "count": 598, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 250512, + "componentType": 5123, + "count": 1344, + "max": [ + 246 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 182792, + "componentType": 5123, + "count": 247, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 548376, + "componentType": 5126, + "count": 247, + "max": [ + 0.9998924136161804, + 0.999998927116394, + 0.8407031893730164 + ], + "min": [ + -0.9998924136161804, + -0.999998927116394, + -0.8353595733642578 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 551340, + "componentType": 5126, + "count": 247, + "max": [ + 0.1736883968114853, + 0.1293901950120926, + 1.4685169458389285 + ], + "min": [ + -0.1736883968114853, + 0.04755692929029465, + 1.20933997631073 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 365584, + "componentType": 5126, + "count": 247, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 253200, + "componentType": 5123, + "count": 5406, + "max": [ + 1198 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 184768, + "componentType": 5123, + "count": 1199, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 554304, + "componentType": 5126, + "count": 1199, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + -1.0, + -1.0, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 568692, + "componentType": 5126, + "count": 1199, + "max": [ + 0.7159690856933594, + 0.20757029950618745, + 1.5593960285186768 + ], + "min": [ + -1.0704269409179688, + -0.12992410361766816, + 1.0169960260391236 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 369536, + "componentType": 5126, + "count": 1199, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 264012, + "componentType": 5123, + "count": 1098, + "max": [ + 286 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 194360, + "componentType": 5123, + "count": 287, + "max": [ + 1, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 583080, + "componentType": 5126, + "count": 287, + "max": [ + 0.966027021408081, + 0.7357422709465027, + 0.97013521194458 + ], + "min": [ + -0.966027021408081, + -0.9892848134040833, + -0.9731298089027404 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 586524, + "componentType": 5126, + "count": 287, + "max": [ + 0.16099749505519868, + 0.12307389825582504, + 1.2675410509109498 + ], + "min": [ + -0.16099749505519868, + -0.12992410361766816, + 1.010509967803955 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 388720, + "componentType": 5126, + "count": 287, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 266208, + "componentType": 5123, + "count": 954, + "max": [ + 245 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 196656, + "componentType": 5123, + "count": 246, + "max": [ + 3, + 0, + 0, + 0 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 589968, + "componentType": 5126, + "count": 246, + "max": [ + 0.9659118056297302, + 0.9892848134040833, + 0.9731361269950868 + ], + "min": [ + -0.9659118056297302, + -0.9892848134040833, + -0.9731298089027404 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 592920, + "componentType": 5126, + "count": 246, + "max": [ + 0.2753584086894989, + 0.16562490165233613, + 1.391832947731018 + ], + "min": [ + -0.5011065006256104, + -0.07527010887861252, + 1.0902940034866334 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 393312, + "componentType": 5126, + "count": 246, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 268116, + "componentType": 5123, + "count": 1842, + "max": [ + 321 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 198624, + "componentType": 5123, + "count": 322, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 595872, + "componentType": 5126, + "count": 322, + "max": [ + 0.9493690729141237, + 0.9867743849754334, + 0.9510694146156312 + ], + "min": [ + -0.9492442011833192, + -0.9867743849754334, + -0.9572867155075072 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 599736, + "componentType": 5126, + "count": 322, + "max": [ + 0.9843820929527284, + 0.1260865032672882, + 1.4702060222625733 + ], + "min": [ + -0.567354679107666, + -0.039101891219615939, + 1.28860604763031 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 397248, + "componentType": 5126, + "count": 322, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 271800, + "componentType": 5123, + "count": 1260, + "max": [ + 241 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 201200, + "componentType": 5123, + "count": 242, + "max": [ + 5, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 603600, + "componentType": 5126, + "count": 242, + "max": [ + 0.997563898563385, + 0.9884750843048096, + 0.9362738132476808 + ], + "min": [ + -0.9979519248008728, + -0.9884750843048096, + -0.8944498896598816 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 606504, + "componentType": 5126, + "count": 242, + "max": [ + 0.48613470792770388, + 0.1001529023051262, + 1.5124479532241822 + ], + "min": [ + -0.5208178758621216, + -0.02368699945509434, + 1.3411530256271365 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 402400, + "componentType": 5126, + "count": 242, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 274320, + "componentType": 5123, + "count": 471, + "max": [ + 112 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 203136, + "componentType": 5123, + "count": 113, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 609408, + "componentType": 5126, + "count": 113, + "max": [ + 0.8414818048477173, + 0.8090065717697144, + 0.8426756262779236 + ], + "min": [ + -0.8380299210548401, + -0.8201435208320618, + -0.775584876537323 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 610764, + "componentType": 5126, + "count": 113, + "max": [ + 0.9788712859153748, + 0.1334728002548218, + 1.470574975013733 + ], + "min": [ + -0.6134709119796753, + -0.007822394371032715, + 1.317214012145996 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 406272, + "componentType": 5126, + "count": 113, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 275262, + "componentType": 5123, + "count": 5925, + "max": [ + 1039 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 204040, + "componentType": 5123, + "count": 1040, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 612120, + "componentType": 5126, + "count": 1040, + "max": [ + 0.9999998211860656, + 1.0, + 0.9999998211860656 + ], + "min": [ + -0.999999701976776, + -1.0, + -0.9999998211860656 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 624600, + "componentType": 5126, + "count": 1040, + "max": [ + 1.058205008506775, + 0.09346406906843186, + 1.4305419921875 + ], + "min": [ + -0.6562740206718445, + -0.05892974138259888, + 1.3109229803085328 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 408080, + "componentType": 5126, + "count": 1040, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 287112, + "componentType": 5123, + "count": 1482, + "max": [ + 325 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 212360, + "componentType": 5123, + "count": 326, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 637080, + "componentType": 5126, + "count": 326, + "max": [ + 0.9999998807907105, + 0.9986323714256288, + 0.9999998211860656 + ], + "min": [ + -0.9999995231628418, + -0.9986323714256288, + -0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 640992, + "componentType": 5126, + "count": 326, + "max": [ + 0.9615707993507384, + 0.15384900569915772, + 1.4929410219192505 + ], + "min": [ + -0.5483198761940002, + -0.066353440284729, + 1.3013219833374024 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 424720, + "componentType": 5126, + "count": 326, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 290076, + "componentType": 5123, + "count": 8688, + "max": [ + 1561 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 214968, + "componentType": 5123, + "count": 1562, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 3, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 644904, + "componentType": 5126, + "count": 1562, + "max": [ + 0.9996929168701172, + 1.0, + 0.998135507106781 + ], + "min": [ + -0.9996951818466188, + -1.0, + -0.998135507106781 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 663648, + "componentType": 5126, + "count": 1562, + "max": [ + 0.9054449796676636, + 0.11726199835538864, + 1.4562920331954957 + ], + "min": [ + -0.5032492280006409, + -0.04048173874616623, + 1.2914799451828004 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 429936, + "componentType": 5126, + "count": 1562, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 307452, + "componentType": 5123, + "count": 768, + "max": [ + 125 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 227464, + "componentType": 5123, + "count": 126, + "max": [ + 6, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 682392, + "componentType": 5126, + "count": 126, + "max": [ + 0.9429373741149902, + 1.0, + 0.9134336709976196 + ], + "min": [ + -0.8100183010101318, + -0.8090602159500122, + -0.9120928049087524 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 683904, + "componentType": 5126, + "count": 126, + "max": [ + 0.9176735877990724, + 0.08572155237197876, + 1.4267810583114625 + ], + "min": [ + -0.6102675199508667, + -0.013260840438306332, + 1.2632529735565186 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 454928, + "componentType": 5126, + "count": 126, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 308988, + "componentType": 5123, + "count": 294, + "max": [ + 76 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 228472, + "componentType": 5123, + "count": 77, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 685416, + "componentType": 5126, + "count": 77, + "max": [ + 0.9530711770057678, + 1.0, + 0.9004359245300293 + ], + "min": [ + -0.9791612029075624, + -0.9940124750137328, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 686340, + "componentType": 5126, + "count": 77, + "max": [ + -0.5946403741836548, + 0.15986140072345737, + 1.3914480209350589 + ], + "min": [ + -1.1321640014648438, + -0.0661965012550354, + 1.2588269710540772 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 456944, + "componentType": 5126, + "count": 77, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 309576, + "componentType": 5123, + "count": 2286, + "max": [ + 377 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 229088, + "componentType": 5123, + "count": 378, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 687264, + "componentType": 5126, + "count": 378, + "max": [ + 0.9702684283256532, + 0.9188218712806702, + 0.9276834726333618 + ], + "min": [ + -0.9520750045776368, + -0.9273015260696412, + -0.9261720180511476 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 691800, + "componentType": 5126, + "count": 378, + "max": [ + -0.7963600754737854, + 0.2099802941083908, + 1.4468669891357422 + ], + "min": [ + -1.1696269512176514, + -0.04968822002410889, + 1.3078479766845704 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 458176, + "componentType": 5126, + "count": 378, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 314148, + "componentType": 5123, + "count": 231, + "max": [ + 46 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 232112, + "componentType": 5123, + "count": 47, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 696336, + "componentType": 5126, + "count": 47, + "max": [ + 0.9702684283256532, + 0.932125210762024, + 0.9276834726333618 + ], + "min": [ + -0.9956300258636476, + -0.8618587255477905, + -0.9294881224632264 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 696900, + "componentType": 5126, + "count": 47, + "max": [ + -0.7963600754737854, + 0.21611559391021729, + 1.444216012954712 + ], + "min": [ + -1.1216360330581666, + 0.11564770340919496, + 1.3355180025100709 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 464224, + "componentType": 5126, + "count": 47, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 314610, + "componentType": 5123, + "count": 249, + "max": [ + 67 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 232488, + "componentType": 5123, + "count": 68, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 697464, + "componentType": 5126, + "count": 68, + "max": [ + 0.979600429534912, + 0.9092206954956056, + 0.9101498126983644 + ], + "min": [ + -0.9340090751647948, + -0.8941423892974854, + -0.9166219234466552 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 698280, + "componentType": 5126, + "count": 68, + "max": [ + -0.6847363114356995, + 0.1307168006896973, + 1.4486229419708253 + ], + "min": [ + -1.2521400451660157, + 0.006106494925916195, + 1.343232035636902 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 464976, + "componentType": 5126, + "count": 68, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 315108, + "componentType": 5123, + "count": 132, + "max": [ + 45 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 233032, + "componentType": 5123, + "count": 46, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 699096, + "componentType": 5126, + "count": 46, + "max": [ + 0.9443762898445128, + 0.7415639758110046, + 0.7409393787384033 + ], + "min": [ + -0.6767988204956055, + -0.932136595249176, + -0.7409104704856873 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 699648, + "componentType": 5126, + "count": 46, + "max": [ + -0.6847363114356995, + 0.07232499122619629, + 1.4092979431152344 + ], + "min": [ + -0.8665341734886169, + -0.02334159053862095, + 1.343232035636902 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 466064, + "componentType": 5126, + "count": 46, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 315372, + "componentType": 5123, + "count": 903, + "max": [ + 162 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 233400, + "componentType": 5123, + "count": 163, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 700200, + "componentType": 5126, + "count": 163, + "max": [ + 0.9525938034057616, + 0.936968207359314, + 0.9392325282096864 + ], + "min": [ + -0.9564805030822754, + -0.936968207359314, + -0.9374333024024965 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 702156, + "componentType": 5126, + "count": 163, + "max": [ + -0.7181820273399353, + 0.10177289694547652, + 1.535765051841736 + ], + "min": [ + -1.1228649616241456, + -0.02334159053862095, + 1.313663959503174 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 466800, + "componentType": 5126, + "count": 163, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 317178, + "componentType": 5123, + "count": 4497, + "max": [ + 773 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 234704, + "componentType": 5123, + "count": 774, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 704112, + "componentType": 5126, + "count": 774, + "max": [ + 0.9245858192443848, + 0.9239841103553772, + 0.9341924786567688 + ], + "min": [ + -0.9265702962875366, + -1.0, + -0.9213665127754213 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 713400, + "componentType": 5126, + "count": 774, + "max": [ + -0.8169127702713013, + 0.07056719064712525, + 1.547258973121643 + ], + "min": [ + -1.0789309740066529, + 0.005068360827863216, + 1.4588580131530762 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 469408, + "componentType": 5126, + "count": 774, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 326172, + "componentType": 5123, + "count": 480, + "max": [ + 163 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 240896, + "componentType": 5123, + "count": 164, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 4, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 722688, + "componentType": 5126, + "count": 164, + "max": [ + 0.999996781349182, + 1.0, + 0.00271618296392262 + ], + "min": [ + -0.9999970197677612, + -1.0, + -0.9999967217445374 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 724656, + "componentType": 5126, + "count": 164, + "max": [ + -0.8253496289253235, + 0.1354945003986359, + 1.5393890142440797 + ], + "min": [ + -1.0636450052261353, + 0.013495259918272496, + 1.3687069416046145 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 481792, + "componentType": 5126, + "count": 164, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 327132, + "componentType": 5123, + "count": 426, + "max": [ + 98 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 242208, + "componentType": 5123, + "count": 99, + "max": [ + 4, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 726624, + "componentType": 5126, + "count": 99, + "max": [ + 0.9999973177909852, + 0.7071207761764526, + 0.999997079372406 + ], + "min": [ + -0.9999967217445374, + -0.7071971297264099, + -0.99999737739563 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 727812, + "componentType": 5126, + "count": 99, + "max": [ + 0.06597024202346802, + 0.1354945003986359, + 1.6286100149154664 + ], + "min": [ + -1.0531970262527466, + -0.03212349861860275, + 1.3687069416046145 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 484416, + "componentType": 5126, + "count": 99, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 327984, + "componentType": 5123, + "count": 3156, + "max": [ + 587 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 243000, + "componentType": 5123, + "count": 588, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 729000, + "componentType": 5126, + "count": 588, + "max": [ + 1.0, + 0.9369086027145386, + 1.0 + ], + "min": [ + -1.0, + -0.998504877090454, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 736056, + "componentType": 5126, + "count": 588, + "max": [ + 0.09145306795835497, + 0.0839543268084526, + 1.7335740327835084 + ], + "min": [ + -0.0850815698504448, + -0.14359410107135774, + 1.5252469778060914 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 486000, + "componentType": 5126, + "count": 588, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 334296, + "componentType": 5123, + "count": 4626, + "max": [ + 815 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 247704, + "componentType": 5123, + "count": 816, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 743112, + "componentType": 5126, + "count": 816, + "max": [ + 0.9999879002571106, + 0.9998570084571838, + 0.9971525073051452 + ], + "min": [ + -0.9995089769363404, + -0.9996163249015808, + -0.9977017045021056 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 752904, + "componentType": 5126, + "count": 816, + "max": [ + 0.09229648113250733, + 0.11866279691457749, + 1.7180629968643189 + ], + "min": [ + -0.09001719206571579, + -0.1618012934923172, + 1.507802963256836 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 495408, + "componentType": 5126, + "count": 816, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 343548, + "componentType": 5123, + "count": 8925, + "max": [ + 1594 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 254232, + "componentType": 5123, + "count": 1595, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 762696, + "componentType": 5126, + "count": 1595, + "max": [ + 1.0, + 0.9877163767814636, + 1.0 + ], + "min": [ + -1.0, + -0.9851924777030944, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 781836, + "componentType": 5126, + "count": 1595, + "max": [ + 0.09438984841108322, + 0.08314906805753708, + 1.7181910276412964 + ], + "min": [ + -0.07793670147657395, + -0.14839039742946626, + 1.4954860210418702 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 508464, + "componentType": 5126, + "count": 1595, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 361398, + "componentType": 5123, + "count": 3069, + "max": [ + 526 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 266992, + "componentType": 5123, + "count": 527, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 800976, + "componentType": 5126, + "count": 527, + "max": [ + 0.9981486201286316, + 0.9988293051719666, + 0.9999873042106628 + ], + "min": [ + -0.9993758797645568, + -0.9997822046279908, + -0.9988669157028198 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 807300, + "componentType": 5126, + "count": 527, + "max": [ + 0.11259949952363968, + 0.06453794240951538, + 1.834357023239136 + ], + "min": [ + -0.06100171059370041, + -0.14748820662498478, + 1.6202499866485596 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 533984, + "componentType": 5126, + "count": 527, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 367536, + "componentType": 5123, + "count": 576, + "max": [ + 130 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 271208, + "componentType": 5123, + "count": 131, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 813624, + "componentType": 5126, + "count": 131, + "max": [ + 0.822087824344635, + -0.28944340348243716, + 0.9565367102622986 + ], + "min": [ + -0.822087824344635, + -0.968376100063324, + -0.822275698184967 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 815196, + "componentType": 5126, + "count": 131, + "max": [ + -0.02897715009748936, + -0.1409249007701874, + 1.652659058570862 + ], + "min": [ + -0.09302645176649094, + -0.15744230151176454, + 1.5877209901809693 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 542416, + "componentType": 5126, + "count": 131, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 368688, + "componentType": 5123, + "count": 654, + "max": [ + 126 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 272256, + "componentType": 5123, + "count": 127, + "max": [ + 2, + 0, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 816768, + "componentType": 5126, + "count": 127, + "max": [ + 0.9626206755638124, + 0.861091673374176, + 0.9625502228736876 + ], + "min": [ + -0.9626104831695556, + -0.5693606734275818, + -0.9629446864128112 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 818292, + "componentType": 5126, + "count": 127, + "max": [ + -0.02808832935988903, + -0.1387781947851181, + 1.652659058570862 + ], + "min": [ + -0.09391528367996216, + -0.1422078013420105, + 1.586830973625183 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 544512, + "componentType": 5126, + "count": 127, + "max": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "min": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 1309, + "max": [ + 0.0, + 0.0, + 0.0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 1309, + "max": [ + -0.7071066498756409, + 0.00048056046944111586, + 0.0004805605276487768, + -0.7071065306663513 + ], + "min": [ + -0.7071066498756409, + 0.00048056046944111586, + 0.0004805605276487768, + -0.7071065306663513 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 15708, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 5236, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 31416, + "componentType": 5126, + "count": 1309, + "max": [ + 0.0, + 0.9148268103599548, + 0.0 + ], + "min": [ + 0.0, + 0.9148268103599548, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 20944, + "componentType": 5126, + "count": 1309, + "max": [ + 0.22994717955589298, + 0.99963116645813, + 0.24422451853752137, + 0.999263107776642 + ], + "min": [ + -0.21882909536361698, + -0.9982082843780518, + -0.2034148871898651, + -0.9998023509979248 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 47124, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000009536743165, + 1.000000238418579, + 1.000001072883606 + ], + "min": [ + 0.9999996423721314, + 0.999999701976776, + 0.9999995231628418 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 10472, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 62832, + "componentType": 5126, + "count": 1309, + "max": [ + 2.980229965032777e-7, + 0.10747259855270386, + -0.023591449484229089 + ], + "min": [ + -2.38419005427204e-7, + 0.10747189819812776, + -0.023591849952936177 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 41888, + "componentType": 5126, + "count": 1309, + "max": [ + 0.08071999251842499, + 0.4829065203666687, + 0.23370222747325898, + -0.875069797039032 + ], + "min": [ + -0.2940012216567993, + -0.4205382764339447, + -0.3637002110481262, + -0.9999121427536012 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 78540, + "componentType": 5126, + "count": 1309, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999996423721314, + 0.9999995827674866, + 0.9999995827674866 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 15708, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 94248, + "componentType": 5126, + "count": 1309, + "max": [ + 2.682209867543861e-7, + 0.5242568254470825, + -0.015727100893855096 + ], + "min": [ + -2.682209867543861e-7, + 0.5242558121681213, + -0.015728000551462178 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 62832, + "componentType": 5126, + "count": 1309, + "max": [ + 0.46409425139427187, + 0.5351784229278565, + 0.1608593612909317, + -0.7751519680023193 + ], + "min": [ + -0.29117903113365176, + -0.5687214732170105, + -0.2105143815279007, + -0.9996994137763976 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 109956, + "componentType": 5126, + "count": 1309, + "max": [ + 1.000000238418579, + 1.0000003576278689, + 1.0000003576278689 + ], + "min": [ + 0.9999996423721314, + 0.9999997615814208, + 0.999999701976776 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 20944, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 125664, + "componentType": 5126, + "count": 1309, + "max": [ + -0.4194045960903168, + 0.3407667875289917, + -0.01310619991272688 + ], + "min": [ + -0.41940510272979739, + 0.3407663106918335, + -0.013106689788401129 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 83776, + "componentType": 5126, + "count": 1309, + "max": [ + 0.2547066807746887, + 0.3725568354129791, + -0.10216578841209412, + 0.02369661815464497 + ], + "min": [ + -0.7071006298065186, + -0.538973331451416, + -0.9599624872207642, + -0.9599091410636902 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 141372, + "componentType": 5126, + "count": 1309, + "max": [ + 1.000000238418579, + 1.0000003576278689, + 1.0000004768371585 + ], + "min": [ + 0.9999995231628418, + 0.9999993443489076, + 0.9999996423721314 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 26180, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 157080, + "componentType": 5126, + "count": 1309, + "max": [ + 4.842879874900064e-8, + 0.1918196976184845, + 0.0 + ], + "min": [ + 4.842879874900064e-8, + 0.1918196976184845, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 104720, + "componentType": 5126, + "count": 1309, + "max": [ + 0.10535851866006853, + 0.008949832059442997, + 0.9193236827850342, + 0.20621219277381898 + ], + "min": [ + -0.540235698223114, + -0.5158300995826721, + 0.5870917439460754, + -0.7372239232063294 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 172788, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000005960464478, + 1.0000003576278689, + 1.0000007152557374 + ], + "min": [ + 0.9999995231628418, + 0.999999463558197, + 0.999999701976776 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 31416, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 188496, + "componentType": 5126, + "count": 1309, + "max": [ + 0.4194050133228302, + 0.3407658040523529, + -0.013106119818985464 + ], + "min": [ + 0.4194045066833496, + 0.34076550602912905, + -0.013106719590723517 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 125664, + "componentType": 5126, + "count": 1309, + "max": [ + 0.16515624523162845, + 0.749225914478302, + 0.9655215740203856, + 0.0222143717110157 + ], + "min": [ + -0.7774010896682739, + -0.5799198746681213, + 0.1723635494709015, + -0.9414708614349364 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 204204, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000009536743165, + 1.000001072883606, + 1.0000008344650269 + ], + "min": [ + 1.0, + 1.000000238418579, + 0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 36652, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 219912, + "componentType": 5126, + "count": 1309, + "max": [ + 1.4901200273698124e-8, + 0.18572239577770234, + 0.0 + ], + "min": [ + 1.4901200273698124e-8, + 0.18572239577770234, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 146608, + "componentType": 5126, + "count": 1309, + "max": [ + 0.1826249808073044, + 0.6476022005081177, + -0.6235807538032532, + 0.1337534636259079 + ], + "min": [ + -0.500301718711853, + -0.03818349167704582, + -0.8916640877723694, + -0.7264519929885864 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 235620, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000003576278689, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999993443489076, + 0.9999993443489076, + 0.9999993443489076 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 41888, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 251328, + "componentType": 5126, + "count": 1309, + "max": [ + 0.4094895124435425, + 0.0027066469192504884, + 0.015727730467915536 + ], + "min": [ + 0.4094895124435425, + 0.0027066469192504884, + 0.015727730467915536 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 167552, + "componentType": 5126, + "count": 1309, + "max": [ + 5.587948326279957e-9, + -3.7253005125137418e-9, + -0.0, + -0.9999999403953552 + ], + "min": [ + 5.587948326279957e-9, + -3.7253005125137418e-9, + -0.0, + -0.9999999403953552 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 267036, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0, + 0.9999998807907105, + 0.9999998807907105 + ], + "min": [ + 1.0, + 0.9999998807907105, + 0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 47124, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 282744, + "componentType": 5126, + "count": 1309, + "max": [ + 0.4119338095188141, + 0.02158593945205212, + 0.05764375999569893 + ], + "min": [ + 0.4119338095188141, + 0.02158593945205212, + 0.05764375999569893 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 188496, + "componentType": 5126, + "count": 1309, + "max": [ + -1.3969826184734302e-8, + -0.0, + -0.0, + -0.9999999403953552 + ], + "min": [ + -1.3969826184734302e-8, + -0.0, + -0.0, + -0.9999999403953552 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 298452, + "componentType": 5126, + "count": 1309, + "max": [ + 0.9999998807907105, + 1.0, + 0.9999998807907105 + ], + "min": [ + 0.9999998807907105, + 1.0, + 0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 52360, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 314160, + "componentType": 5126, + "count": 1309, + "max": [ + 0.41257110238075259, + -0.021677669137716298, + 0.05501500889658928 + ], + "min": [ + 0.41257110238075259, + -0.021677669137716298, + 0.05501500889658928 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 209440, + "componentType": 5126, + "count": 1309, + "max": [ + 1.8626450382086542e-9, + -3.725300068424531e-9, + -2.98022992950564e-8, + -1.0 + ], + "min": [ + 1.8626450382086542e-9, + -3.725300068424531e-9, + -2.98022992950564e-8, + -1.0 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 329868, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0, + 1.0, + 0.9999998807907105 + ], + "min": [ + 1.0, + 1.0, + 0.9999998807907105 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 57596, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 345576, + "componentType": 5126, + "count": 1309, + "max": [ + -0.1415490061044693, + -0.039318621158599856, + 4.991890136807342e-7 + ], + "min": [ + -0.14154960215091706, + -0.03931945934891701, + -1.1175900027637909e-7 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 230384, + "componentType": 5126, + "count": 1309, + "max": [ + 0.8133829236030579, + 0.5989649295806885, + 0.8436978459358215, + 0.6449698805809021 + ], + "min": [ + 0.3702203333377838, + -0.06241266801953316, + 0.3116881549358368, + -0.13473054766654969 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 361284, + "componentType": 5126, + "count": 1309, + "max": [ + 1.000016689300537, + 1.0000189542770386, + 1.0000169277191165 + ], + "min": [ + 0.9999995827674866, + 0.9999997615814208, + 0.9999993443489076 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 62832, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 376992, + "componentType": 5126, + "count": 1309, + "max": [ + 2.98022992950564e-8, + 0.3586176931858063, + 0.0 + ], + "min": [ + 2.98022992950564e-8, + 0.3586176931858063, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 251328, + "componentType": 5126, + "count": 1309, + "max": [ + 0.008941872045397759, + 0.6418942213058472, + -0.04780912771821022, + -0.17511217296123506 + ], + "min": [ + -0.5697520971298218, + 0.0517999567091465, + -0.8109263181686401, + -0.8936039209365845 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 392700, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000007152557374, + 1.0000009536743165, + 1.0 + ], + "min": [ + 0.9999998807907105, + 0.999999701976776, + 0.999998927116394 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 68068, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 408408, + "componentType": 5126, + "count": 1309, + "max": [ + 0.0, + 0.3968968093395233, + 0.0 + ], + "min": [ + 0.0, + 0.3968968093395233, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 272272, + "componentType": 5126, + "count": 1309, + "max": [ + 0.8207381367683411, + 0.3076615631580353, + 0.3662434220314026, + -0.5708383917808533 + ], + "min": [ + 0.08248570561408997, + -0.08690406382083893, + -0.289207935333252, + -0.9902410507202148 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 424116, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000003576278689, + 1.0000007152557374, + 1.0000005960464478 + ], + "min": [ + 0.9999994039535524, + 0.9999994039535524, + 0.9999994039535524 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 73304, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 439824, + "componentType": 5126, + "count": 1309, + "max": [ + -2.98022992950564e-8, + 0.12854869663715366, + 0.0 + ], + "min": [ + -2.98022992950564e-8, + 0.12854869663715366, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 293216, + "componentType": 5126, + "count": 1309, + "max": [ + 0.9033632278442384, + -7.4743859102e-8, + -1.0567234198788357e-7, + -0.4288764894008637 + ], + "min": [ + 0.9033632278442384, + -7.4743859102e-8, + -1.0567234198788357e-7, + -0.4288764894008637 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 455532, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000003576278689 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0000003576278689 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 78540, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 471240, + "componentType": 5126, + "count": 1309, + "max": [ + 0.1415494978427887, + -0.03931879997253418, + 4.842880230171431e-7 + ], + "min": [ + 0.14154890179634098, + -0.03931939974427223, + -1.1920899822825962e-7 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 314160, + "componentType": 5126, + "count": 1309, + "max": [ + 0.8340531587600708, + 0.21584154665470124, + -0.3745410144329071, + 0.719398558139801 + ], + "min": [ + 0.20705875754356385, + -0.5725383162498474, + -0.8548761010169983, + -0.18284621834754945 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 486948, + "componentType": 5126, + "count": 1309, + "max": [ + 1.000017762184143, + 1.0000197887420657, + 1.0000158548355105 + ], + "min": [ + 0.9999998211860656, + 0.9999998211860656, + 0.9999992847442628 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 83776, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 502656, + "componentType": 5126, + "count": 1309, + "max": [ + 0.0, + 0.3586178123950958, + 0.0 + ], + "min": [ + 0.0, + 0.3586178123950958, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 335104, + "componentType": 5126, + "count": 1309, + "max": [ + -0.018084827810525899, + -0.04664610326290131, + 0.7690947651863098, + -0.22867438197135929 + ], + "min": [ + -0.6566932797431946, + -0.6220959424972534, + -0.05792725831270218, + -0.9092845916748048 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 518364, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000009536743165, + 1.0000008344650269, + 1.0 + ], + "min": [ + 0.9999998807907105, + 0.9999998807907105, + 0.9999991655349731 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 89012, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 534072, + "componentType": 5126, + "count": 1309, + "max": [ + -2.98022992950564e-8, + 0.3968968093395233, + -1.8626499453944239e-8 + ], + "min": [ + -2.98022992950564e-8, + 0.3968968093395233, + -1.8626499453944239e-8 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 356048, + "componentType": 5126, + "count": 1309, + "max": [ + 0.7374019622802734, + 0.1331629455089569, + 0.04225348681211472, + -0.6565166115760803 + ], + "min": [ + 0.1277473121881485, + -0.36822667717933657, + -0.3809806108474732, + -0.9684229493141174 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 549780, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0000003576278689, + 1.0000005960464478, + 1.0000004768371585 + ], + "min": [ + 0.9999994039535524, + 0.999999463558197, + 0.999999225139618 + ], + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 94248, + "componentType": 5126, + "count": 1309, + "max": [ + 34.880001068115237 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 5, + "byteOffset": 565488, + "componentType": 5126, + "count": 1309, + "max": [ + 1.4901200273698124e-8, + 0.128548800945282, + 7.450580152834618e-9 + ], + "min": [ + 1.4901200273698124e-8, + 0.128548800945282, + 7.450580152834618e-9 + ], + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 376992, + "componentType": 5126, + "count": 1309, + "max": [ + 0.9033632278442384, + 5.67022482300672e-8, + 1.0154858642863475e-7, + -0.42887642979621889 + ], + "min": [ + 0.9033632278442384, + 5.67022482300672e-8, + 1.0154858642863475e-7, + -0.42887642979621889 + ], + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 581196, + "componentType": 5126, + "count": 1309, + "max": [ + 1.0, + 1.0, + 1.0000003576278689 + ], + "min": [ + 1.0, + 1.0, + 1.0000003576278689 + ], + "type": "VEC3" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 18, + "max": [ + 1.0, + 0.9990230202674866, + 0.9925193190574646, + 0.0, + 0.992519199848175, + 0.0804019495844841, + 0.9333313703536988, + 0.0, + 0.997569501399994, + 1.0, + 0.08040130138397217, + 0.0, + 1.3445860147476197, + 0.880669891834259, + 0.07009822130203247, + 1.0 + ], + "min": [ + 0.042071811854839328, + -0.997569501399994, + -0.9925193190574646, + 0.0, + -0.992519199848175, + -0.7748532295227051, + -1.0, + 0.0, + -0.999022901058197, + -0.9972699284553528, + -0.7748619914054871, + 0.0, + -1.331490993499756, + -1.5465550422668458, + -0.04193788021802902, + 1.0 + ], + "type": "MAT4" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.16862699389457704, + 0.1411760002374649, + 0.10980399698019028, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "frameInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.7450979948043823, + 0.45097988843917849, + 0.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "componentsStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5411760210990906, + 0.5411760210990906, + 0.5411760210990906, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "Stem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.019607799127697946, + 0.1450980007648468, + 0.17647099494934086, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "footStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.9686279892921448, + 0.9686279892921448, + 0.9686279892921448, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "footFlangeStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4823530018329621, + 0.4352940022945404, + 0.36078399419784548, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "kneeStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.2627449929714203, + 0.2627449929714203, + 0.2627449929714203, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "hipSphereStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.9882349967956544, + 0.9882349967956544, + 0.9882349967956544, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "filletStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.8980389833450317, + 0.8980389833450317, + 0.8980389833450317, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "thighStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4980390071868897, + 0.45097988843917849, + 0.3803919851779938, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "thighPadStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4588240087032318, + 0.4588240087032318, + 0.4588240087032318, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "plugStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4627450108528137, + 0.4078429937362671, + 0.3294120132923126, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "discInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.0784313976764679, + 0.18431399762630464, + 0.20784300565719605, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "TubeStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.521569013595581, + 0.4627450108528137, + 0.37647101283073428, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "componentStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.243137001991272, + 0.19607800245285038, + 0.1568630039691925, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "hexStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4980390071868897, + 0.45097988843917849, + 0.3803919851779938, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "kneeGuardStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.6823530197143555, + 0.6352940201759338, + 0.5333330035209656, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "calfStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4823530018329621, + 0.4352940022945404, + 0.36078399419784548, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "ankleBracketStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "ankleStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.35686299204826357, + 0.3254899978637696, + 0.2784309983253479, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "calfCoverStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "knee2Stem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.0, + 0.2705880105495453, + 0.243137001991272, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "skeletonStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.38431400060653689, + 0.34902000427246096, + 0.282353013753891, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "bracketStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4823530018329621, + 0.4352940022945404, + 0.36078399419784548, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "coverStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.0, + 0.19215700030326844, + 0.243137001991272, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "barStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4313730001449585, + 0.20000000298023225, + 0.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "intestineOutStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.9176470041275024, + 0.6862750053405762, + 0.2705880105495453, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "neckSinkStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.0, + 0.2666670083999634, + 0.3372550010681153, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "shockOutStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.0, + 0.4823530018329621, + 0.8705880045890808, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "shockInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.18823499977588657, + 0.1568630039691925, + 0.12156900018453598, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "discStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4980390071868897, + 0.4980390071868897, + 0.4980390071868897, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "canisterInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5372549891471863, + 0.5372549891471863, + 0.5372549891471863, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "canisterOutStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.36078399419784548, + 0.36078399419784548, + 0.36078399419784548, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "canInnerStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4549019932746887, + 0.21960799396038056, + 0.019607799127697946, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "pipeStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.6705880165100098, + 0.4078429937362671, + 0.05882349982857704, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "off-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.2901960015296936, + 0.2901960015296936, + 0.2901960015296936, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "boltStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.20729400217533112, + 0.19880999624729157, + 0.7099869847297669, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "intestineInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5098040103912354, + 0.4588240087032318, + 0.37647101283073428, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "armPlateStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "shoulderPodStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "armFilletStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.019607799127697946, + 0.1647060066461563, + 0.20000000298023225, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "bStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.20000000298023225, + 0.20000000298023225, + 0.20000000298023225, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "armBoltStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.02352939918637276, + 0.11764699965715409, + 0.1411760002374649, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "shoulderBStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.513725996017456, + 0.4549019932746887, + 0.3725489974021912, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "armTrussStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.268193006515503, + 0.2585029900074005, + 0.549996018409729, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "pinStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.764706015586853, + 0.48627498745918276, + 0.0784313976764679, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "radiatorStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "rpgStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.9882349967956544, + 0.9882349967956544, + 0.9882349967956544, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "bayonetStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.1254899948835373, + 0.1254899948835373, + 0.1254899948835373, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "barrel2Stem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.3529410064220429, + 0.3529410064220429, + 0.3529410064220429, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "barrel1Stem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.4196079969406128, + 0.4196079969406128, + 0.4117650091648102, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "filterOutStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.35999101400375368, + 0.35999101400375368, + 0.35999101400375368, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "filterInStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5058820247650147, + 0.5058820247650147, + 0.5058820247650147, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "exhaustGunStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.2549020051956177, + 0.2549020051956177, + 0.2549020051956177, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "headFilletStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.8627449870109558, + 0.6509799957275391, + 0.243137001991272, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "headCaseStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.7098039984703064, + 0.5411760210990906, + 0.2549020051956177, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "headGrillStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.8274509906768799, + 0.5176470279693604, + 0.062745101749897, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "headHornStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.9882349967956544, + 0.9882349967956544, + 0.9882349967956544, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "eyeStem-effect" + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "eyeRimStem-effect" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 2735108, + "byteLength": 369996, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 2362352, + "byteLength": 273272, + "byteStride": 8, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 1542536, + "byteLength": 819816, + "byteStride": 12, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 399088, + "byteLength": 546544, + "byteStride": 16, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 2635624, + "byteLength": 99484 + }, + { + "buffer": 0, + "byteOffset": 945632, + "byteLength": 596904 + }, + { + "buffer": 0, + "byteOffset": 1152, + "byteLength": 397936 + }, + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 1152 + } + ], + "buffers": [ + { + "byteLength": 3105104, + "uri": "BrainStem0.bin" + } + ] +} diff --git a/positions/src/main/assets/gltf-BrainStem/BrainStem0.bin b/positions/src/main/assets/gltf-BrainStem/BrainStem0.bin new file mode 100644 index 0000000..a684a8f Binary files /dev/null and b/positions/src/main/assets/gltf-BrainStem/BrainStem0.bin differ diff --git a/positions/src/main/assets/groundoverlay.jpg b/positions/src/main/assets/groundoverlay.jpg new file mode 100644 index 0000000..57a55db Binary files /dev/null and b/positions/src/main/assets/groundoverlay.jpg differ diff --git a/positions/src/main/assets/gugong.jpg b/positions/src/main/assets/gugong.jpg new file mode 100644 index 0000000..141b628 Binary files /dev/null and b/positions/src/main/assets/gugong.jpg differ diff --git a/positions/src/main/assets/honeycomb.txt b/positions/src/main/assets/honeycomb.txt new file mode 100644 index 0000000..131fdd2 --- /dev/null +++ b/positions/src/main/assets/honeycomb.txt @@ -0,0 +1,11671 @@ +119.518251 35.683927 1159 +119.518251 35.688427 31 +119.523751 35.620927 980 +119.529251 35.611927 1481 +119.529251 35.638927 92 +119.529251 35.643427 1127 +119.529251 35.656927 1213 +119.529251 35.661427 11 +119.529251 35.697427 12 +119.529251 35.701927 1302 +119.529251 36.763927 542 +119.534751 35.598427 3 +119.534751 35.629927 3 +119.534751 35.652427 6 +119.534751 35.674927 321 +119.534751 36.750427 763 +119.540251 35.593927 16 +119.540251 35.598427 191 +119.540251 35.625427 1183 +119.540251 35.629927 15 +119.540251 35.674927 375 +119.540251 35.679427 44 +119.540251 35.697427 652 +119.540251 35.701927 8 +119.540251 35.706427 3 +119.540251 35.710927 6 +119.540251 36.736927 4 +119.540251 36.781927 564 +119.540251 36.786427 3 +119.540251 36.790927 771 +119.545751 35.598427 177 +119.545751 35.602927 741 +119.545751 35.652427 15 +119.545751 35.665927 219 +119.545751 35.674927 16 +119.545751 35.679427 23 +119.545751 35.697427 649 +119.545751 35.701927 8 +119.545751 35.706427 744 +119.545751 35.710927 6 +119.545751 36.732427 9 +119.545751 36.768427 851 +119.545751 36.781927 4 +119.545751 36.799927 4 +119.545751 36.804427 19 +119.551251 35.593927 307 +119.551251 35.602927 609 +119.551251 35.607427 923 +119.551251 35.611927 6 +119.551251 35.620927 706 +119.551251 35.643427 124 +119.551251 35.706427 792 +119.551251 35.710927 20 +119.551251 36.732427 1868 +119.551251 36.754927 1715 +119.551251 36.759427 15 +119.551251 36.786427 6 +119.556751 35.598427 4 +119.556751 35.602927 4 +119.556751 35.665927 799 +119.556751 35.688427 625 +119.556751 35.697427 6 +119.556751 36.727927 1119 +119.556751 36.732427 18 +119.556751 36.750427 5 +119.556751 36.754927 7 +119.562251 35.589427 3 +119.562251 35.625427 31 +119.562251 35.634427 22 +119.562251 35.647927 913 +119.562251 35.656927 364 +119.562251 35.661427 36 +119.562251 35.683927 32 +119.562251 35.688427 430 +119.562251 35.692927 54 +119.562251 35.697427 9 +119.562251 35.701927 3 +119.562251 36.763927 4 +119.562251 36.768427 1383 +119.567751 35.589427 792 +119.567751 35.607427 4 +119.567751 35.611927 265 +119.567751 35.616427 230 +119.567751 35.625427 767 +119.567751 35.629927 12 +119.567751 35.638927 453 +119.567751 35.647927 6 +119.567751 35.652427 47 +119.567751 35.656927 4643 +119.567751 35.661427 907 +119.567751 35.674927 263 +119.567751 35.679427 9 +119.567751 35.683927 741 +119.567751 35.688427 11 +119.567751 35.692927 740 +119.567751 35.697427 22 +119.567751 35.701927 1497 +119.567751 36.799927 13 +119.573251 35.607427 458 +119.573251 35.616427 39 +119.573251 35.625427 500 +119.573251 35.629927 42 +119.573251 35.647927 383 +119.573251 35.656927 4 +119.573251 35.674927 12 +119.573251 35.679427 1062 +119.573251 36.714427 11 +119.573251 36.732427 21 +119.573251 36.759427 1270 +119.573251 36.786427 5 +119.573251 36.795427 2460 +119.578751 35.602927 922 +119.578751 35.607427 302 +119.578751 35.611927 374 +119.578751 35.616427 5 +119.578751 35.620927 195 +119.578751 35.638927 10 +119.578751 35.643427 19 +119.578751 35.679427 10 +119.578751 36.709927 495 +119.578751 36.714427 849 +119.578751 36.732427 1211 +119.578751 36.736927 8 +119.578751 36.817927 516 +119.584251 35.598427 4 +119.584251 35.602927 7 +119.584251 35.625427 4 +119.584251 35.629927 610 +119.584251 35.638927 2 +119.584251 35.670427 161 +119.584251 35.706427 7 +119.584251 36.700927 399 +119.584251 36.714427 298 +119.584251 36.732427 10 +119.584251 36.736927 1064 +119.584251 36.741427 6 +119.584251 36.772927 713 +119.584251 36.781927 10 +119.584251 36.790927 887 +119.584251 36.795427 11 +119.584251 36.831427 684 +119.584251 36.835927 4 +119.589751 35.616427 117 +119.589751 35.620927 29 +119.589751 35.647927 615 +119.589751 35.661427 6 +119.589751 35.665927 4 +119.589751 35.670427 862 +119.589751 35.674927 4 +119.589751 35.697427 5 +119.589751 35.706427 1080 +119.589751 36.709927 429 +119.589751 36.714427 17 +119.589751 36.763927 8 +119.589751 36.777427 5 +119.589751 36.781927 1171 +119.589751 36.790927 4 +119.589751 36.795427 5 +119.589751 36.831427 3 +119.589751 36.840427 409 +119.595251 35.602927 500 +119.595251 35.616427 1073 +119.595251 35.620927 9 +119.595251 35.647927 12 +119.595251 35.674927 391 +119.595251 35.692927 526 +119.595251 35.697427 552 +119.595251 36.705427 757 +119.595251 36.925927 11 +119.595251 36.930427 4 +119.595251 36.934927 19 +119.595251 36.943927 33 +119.595251 36.952927 430 +119.595251 36.957427 4 +119.600751 35.598427 324 +119.600751 35.634427 422 +119.600751 35.638927 8 +119.600751 35.679427 313 +119.600751 35.697427 4 +119.600751 35.764927 871 +119.600751 36.678427 524 +119.600751 36.682927 6 +119.600751 36.705427 20 +119.600751 36.714427 542 +119.600751 36.732427 510 +119.600751 36.736927 1011 +119.600751 36.754927 1062 +119.600751 36.799927 396 +119.600751 36.808927 4 +119.600751 36.849427 5 +119.600751 36.853927 718 +119.600751 36.889927 593 +119.600751 36.898927 255 +119.600751 36.925927 472 +119.600751 36.930427 2252 +119.600751 36.934927 27 +119.606251 35.593927 679 +119.606251 35.607427 3 +119.606251 35.611927 453 +119.606251 35.616427 50 +119.606251 35.629927 2 +119.606251 35.634427 598 +119.606251 35.638927 5 +119.606251 35.647927 88 +119.606251 35.652427 63 +119.606251 35.661427 5 +119.606251 35.683927 2 +119.606251 35.697427 411 +119.606251 35.706427 768 +119.606251 36.664927 429 +119.606251 36.682927 666 +119.606251 36.687427 720 +119.606251 36.781927 4 +119.606251 36.795427 448 +119.606251 36.799927 3 +119.606251 36.804427 48 +119.606251 36.835927 5 +119.606251 36.862927 394 +119.606251 36.867427 544 +119.606251 36.894427 4 +119.606251 36.898927 34 +119.606251 36.903427 600 +119.606251 36.921427 1001 +119.606251 36.925927 766 +119.606251 36.930427 444 +119.606251 36.961927 368 +119.606251 36.970927 580 +119.611751 35.607427 564 +119.611751 35.620927 1185 +119.611751 35.629927 236 +119.611751 35.638927 485 +119.611751 35.652427 4 +119.611751 35.670427 7 +119.611751 35.679427 3 +119.611751 35.683927 564 +119.611751 35.706427 5 +119.611751 35.742427 318 +119.611751 35.751427 435 +119.611751 35.764927 866 +119.611751 36.660427 5 +119.611751 36.678427 571 +119.611751 36.687427 116 +119.611751 36.786427 640 +119.611751 36.795427 455 +119.611751 36.799927 105 +119.611751 36.804427 149 +119.611751 36.858427 6 +119.611751 36.880927 1 +119.611751 36.889927 361 +119.611751 36.912427 674 +119.611751 36.930427 57 +119.611751 36.961927 4 +119.617251 35.602927 303 +119.617251 35.652427 4 +119.617251 35.656927 186 +119.617251 35.670427 1133 +119.617251 35.683927 473 +119.617251 35.742427 16 +119.617251 35.764927 4 +119.617251 35.773927 4 +119.617251 35.778427 3 +119.617251 36.651427 789 +119.617251 36.655927 23 +119.617251 36.700927 461 +119.617251 36.718927 421 +119.617251 36.799927 148 +119.617251 36.804427 3139 +119.617251 36.826927 2130 +119.617251 36.876427 611 +119.617251 36.885427 4 +119.617251 36.916927 3 +119.617251 36.921427 3 +119.617251 36.925927 508 +119.617251 36.930427 21 +119.617251 36.934927 731 +119.617251 36.939427 95 +119.617251 36.943927 4 +119.617251 36.948427 13 +119.617251 36.952927 1116 +119.617251 36.975427 792 +119.617251 36.984427 6 +119.622751 35.602927 24 +119.622751 35.625427 459 +119.622751 35.629927 5 +119.622751 35.638927 663 +119.622751 35.670427 346 +119.622751 35.742427 619 +119.622751 35.769427 1111 +119.622751 35.773927 963 +119.622751 35.787427 8 +119.622751 36.655927 520 +119.622751 36.660427 3 +119.622751 36.705427 191 +119.622751 36.709927 532 +119.622751 36.714427 194 +119.622751 36.804427 22 +119.622751 36.885427 504 +119.622751 36.907927 434 +119.622751 36.916927 4 +119.622751 36.921427 142 +119.622751 36.930427 23 +119.622751 36.934927 7 +119.622751 36.939427 1057 +119.622751 36.943927 4 +119.622751 36.952927 7 +119.622751 36.966427 626 +119.622751 36.997927 7 +119.628251 35.634427 737 +119.628251 35.652427 1037 +119.628251 35.661427 888 +119.628251 35.665927 2214 +119.628251 35.670427 557 +119.628251 35.679427 5 +119.628251 35.697427 637 +119.628251 35.706427 605 +119.628251 35.710927 2 +119.628251 35.715427 235 +119.628251 35.742427 1660 +119.628251 35.751427 1163 +119.628251 35.773927 147 +119.628251 35.787427 672 +119.628251 35.818927 354 +119.628251 36.637927 595 +119.628251 36.642427 3 +119.628251 36.646927 274 +119.628251 36.678427 355 +119.628251 36.691927 340 +119.628251 36.799927 750 +119.628251 36.804427 826 +119.628251 36.849427 18 +119.628251 36.907927 19 +119.628251 36.939427 652 +119.628251 36.943927 700 +119.628251 36.952927 625 +119.628251 36.993427 301 +119.628251 36.997927 1261 +119.633751 35.620927 37 +119.633751 35.625427 860 +119.633751 35.629927 1402 +119.633751 35.634427 42 +119.633751 35.661427 363 +119.633751 35.665927 335 +119.633751 35.670427 313 +119.633751 35.674927 4925 +119.633751 35.679427 519 +119.633751 35.688427 425 +119.633751 35.701927 17 +119.633751 35.706427 22 +119.633751 35.715427 2 +119.633751 36.637927 116 +119.633751 36.664927 3 +119.633751 36.714427 275 +119.633751 36.718927 398 +119.633751 36.763927 2 +119.633751 36.772927 9 +119.633751 36.777427 1078 +119.633751 36.804427 387 +119.633751 36.808927 1079 +119.633751 36.849427 1370 +119.633751 36.858427 3 +119.633751 36.862927 6 +119.633751 36.871927 5 +119.633751 36.939427 17 +119.633751 36.943927 6 +119.633751 36.952927 5 +119.633751 36.957427 415 +119.639251 35.616427 3 +119.639251 35.625427 163 +119.639251 35.629927 267 +119.639251 35.634427 68 +119.639251 35.643427 77 +119.639251 35.665927 61 +119.639251 35.670427 4 +119.639251 35.679427 44 +119.639251 35.697427 477 +119.639251 35.706427 197 +119.639251 35.710927 994 +119.639251 35.728927 630 +119.639251 35.764927 1033 +119.639251 35.791927 4 +119.639251 35.832427 9 +119.639251 36.637927 6 +119.639251 36.642427 399 +119.639251 36.664927 557 +119.639251 36.687427 305 +119.639251 36.700927 203 +119.639251 36.709927 5 +119.639251 36.714427 349 +119.639251 36.750427 3 +119.639251 36.754927 2774 +119.639251 36.768427 13 +119.639251 36.772927 5779 +119.639251 36.777427 7 +119.639251 36.858427 640 +119.639251 36.862927 15 +119.639251 36.867427 536 +119.639251 36.903427 19 +119.644751 35.616427 9 +119.644751 35.620927 1025 +119.644751 35.629927 594 +119.644751 35.647927 1225 +119.644751 35.656927 718 +119.644751 35.661427 1520 +119.644751 35.665927 5 +119.644751 35.674927 717 +119.644751 35.706427 11 +119.644751 35.715427 1003 +119.644751 35.760427 623 +119.644751 35.841427 360 +119.644751 36.084427 3 +119.644751 36.628927 700 +119.644751 36.633427 7 +119.644751 36.637927 539 +119.644751 36.687427 6 +119.644751 36.709927 18 +119.644751 36.714427 533 +119.644751 36.741427 765 +119.644751 36.750427 13 +119.644751 36.754927 77 +119.644751 36.759427 12 +119.644751 36.763927 3 +119.644751 36.768427 8 +119.644751 36.772927 11 +119.644751 36.777427 14 +119.644751 36.790927 5 +119.644751 36.795427 1640 +119.644751 36.813427 865 +119.644751 36.831427 3 +119.644751 36.835927 863 +119.644751 36.898927 2 +119.644751 36.930427 87 +119.650251 35.625427 1056 +119.650251 35.629927 23 +119.650251 35.634427 3 +119.650251 35.638927 432 +119.650251 35.656927 3 +119.650251 35.661427 40 +119.650251 35.670427 405 +119.650251 35.692927 812 +119.650251 35.697427 6 +119.650251 35.710927 289 +119.650251 35.742427 1330 +119.650251 35.782927 70 +119.650251 35.805427 5 +119.650251 35.814427 332 +119.650251 35.832427 994 +119.650251 36.079927 2486 +119.650251 36.111427 8 +119.650251 36.124927 277 +119.650251 36.133927 204 +119.650251 36.628927 364 +119.650251 36.633427 178 +119.650251 36.637927 639 +119.650251 36.664927 417 +119.650251 36.700927 484 +119.650251 36.705427 12 +119.650251 36.709927 425 +119.650251 36.754927 1703 +119.650251 36.759427 3 +119.650251 36.790927 4 +119.650251 36.795427 16 +119.650251 36.831427 3 +119.650251 36.835927 4 +119.650251 36.876427 2 +119.650251 36.880927 777 +119.650251 36.885427 1023 +119.650251 36.889927 13 +119.650251 36.898927 419 +119.650251 36.921427 1 +119.650251 36.943927 418 +119.650251 36.948427 7 +119.650251 36.952927 465 +119.655751 35.602927 158 +119.655751 35.625427 5 +119.655751 35.629927 336 +119.655751 35.638927 6 +119.655751 35.656927 528 +119.655751 35.661427 19 +119.655751 35.688427 5 +119.655751 35.701927 731 +119.655751 35.710927 3 +119.655751 35.769427 103 +119.655751 35.773927 475 +119.655751 35.805427 434 +119.655751 35.809927 203 +119.655751 36.070927 10 +119.655751 36.664927 8 +119.655751 36.678427 4 +119.655751 36.682927 904 +119.655751 36.687427 519 +119.655751 36.709927 9 +119.655751 36.799927 247 +119.655751 36.844927 10 +119.655751 36.862927 2 +119.655751 36.885427 14 +119.655751 36.889927 6 +119.655751 36.921427 9 +119.655751 36.925927 5 +119.655751 36.966427 22 +119.655751 36.970927 23 +119.661251 35.602927 17 +119.661251 35.620927 4 +119.661251 35.634427 13 +119.661251 35.665927 1651 +119.661251 35.710927 216 +119.661251 35.787427 432 +119.661251 35.814427 14 +119.661251 35.832427 222 +119.661251 36.066427 14 +119.661251 36.070927 906 +119.661251 36.084427 1 +119.661251 36.088927 2100 +119.661251 36.115927 1521 +119.661251 36.129427 1116 +119.661251 36.156427 381 +119.661251 36.637927 4 +119.661251 36.673927 4 +119.661251 36.678427 489 +119.661251 36.682927 7 +119.661251 36.687427 45 +119.661251 36.741427 41 +119.661251 36.750427 5 +119.661251 36.844927 736 +119.661251 36.849427 7 +119.661251 36.853927 1015 +119.661251 36.862927 828 +119.661251 36.867427 11 +119.661251 36.871927 1095 +119.661251 36.889927 455 +119.661251 36.921427 52 +119.661251 36.925927 1378 +119.661251 36.952927 24 +119.661251 36.957427 978 +119.661251 36.966427 72 +119.661251 36.970927 1555 +119.661251 36.975427 4 +119.661251 36.984427 7 +119.666751 35.607427 880 +119.666751 35.620927 1024 +119.666751 35.625427 298 +119.666751 35.629927 9 +119.666751 35.647927 4 +119.666751 35.652427 983 +119.666751 35.661427 9 +119.666751 35.688427 835 +119.666751 35.692927 1 +119.666751 35.724427 3 +119.666751 35.728927 272 +119.666751 35.733427 506 +119.666751 35.778427 617 +119.666751 35.796427 49 +119.666751 36.070927 1209 +119.666751 36.088927 61 +119.666751 36.093427 60 +119.666751 36.097927 1562 +119.666751 36.102427 13 +119.666751 36.115927 309 +119.666751 36.147427 20 +119.666751 36.642427 1310 +119.666751 36.660427 787 +119.666751 36.664927 5 +119.666751 36.678427 5 +119.666751 36.718927 7 +119.666751 36.723427 861 +119.666751 36.736927 16 +119.666751 36.741427 4139 +119.666751 36.768427 5 +119.666751 36.804427 9 +119.666751 36.813427 429 +119.666751 36.840427 29 +119.666751 36.844927 962 +119.666751 36.853927 2 +119.666751 36.898927 4 +119.666751 36.925927 23 +119.666751 36.952927 1317 +119.666751 36.970927 393 +119.666751 36.979927 1658 +119.666751 36.984427 287 +119.666751 36.993427 7 +119.666751 36.997927 1 +119.672251 35.607427 332 +119.672251 35.629927 815 +119.672251 35.634427 168 +119.672251 35.638927 151 +119.672251 35.683927 4 +119.672251 35.688427 6 +119.672251 35.697427 16 +119.672251 35.701927 656 +119.672251 35.719927 6 +119.672251 35.724427 586 +119.672251 35.728927 348 +119.672251 35.755927 872 +119.672251 35.769427 7 +119.672251 36.093427 51 +119.672251 36.147427 875 +119.672251 36.156427 327 +119.672251 36.615427 1027 +119.672251 36.624427 5 +119.672251 36.628927 4 +119.672251 36.700927 529 +119.672251 36.723427 8 +119.672251 36.732427 5 +119.672251 36.741427 3 +119.672251 36.768427 5 +119.672251 36.777427 1309 +119.672251 36.795427 828 +119.672251 36.799927 4 +119.672251 36.804427 1157 +119.672251 36.817927 1121 +119.672251 36.822427 208 +119.672251 36.840427 5 +119.672251 36.844927 12 +119.672251 36.898927 733 +119.672251 36.912427 7 +119.672251 36.916927 56 +119.672251 36.921427 3 +119.672251 36.952927 18 +119.672251 36.970927 4 +119.672251 36.975427 992 +119.672251 36.979927 55 +119.672251 36.984427 18 +119.672251 36.993427 668 +119.672251 36.997927 24 +119.677751 35.598427 412 +119.677751 35.602927 49 +119.677751 35.607427 52 +119.677751 35.638927 488 +119.677751 35.656927 364 +119.677751 35.670427 999 +119.677751 35.683927 624 +119.677751 35.701927 383 +119.677751 35.706427 853 +119.677751 35.724427 563 +119.677751 35.746927 12 +119.677751 35.769427 559 +119.677751 35.800927 362 +119.677751 35.818927 308 +119.677751 36.075427 567 +119.677751 36.111427 745 +119.677751 36.115927 1030 +119.677751 36.174427 8 +119.677751 36.610927 1122 +119.677751 36.615427 6 +119.677751 36.624427 2 +119.677751 36.633427 4 +119.677751 36.750427 388 +119.677751 36.754927 3 +119.677751 36.759427 23 +119.677751 36.763927 1801 +119.677751 36.768427 5 +119.677751 36.772927 4 +119.677751 36.777427 34 +119.677751 36.799927 1178 +119.677751 36.804427 3 +119.677751 36.853927 482 +119.677751 36.862927 200 +119.677751 36.867427 763 +119.677751 36.885427 6 +119.677751 36.889927 6 +119.677751 36.894427 3 +119.677751 36.916927 1685 +119.677751 36.952927 6 +119.677751 36.957427 93 +119.677751 36.961927 32 +119.677751 36.970927 765 +119.677751 36.979927 475 +119.683251 35.616427 366 +119.683251 35.620927 1 +119.683251 35.638927 351 +119.683251 35.647927 5 +119.683251 35.656927 1437 +119.683251 35.661427 402 +119.683251 35.697427 3 +119.683251 35.701927 630 +119.683251 35.719927 310 +119.683251 35.746927 517 +119.683251 35.823427 547 +119.683251 35.827927 277 +119.683251 35.836927 385 +119.683251 36.093427 15 +119.683251 36.097927 1130 +119.683251 36.129427 970 +119.683251 36.156427 1178 +119.683251 36.606427 696 +119.683251 36.610927 14 +119.683251 36.615427 16 +119.683251 36.619927 13 +119.683251 36.660427 774 +119.683251 36.678427 430 +119.683251 36.682927 1387 +119.683251 36.768427 979 +119.683251 36.772927 2 +119.683251 36.777427 3 +119.683251 36.795427 4 +119.683251 36.804427 3 +119.683251 36.817927 387 +119.683251 36.831427 900 +119.683251 36.885427 1881 +119.683251 36.889927 20 +119.683251 36.894427 3 +119.683251 36.916927 434 +119.683251 36.921427 4 +119.683251 36.925927 1352 +119.683251 36.957427 8 +119.683251 36.961927 18 +119.683251 36.979927 2 +119.688751 35.616427 417 +119.688751 35.629927 583 +119.688751 35.652427 50 +119.688751 35.697427 2 +119.688751 35.706427 235 +119.688751 35.719927 192 +119.688751 35.724427 1011 +119.688751 35.764927 997 +119.688751 35.796427 406 +119.688751 35.809927 887 +119.688751 36.007927 289 +119.688751 36.057427 975 +119.688751 36.070927 18 +119.688751 36.079927 4 +119.688751 36.084427 28 +119.688751 36.138427 60 +119.688751 36.156427 34 +119.688751 36.160927 549 +119.688751 36.165427 20 +119.688751 36.610927 235 +119.688751 36.615427 5 +119.688751 36.646927 4 +119.688751 36.682927 6 +119.688751 36.709927 339 +119.688751 36.817927 2 +119.688751 36.831427 3 +119.688751 36.840427 57 +119.688751 36.844927 477 +119.688751 36.925927 10 +119.688751 36.957427 12 +119.688751 36.961927 896 +119.694251 35.625427 4 +119.694251 35.629927 1227 +119.694251 35.634427 9 +119.694251 35.665927 4 +119.694251 35.701927 134 +119.694251 35.706427 70 +119.694251 35.742427 613 +119.694251 35.787427 544 +119.694251 35.971927 641 +119.694251 35.985427 5 +119.694251 36.012427 474 +119.694251 36.057427 4 +119.694251 36.070927 1116 +119.694251 36.084427 878 +119.694251 36.115927 308 +119.694251 36.129427 3 +119.694251 36.138427 908 +119.694251 36.142927 14 +119.694251 36.147427 2510 +119.694251 36.160927 21 +119.694251 36.165427 2 +119.694251 36.606427 3 +119.694251 36.610927 6 +119.694251 36.615427 495 +119.694251 36.637927 871 +119.694251 36.646927 758 +119.694251 36.687427 314 +119.694251 36.709927 235 +119.694251 36.718927 413 +119.694251 36.732427 462 +119.694251 36.858427 7 +119.694251 36.912427 5 +119.699751 35.620927 763 +119.699751 35.625427 167 +119.699751 35.629927 38 +119.699751 35.634427 497 +119.699751 35.683927 614 +119.699751 35.688427 838 +119.699751 35.728927 559 +119.699751 35.746927 842 +119.699751 35.778427 4 +119.699751 35.782927 360 +119.699751 35.796427 18 +119.699751 35.814427 376 +119.699751 35.962927 430 +119.699751 35.971927 1153 +119.699751 35.980927 1018 +119.699751 36.061927 521 +119.699751 36.079927 925 +119.699751 36.093427 889 +119.699751 36.147427 5 +119.699751 36.165427 1989 +119.699751 36.601927 901 +119.699751 36.624427 687 +119.699751 36.628927 332 +119.699751 36.691927 15 +119.699751 36.799927 11 +119.699751 36.808927 912 +119.699751 36.813427 3 +119.699751 36.822427 673 +119.699751 36.826927 4 +119.699751 36.858427 273 +119.699751 36.862927 19 +119.699751 36.867427 8 +119.699751 36.889927 974 +119.699751 36.894427 16 +119.699751 36.907927 781 +119.699751 36.916927 751 +119.699751 36.952927 561 +119.699751 36.957427 3 +119.699751 36.961927 1610 +119.699751 36.970927 463 +119.699751 36.975427 4 +119.699751 36.988927 47 +119.699751 36.993427 92 +119.699751 36.997927 3 +119.705251 35.625427 10 +119.705251 35.634427 704 +119.705251 35.661427 1139 +119.705251 35.688427 489 +119.705251 35.706427 266 +119.705251 35.742427 521 +119.705251 35.760427 679 +119.705251 35.778427 1267 +119.705251 35.782927 19 +119.705251 35.845927 4 +119.705251 35.850427 937 +119.705251 35.940427 314 +119.705251 35.958427 939 +119.705251 35.980927 82 +119.705251 36.025927 523 +119.705251 36.052927 199 +119.705251 36.084427 927 +119.705251 36.169927 8 +119.705251 36.597427 264 +119.705251 36.601927 430 +119.705251 36.619927 3 +119.705251 36.628927 3 +119.705251 36.633427 350 +119.705251 36.651427 10 +119.705251 36.691927 1057 +119.705251 36.700927 378 +119.705251 36.723427 233 +119.705251 36.772927 3 +119.705251 36.795427 4 +119.705251 36.799927 1806 +119.705251 36.808927 14 +119.705251 36.813427 4 +119.705251 36.826927 4 +119.705251 36.853927 297 +119.705251 36.858427 19 +119.705251 36.862927 798 +119.705251 36.867427 17 +119.705251 36.894427 3 +119.705251 36.907927 4 +119.705251 36.912427 5 +119.705251 36.921427 461 +119.705251 36.952927 684 +119.705251 36.988927 2816 +119.705251 36.993427 583 +119.705251 36.997927 127 +119.710751 35.634427 12 +119.710751 35.638927 7 +119.710751 35.643427 4 +119.710751 35.656927 7 +119.710751 35.665927 7 +119.710751 35.719927 275 +119.710751 35.755927 404 +119.710751 35.782927 18 +119.710751 35.841427 11 +119.710751 35.926927 301 +119.710751 35.953927 7 +119.710751 35.958427 3 +119.710751 35.971927 319 +119.710751 35.994427 344 +119.710751 36.003427 644 +119.710751 36.007927 1595 +119.710751 36.012427 812 +119.710751 36.057427 43 +119.710751 36.061927 2133 +119.710751 36.066427 6 +119.710751 36.075427 23 +119.710751 36.115927 2214 +119.710751 36.120427 6 +119.710751 36.124927 12 +119.710751 36.129427 9 +119.710751 36.133927 43 +119.710751 36.138427 859 +119.710751 36.592927 226 +119.710751 36.597427 826 +119.710751 36.619927 301 +119.710751 36.624427 426 +119.710751 36.637927 357 +119.710751 36.651427 1367 +119.710751 36.669427 150 +119.710751 36.700927 6 +119.710751 36.705427 4 +119.710751 36.714427 551 +119.710751 36.723427 338 +119.710751 36.786427 7 +119.710751 36.790927 10 +119.710751 36.795427 170 +119.710751 36.840427 1203 +119.710751 36.844927 38 +119.710751 36.871927 4 +119.710751 36.952927 294 +119.710751 36.975427 4 +119.710751 36.979927 780 +119.710751 36.984427 542 +119.710751 36.988927 533 +119.710751 36.993427 1826 +119.710751 36.997927 19 +119.716251 35.638927 1814 +119.716251 35.647927 589 +119.716251 35.692927 279 +119.716251 35.697427 9 +119.716251 35.728927 136 +119.716251 35.769427 630 +119.716251 35.791927 599 +119.716251 35.823427 33 +119.716251 35.841427 376 +119.716251 35.980927 12 +119.716251 35.998927 399 +119.716251 36.003427 63 +119.716251 36.007927 64 +119.716251 36.012427 11 +119.716251 36.025927 970 +119.716251 36.061927 983 +119.716251 36.097927 4 +119.716251 36.102427 707 +119.716251 36.115927 45 +119.716251 36.120427 12 +119.716251 36.124927 2 +119.716251 36.129427 45 +119.716251 36.133927 11 +119.716251 36.165427 752 +119.716251 36.619927 26 +119.716251 36.624427 2659 +119.716251 36.628927 1150 +119.716251 36.718927 307 +119.716251 36.772927 5 +119.716251 36.781927 7 +119.716251 36.786427 1506 +119.716251 36.790927 945 +119.716251 36.795427 16 +119.716251 36.822427 1058 +119.716251 36.826927 21 +119.716251 36.840427 746 +119.716251 36.862927 1206 +119.716251 36.871927 654 +119.716251 36.885427 376 +119.716251 36.889927 4 +119.716251 36.903427 230 +119.716251 36.921427 1028 +119.716251 36.957427 638 +119.716251 36.961927 3 +119.716251 36.988927 77 +119.716251 36.993427 858 +119.721751 35.643427 5 +119.721751 35.647927 884 +119.721751 35.652427 747 +119.721751 35.661427 439 +119.721751 35.670427 470 +119.721751 35.679427 3 +119.721751 35.683927 16 +119.721751 35.706427 510 +119.721751 35.742427 298 +119.721751 35.787427 11 +119.721751 35.796427 734 +119.721751 35.800927 6154 +119.721751 35.805427 275 +119.721751 35.836927 6 +119.721751 35.841427 914 +119.721751 35.940427 10 +119.721751 35.949427 380 +119.721751 35.953927 245 +119.721751 35.985427 38 +119.721751 35.989927 457 +119.721751 36.016927 601 +119.721751 36.021427 18 +119.721751 36.039427 215 +119.721751 36.061927 6 +119.721751 36.093427 22 +119.721751 36.120427 1 +119.721751 36.124927 291 +119.721751 36.129427 3622 +119.721751 36.133927 41 +119.721751 36.151927 2934 +119.721751 36.610927 1067 +119.721751 36.615427 4 +119.721751 36.619927 66 +119.721751 36.624427 1017 +119.721751 36.628927 19 +119.721751 36.777427 809 +119.721751 36.786427 12 +119.721751 36.804427 284 +119.721751 36.826927 15 +119.721751 36.862927 7 +119.721751 36.867427 122 +119.721751 36.871927 39 +119.721751 36.885427 595 +119.721751 36.889927 4 +119.721751 36.894427 602 +119.721751 36.916927 7 +119.721751 36.930427 4 +119.721751 36.934927 1015 +119.721751 36.957427 11 +119.721751 36.961927 592 +119.727251 35.647927 352 +119.727251 35.652427 198 +119.727251 35.656927 359 +119.727251 35.665927 474 +119.727251 35.670427 33 +119.727251 35.679427 13 +119.727251 35.683927 1227 +119.727251 35.719927 841 +119.727251 35.733427 310 +119.727251 35.764927 58 +119.727251 35.778427 797 +119.727251 35.796427 364 +119.727251 35.800927 1080 +119.727251 35.805427 730 +119.727251 35.940427 1305 +119.727251 35.958427 510 +119.727251 36.007927 1006 +119.727251 36.016927 1 +119.727251 36.048427 582 +119.727251 36.061927 740 +119.727251 36.088927 2705 +119.727251 36.093427 788 +119.727251 36.115927 913 +119.727251 36.124927 784 +119.727251 36.129427 1777 +119.727251 36.133927 5 +119.727251 36.142927 8 +119.727251 36.619927 114 +119.727251 36.624427 14 +119.727251 36.628927 4 +119.727251 36.651427 907 +119.727251 36.664927 591 +119.727251 36.687427 1272 +119.727251 36.709927 13 +119.727251 36.718927 430 +119.727251 36.777427 13 +119.727251 36.781927 1418 +119.727251 36.790927 1095 +119.727251 36.804427 97 +119.727251 36.808927 1032 +119.727251 36.813427 25 +119.727251 36.862927 7 +119.727251 36.867427 865 +119.727251 36.871927 1214 +119.727251 36.876427 3 +119.727251 36.880927 779 +119.727251 36.885427 4 +119.727251 36.898927 589 +119.727251 36.912427 8 +119.727251 36.916927 1485 +119.727251 36.934927 3 +119.727251 36.952927 543 +119.727251 36.957427 162 +119.727251 36.966427 285 +119.727251 36.970927 492 +119.727251 36.975427 482 +119.727251 36.979927 9 +119.732751 35.634427 4 +119.732751 35.656927 13 +119.732751 35.665927 3 +119.732751 35.670427 733 +119.732751 35.710927 77 +119.732751 35.742427 50 +119.732751 35.746927 203 +119.732751 35.764927 297 +119.732751 35.778427 3 +119.732751 35.913427 1504 +119.732751 35.958427 33 +119.732751 35.998927 1467 +119.732751 36.007927 336 +119.732751 36.039427 1774 +119.732751 36.075427 1203 +119.732751 36.088927 19 +119.732751 36.093427 17 +119.732751 36.102427 1136 +119.732751 36.106927 45 +119.732751 36.115927 57 +119.732751 36.142927 1125 +119.732751 36.147427 292 +119.732751 36.574927 5 +119.732751 36.583927 6 +119.732751 36.642427 426 +119.732751 36.682927 245 +119.732751 36.687427 11 +119.732751 36.777427 20 +119.732751 36.781927 6 +119.732751 36.786427 5 +119.732751 36.790927 19 +119.732751 36.795427 345 +119.732751 36.822427 8 +119.732751 36.826927 899 +119.732751 36.862927 10 +119.732751 36.885427 6 +119.732751 36.898927 11 +119.732751 36.916927 28 +119.732751 36.934927 160 +119.732751 36.952927 698 +119.732751 36.961927 4 +119.732751 36.979927 266 +119.732751 36.984427 6 +119.738251 35.589427 373 +119.738251 35.679427 478 +119.738251 35.782927 353 +119.738251 35.796427 8 +119.738251 35.814427 1018 +119.738251 35.823427 332 +119.738251 35.845927 61 +119.738251 35.850427 5 +119.738251 35.854927 629 +119.738251 35.917927 7 +119.738251 35.926927 524 +119.738251 36.025927 538 +119.738251 36.088927 4 +119.738251 36.093427 5 +119.738251 36.106927 13 +119.738251 36.111427 12 +119.738251 36.133927 383 +119.738251 36.138427 5 +119.738251 36.147427 12 +119.738251 36.151927 535 +119.738251 36.574927 871 +119.738251 36.583927 6 +119.738251 36.588427 667 +119.738251 36.601927 2 +119.738251 36.633427 845 +119.738251 36.642427 440 +119.738251 36.732427 6 +119.738251 36.790927 46 +119.738251 36.795427 2690 +119.738251 36.799927 3 +119.738251 36.817927 5 +119.738251 36.822427 809 +119.738251 36.826927 3 +119.738251 36.862927 686 +119.738251 36.916927 628 +119.738251 36.939427 242 +119.743751 35.679427 29 +119.743751 35.683927 1258 +119.743751 35.692927 1190 +119.743751 35.697427 5 +119.743751 35.760427 1267 +119.743751 35.764927 3 +119.743751 35.800927 641 +119.743751 35.827927 528 +119.743751 35.841427 606 +119.743751 35.877427 462 +119.743751 35.886427 6 +119.743751 35.895427 597 +119.743751 35.958427 257 +119.743751 36.111427 861 +119.743751 36.115927 34 +119.743751 36.120427 1456 +119.743751 36.124927 12 +119.743751 36.129427 404 +119.743751 36.138427 335 +119.743751 36.574927 7 +119.743751 36.579427 1064 +119.743751 36.588427 1221 +119.743751 36.597427 4 +119.743751 36.601927 1908 +119.743751 36.606427 5 +119.743751 36.633427 15 +119.743751 36.768427 3 +119.743751 36.790927 215 +119.743751 36.795427 1257 +119.743751 36.817927 519 +119.743751 36.826927 12 +119.743751 36.867427 675 +119.743751 36.876427 2 +119.743751 36.916927 225 +119.743751 36.952927 771 +119.743751 36.975427 7 +119.743751 36.979927 984 +119.743751 36.984427 703 +119.749251 35.634427 507 +119.749251 35.656927 18 +119.749251 35.679427 880 +119.749251 35.683927 1399 +119.749251 35.688427 11 +119.749251 35.692927 7 +119.749251 35.697427 149 +119.749251 35.701927 4 +119.749251 35.706427 1514 +119.749251 35.715427 62 +119.749251 35.719927 1569 +119.749251 35.764927 4 +119.749251 35.791927 72 +119.749251 35.818927 3 +119.749251 35.863927 362 +119.749251 35.886427 606 +119.749251 35.895427 5 +119.749251 35.899927 683 +119.749251 35.976427 1208 +119.749251 35.989927 1248 +119.749251 36.012427 11 +119.749251 36.057427 501 +119.749251 36.066427 553 +119.749251 36.079927 5 +119.749251 36.084427 2286 +119.749251 36.115927 7 +119.749251 36.120427 11 +119.749251 36.124927 480 +119.749251 36.129427 538 +119.749251 36.133927 10 +119.749251 36.138427 5 +119.749251 36.142927 504 +119.749251 36.588427 551 +119.749251 36.592927 4 +119.749251 36.642427 1192 +119.749251 36.687427 791 +119.749251 36.700927 882 +119.749251 36.763927 1120 +119.749251 36.768427 8 +119.749251 36.790927 17 +119.749251 36.795427 15 +119.749251 36.804427 31 +119.749251 36.813427 9 +119.749251 36.817927 1303 +119.749251 36.822427 183 +119.749251 36.876427 571 +119.749251 36.885427 691 +119.749251 36.912427 677 +119.749251 36.934927 398 +119.749251 36.952927 1609 +119.749251 36.957427 40 +119.749251 36.970927 5 +119.749251 36.979927 223 +119.749251 36.984427 12 +119.754751 35.629927 30 +119.754751 35.652427 10 +119.754751 35.656927 1276 +119.754751 35.665927 3 +119.754751 35.670427 3 +119.754751 35.679427 5 +119.754751 35.683927 20 +119.754751 35.688427 20 +119.754751 35.706427 102 +119.754751 35.715427 6 +119.754751 35.719927 60 +119.754751 35.746927 824 +119.754751 35.764927 6 +119.754751 35.769427 270 +119.754751 35.814427 1968 +119.754751 35.827927 53 +119.754751 35.836927 447 +119.754751 35.841427 135 +119.754751 35.863927 107 +119.754751 35.872927 422 +119.754751 35.890927 121 +119.754751 35.922427 402 +119.754751 35.926927 354 +119.754751 35.949427 976 +119.754751 35.953927 5 +119.754751 35.962927 284 +119.754751 35.985427 12 +119.754751 35.989927 395 +119.754751 36.043927 660 +119.754751 36.052927 501 +119.754751 36.061927 334 +119.754751 36.070927 300 +119.754751 36.075427 811 +119.754751 36.133927 4 +119.754751 36.655927 5 +119.754751 36.673927 1368 +119.754751 36.700927 8 +119.754751 36.745927 4 +119.754751 36.750427 882 +119.754751 36.799927 47 +119.754751 36.804427 46 +119.754751 36.817927 42 +119.754751 36.822427 8 +119.754751 36.826927 581 +119.754751 36.844927 275 +119.754751 36.849427 369 +119.754751 36.853927 3 +119.754751 36.912427 201 +119.754751 36.916927 434 +119.754751 36.957427 5 +119.760251 35.629927 47 +119.760251 35.656927 7 +119.760251 35.692927 7 +119.760251 35.697427 4 +119.760251 35.733427 4 +119.760251 35.746927 389 +119.760251 35.769427 662 +119.760251 35.773927 7 +119.760251 35.782927 106 +119.760251 35.818927 14 +119.760251 35.836927 162 +119.760251 35.845927 1012 +119.760251 35.877427 1060 +119.760251 35.989927 742 +119.760251 36.034927 1572 +119.760251 36.039427 8 +119.760251 36.057427 703 +119.760251 36.066427 414 +119.760251 36.070927 6 +119.760251 36.097927 451 +119.760251 36.115927 478 +119.760251 36.151927 909 +119.760251 36.565927 1137 +119.760251 36.570427 10 +119.760251 36.597427 869 +119.760251 36.615427 153 +119.760251 36.673927 12 +119.760251 36.678427 865 +119.760251 36.718927 415 +119.760251 36.723427 3 +119.760251 36.741427 593 +119.760251 36.750427 6 +119.760251 36.808927 1856 +119.760251 36.813427 4 +119.760251 36.822427 8 +119.760251 36.930427 31 +119.760251 36.939427 300 +119.760251 36.966427 250 +119.760251 36.970927 5 +119.765751 35.593927 298 +119.765751 35.598427 3014 +119.765751 35.620927 31 +119.765751 35.656927 44 +119.765751 35.661427 4 +119.765751 35.679427 834 +119.765751 35.692927 173 +119.765751 35.697427 725 +119.765751 35.706427 945 +119.765751 35.710927 53 +119.765751 35.719927 462 +119.765751 35.724427 719 +119.765751 35.728927 4 +119.765751 35.733427 26 +119.765751 35.737927 1153 +119.765751 35.922427 301 +119.765751 35.949427 1337 +119.765751 36.039427 706 +119.765751 36.106927 796 +119.765751 36.115927 636 +119.765751 36.133927 1902 +119.765751 36.138427 29 +119.765751 36.709927 4 +119.765751 36.714427 12 +119.765751 36.718927 179 +119.765751 36.808927 1245 +119.765751 36.813427 255 +119.765751 36.907927 300 +119.765751 36.925927 42 +119.765751 36.930427 1868 +119.765751 36.934927 533 +119.765751 36.948427 255 +119.765751 36.966427 1555 +119.765751 36.970927 63 +119.765751 36.979927 422 +119.765751 36.988927 4 +119.771251 35.580427 4 +119.771251 35.620927 345 +119.771251 35.625427 5 +119.771251 35.629927 1283 +119.771251 35.643427 936 +119.771251 35.647927 5 +119.771251 35.656927 991 +119.771251 35.670427 8 +119.771251 35.674927 3 +119.771251 35.692927 315 +119.771251 35.697427 5 +119.771251 35.701927 4 +119.771251 35.706427 223 +119.771251 35.724427 51 +119.771251 35.773927 10 +119.771251 35.778427 9 +119.771251 35.782927 7 +119.771251 35.850427 256 +119.771251 35.872927 571 +119.771251 35.877427 940 +119.771251 35.935927 37 +119.771251 35.949427 33 +119.771251 35.967427 578 +119.771251 35.989927 334 +119.771251 35.994427 795 +119.771251 35.998927 36 +119.771251 36.016927 380 +119.771251 36.030427 260 +119.771251 36.034927 405 +119.771251 36.057427 2 +119.771251 36.088927 1157 +119.771251 36.102427 839 +119.771251 36.138427 3 +119.771251 36.156427 542 +119.771251 36.565927 144 +119.771251 36.610927 354 +119.771251 36.633427 1526 +119.771251 36.700927 371 +119.771251 36.714427 9 +119.771251 36.732427 11 +119.771251 36.736927 230 +119.771251 36.741427 163 +119.771251 36.745927 36 +119.771251 36.808927 5 +119.771251 36.813427 24 +119.771251 36.817927 9 +119.771251 36.907927 1341 +119.771251 36.930427 26 +119.771251 36.934927 43 +119.771251 36.943927 947 +119.771251 36.948427 19 +119.771251 36.979927 588 +119.771251 36.988927 628 +119.771251 36.997927 712 +119.776751 35.625427 489 +119.776751 35.629927 11 +119.776751 35.638927 45 +119.776751 35.643427 345 +119.776751 35.652427 756 +119.776751 35.656927 14 +119.776751 35.670427 766 +119.776751 35.674927 20 +119.776751 35.688427 30 +119.776751 35.692927 1095 +119.776751 35.697427 845 +119.776751 35.701927 3753 +119.776751 35.706427 110 +119.776751 35.710927 38 +119.776751 35.719927 9 +119.776751 35.724427 708 +119.776751 35.742427 2 +119.776751 35.746927 1036 +119.776751 35.760427 838 +119.776751 35.773927 637 +119.776751 35.787427 300 +119.776751 35.796427 4 +119.776751 35.850427 825 +119.776751 35.935927 11 +119.776751 35.940427 751 +119.776751 35.944927 976 +119.776751 35.971927 6 +119.776751 36.048427 13 +119.776751 36.052927 6 +119.776751 36.057427 57 +119.776751 36.142927 5 +119.776751 36.160927 620 +119.776751 36.561427 6 +119.776751 36.583927 488 +119.776751 36.588427 4 +119.776751 36.610927 4 +119.776751 36.651427 6 +119.776751 36.655927 8 +119.776751 36.678427 593 +119.776751 36.736927 4 +119.776751 36.745927 16 +119.776751 36.804427 1424 +119.776751 36.808927 8 +119.776751 36.817927 27 +119.776751 36.849427 431 +119.776751 36.871927 688 +119.776751 36.880927 800 +119.776751 36.885427 17 +119.776751 36.894427 299 +119.776751 36.930427 330 +119.776751 36.943927 34 +119.776751 36.948427 590 +119.776751 36.970927 6 +119.776751 36.997927 34 +119.782251 35.607427 9 +119.782251 35.620927 16 +119.782251 35.625427 5 +119.782251 35.638927 905 +119.782251 35.647927 8 +119.782251 35.665927 22 +119.782251 35.670427 88 +119.782251 35.679427 695 +119.782251 35.688427 622 +119.782251 35.692927 60 +119.782251 35.697427 2110 +119.782251 35.701927 5750 +119.782251 35.706427 1473 +119.782251 35.710927 657 +119.782251 35.778427 4 +119.782251 35.787427 137 +119.782251 35.800927 560 +119.782251 35.850427 717 +119.782251 35.868427 412 +119.782251 35.913427 10 +119.782251 35.922427 6 +119.782251 35.940427 6970 +119.782251 35.944927 209 +119.782251 35.971927 989 +119.782251 35.976427 4 +119.782251 36.048427 835 +119.782251 36.052927 2 +119.782251 36.057427 59 +119.782251 36.061927 41 +119.782251 36.084427 408 +119.782251 36.093427 2367 +119.782251 36.120427 7 +119.782251 36.142927 4 +119.782251 36.147427 1528 +119.782251 36.552427 3 +119.782251 36.556927 1154 +119.782251 36.561427 671 +119.782251 36.570427 393 +119.782251 36.615427 5 +119.782251 36.619927 720 +119.782251 36.651427 8 +119.782251 36.655927 2107 +119.782251 36.678427 335 +119.782251 36.682927 6 +119.782251 36.700927 449 +119.782251 36.804427 16 +119.782251 36.808927 445 +119.782251 36.813427 9 +119.782251 36.817927 1081 +119.782251 36.822427 9 +119.782251 36.871927 7 +119.782251 36.948427 2 +119.782251 36.966427 7 +119.782251 36.970927 988 +119.782251 36.993427 12 +119.787751 35.620927 756 +119.787751 35.625427 833 +119.787751 35.647927 424 +119.787751 35.665927 1759 +119.787751 35.692927 589 +119.787751 35.697427 1421 +119.787751 35.701927 634 +119.787751 35.706427 12 +119.787751 35.751427 30 +119.787751 35.778427 569 +119.787751 35.850427 14 +119.787751 35.872927 447 +119.787751 35.877427 5 +119.787751 35.886427 253 +119.787751 35.935927 5 +119.787751 35.940427 268 +119.787751 35.944927 137 +119.787751 36.016927 260 +119.787751 36.052927 2375 +119.787751 36.057427 13 +119.787751 36.061927 31 +119.787751 36.066427 4 +119.787751 36.075427 913 +119.787751 36.088927 587 +119.787751 36.120427 776 +119.787751 36.156427 241 +119.787751 36.552427 547 +119.787751 36.556927 8 +119.787751 36.561427 652 +119.787751 36.597427 15 +119.787751 36.615427 6 +119.787751 36.619927 6 +119.787751 36.651427 3 +119.787751 36.655927 988 +119.787751 36.660427 2635 +119.787751 36.678427 365 +119.787751 36.682927 717 +119.787751 36.718927 976 +119.787751 36.723427 1 +119.787751 36.777427 4 +119.787751 36.795427 1143 +119.787751 36.808927 498 +119.787751 36.871927 915 +119.787751 36.907927 4 +119.787751 36.934927 1049 +119.787751 36.948427 27 +119.787751 36.952927 644 +119.787751 36.970927 104 +119.787751 36.975427 5 +119.787751 36.993427 329 +119.787751 36.997927 832 +119.793251 35.688427 622 +119.793251 35.710927 22 +119.793251 35.715427 586 +119.793251 35.719927 17 +119.793251 35.733427 1358 +119.793251 35.737927 1002 +119.793251 35.742427 4 +119.793251 35.746927 9 +119.793251 35.751427 922 +119.793251 35.755927 1388 +119.793251 35.778427 227 +119.793251 35.782927 58 +119.793251 35.796427 864 +119.793251 35.881927 1719 +119.793251 35.935927 842 +119.793251 35.940427 8 +119.793251 35.944927 22 +119.793251 35.958427 180 +119.793251 35.998927 626 +119.793251 36.016927 246 +119.793251 36.030427 122 +119.793251 36.061927 1035 +119.793251 36.084427 371 +119.793251 36.115927 751 +119.793251 36.120427 6 +119.793251 36.142927 2650 +119.793251 36.147427 173 +119.793251 36.574927 222 +119.793251 36.579427 6 +119.793251 36.597427 3 +119.793251 36.601927 2557 +119.793251 36.615427 557 +119.793251 36.637927 805 +119.793251 36.718927 11 +119.793251 36.723427 259 +119.793251 36.763927 7 +119.793251 36.795427 9 +119.793251 36.808927 21 +119.793251 36.817927 13 +119.793251 36.889927 8 +119.793251 36.894427 582 +119.793251 36.903427 15 +119.793251 36.907927 716 +119.793251 36.921427 529 +119.793251 36.934927 8 +119.793251 36.939427 3 +119.793251 36.961927 737 +119.793251 36.988927 749 +119.793251 36.993427 39 +119.793251 36.997927 15 +119.798751 35.643427 7 +119.798751 35.688427 664 +119.798751 35.710927 3 +119.798751 35.715427 4 +119.798751 35.719927 5 +119.798751 35.742427 497 +119.798751 35.751427 29 +119.798751 35.755927 87 +119.798751 35.782927 1347 +119.798751 35.805427 951 +119.798751 35.859427 336 +119.798751 36.016927 184 +119.798751 36.039427 9 +119.798751 36.084427 3 +119.798751 36.142927 55 +119.798751 36.147427 23 +119.798751 36.151927 18 +119.798751 36.561427 318 +119.798751 36.574927 405 +119.798751 36.601927 3 +119.798751 36.615427 1431 +119.798751 36.628927 392 +119.798751 36.637927 226 +119.798751 36.678427 414 +119.798751 36.705427 176 +119.798751 36.723427 4 +119.798751 36.885427 347 +119.798751 36.966427 4 +119.798751 36.979927 4 +119.798751 36.988927 3 +119.798751 36.993427 1659 +119.804251 35.643427 2372 +119.804251 35.647927 4 +119.804251 35.652427 188 +119.804251 35.656927 43 +119.804251 35.661427 457 +119.804251 35.679427 73 +119.804251 35.683927 605 +119.804251 35.688427 12 +119.804251 35.692927 358 +119.804251 35.710927 917 +119.804251 35.719927 4 +119.804251 35.724427 1386 +119.804251 35.755927 4 +119.804251 35.760427 462 +119.804251 35.782927 96 +119.804251 35.791927 147 +119.804251 35.818927 815 +119.804251 35.863927 724 +119.804251 35.890927 16 +119.804251 35.922427 704 +119.804251 35.926927 3 +119.804251 35.944927 826 +119.804251 35.971927 3 +119.804251 35.976427 1702 +119.804251 36.034927 793 +119.804251 36.075427 1175 +119.804251 36.088927 10 +119.804251 36.093427 718 +119.804251 36.102427 500 +119.804251 36.115927 519 +119.804251 36.133927 10 +119.804251 36.138427 2346 +119.804251 36.574927 6 +119.804251 36.583927 201 +119.804251 36.588427 471 +119.804251 36.637927 1475 +119.804251 36.655927 473 +119.804251 36.673927 3 +119.804251 36.678427 261 +119.804251 36.682927 18 +119.804251 36.727927 18 +119.804251 36.804427 166 +119.804251 36.840427 3 +119.804251 36.844927 518 +119.804251 36.849427 11 +119.804251 36.867427 480 +119.804251 36.871927 4 +119.804251 36.885427 708 +119.804251 36.898927 127 +119.804251 36.912427 266 +119.804251 36.921427 2 +119.804251 36.925927 602 +119.804251 36.939427 900 +119.804251 36.957427 955 +119.804251 36.961927 8 +119.804251 36.966427 615 +119.804251 36.970927 11 +119.804251 36.984427 252 +119.804251 36.988927 7 +119.804251 36.993427 56 +119.804251 36.997927 45 +119.804251 37.002427 622 +119.804251 37.006927 110 +119.809751 35.647927 90 +119.809751 35.656927 5 +119.809751 35.661427 26 +119.809751 35.665927 161 +119.809751 35.674927 86 +119.809751 35.697427 335 +119.809751 35.742427 4 +119.809751 35.746927 797 +119.809751 35.751427 3 +119.809751 35.773927 4 +119.809751 35.778427 9 +119.809751 35.782927 135 +119.809751 35.787427 1453 +119.809751 35.949427 257 +119.809751 36.030427 24 +119.809751 36.057427 947 +119.809751 36.111427 501 +119.809751 36.138427 11 +119.809751 36.228427 9 +119.809751 36.232927 1857 +119.809751 36.588427 3249 +119.809751 36.597427 344 +119.809751 36.601927 5 +119.809751 36.610927 222 +119.809751 36.615427 921 +119.809751 36.700927 895 +119.809751 36.714427 691 +119.809751 36.723427 5 +119.809751 36.727927 4 +119.809751 36.732427 2042 +119.809751 36.736927 567 +119.809751 36.741427 83 +119.809751 36.795427 422 +119.809751 36.813427 421 +119.809751 36.831427 30 +119.809751 36.867427 693 +119.809751 36.934927 252 +119.809751 36.970927 893 +119.809751 36.993427 5 +119.815251 35.647927 8 +119.815251 35.661427 502 +119.815251 35.665927 376 +119.815251 35.670427 40 +119.815251 35.679427 965 +119.815251 35.683927 13 +119.815251 35.688427 2 +119.815251 35.724427 1081 +119.815251 35.737927 1471 +119.815251 35.746927 8 +119.815251 35.751427 4 +119.815251 35.755927 3 +119.815251 35.769427 10 +119.815251 35.778427 4 +119.815251 35.881927 306 +119.815251 35.895427 1042 +119.815251 35.917927 1317 +119.815251 35.949427 5 +119.815251 35.985427 157 +119.815251 36.007927 963 +119.815251 36.012427 3 +119.815251 36.034927 321 +119.815251 36.165427 302 +119.815251 36.223927 723 +119.815251 36.228427 4 +119.815251 36.232927 20 +119.815251 36.543427 518 +119.815251 36.570427 259 +119.815251 36.583927 420 +119.815251 36.592927 313 +119.815251 36.601927 810 +119.815251 36.615427 401 +119.815251 36.619927 8 +119.815251 36.682927 5 +119.815251 36.723427 6 +119.815251 36.727927 10 +119.815251 36.732427 1118 +119.815251 36.736927 6 +119.815251 36.750427 19 +119.815251 36.759427 4 +119.815251 36.799927 2 +119.815251 36.804427 272 +119.815251 36.831427 616 +119.815251 36.835927 325 +119.815251 36.880927 136 +119.815251 36.898927 537 +119.815251 36.903427 623 +119.815251 36.925927 1502 +119.815251 36.930427 4 +119.815251 36.970927 464 +119.815251 36.975427 524 +119.815251 36.988927 502 +119.815251 36.993427 9 +119.820751 35.670427 796 +119.820751 35.683927 497 +119.820751 35.751427 73 +119.820751 35.755927 2188 +119.820751 35.769427 1126 +119.820751 35.773927 5 +119.820751 35.778427 4 +119.820751 35.877427 149 +119.820751 35.881927 102 +119.820751 35.895427 475 +119.820751 35.953927 402 +119.820751 36.021427 14 +119.820751 36.070927 1195 +119.820751 36.075427 3 +119.820751 36.115927 692 +119.820751 36.156427 255 +119.820751 36.219427 316 +119.820751 36.223927 2 +119.820751 36.255427 338 +119.820751 36.538927 400 +119.820751 36.592927 120 +119.820751 36.615427 4 +119.820751 36.619927 11 +119.820751 36.660427 1849 +119.820751 36.682927 1542 +119.820751 36.687427 6 +119.820751 36.732427 5 +119.820751 36.736927 9 +119.820751 36.754927 3 +119.820751 36.759427 1248 +119.820751 36.790927 4 +119.820751 36.795427 1000 +119.820751 36.813427 459 +119.820751 36.822427 18 +119.820751 36.835927 3 +119.820751 36.858427 9 +119.820751 36.862927 5 +119.820751 36.871927 694 +119.820751 36.898927 13 +119.820751 36.921427 1 +119.820751 36.934927 438 +119.820751 36.939427 249 +119.820751 36.957427 135 +119.820751 36.970927 994 +119.820751 36.984427 4 +119.826251 35.674927 83 +119.826251 35.688427 3 +119.826251 35.692927 8 +119.826251 35.787427 7 +119.826251 35.805427 1082 +119.826251 35.818927 4 +119.826251 35.845927 87 +119.826251 35.971927 213 +119.826251 36.012427 653 +119.826251 36.030427 152 +119.826251 36.043927 219 +119.826251 36.052927 95 +119.826251 36.070927 378 +119.826251 36.075427 476 +119.826251 36.097927 476 +119.826251 36.138427 764 +119.826251 36.169927 247 +119.826251 36.196927 435 +119.826251 36.246427 870 +119.826251 36.565927 296 +119.826251 36.570427 434 +119.826251 36.579427 308 +119.826251 36.588427 8 +119.826251 36.615427 263 +119.826251 36.655927 626 +119.826251 36.709927 406 +119.826251 36.727927 1 +119.826251 36.732427 746 +119.826251 36.754927 790 +119.826251 36.772927 742 +119.826251 36.835927 16 +119.826251 36.849427 606 +119.826251 36.871927 49 +119.826251 36.876427 14 +119.826251 36.885427 1025 +119.826251 36.889927 7 +119.826251 36.894427 445 +119.826251 36.898927 248 +119.826251 36.925927 407 +119.826251 36.948427 244 +119.826251 36.957427 3 +119.826251 36.975427 481 +119.826251 36.979927 358 +119.826251 36.984427 413 +119.831751 35.625427 5 +119.831751 35.674927 214 +119.831751 35.692927 1008 +119.831751 35.697427 4 +119.831751 35.742427 617 +119.831751 35.751427 489 +119.831751 35.755927 1 +119.831751 35.782927 6 +119.831751 35.787427 1320 +119.831751 35.832427 52 +119.831751 35.913427 227 +119.831751 36.048427 271 +119.831751 36.070927 563 +119.831751 36.075427 12 +119.831751 36.097927 625 +119.831751 36.102427 9 +119.831751 36.129427 826 +119.831751 36.169927 19 +119.831751 36.232927 3 +119.831751 36.237427 911 +119.831751 36.565927 639 +119.831751 36.579427 164 +119.831751 36.588427 15 +119.831751 36.606427 6 +119.831751 36.633427 38 +119.831751 36.669427 429 +119.831751 36.745927 790 +119.831751 36.750427 16 +119.831751 36.754927 26 +119.831751 36.759427 357 +119.831751 36.763927 387 +119.831751 36.876427 807 +119.831751 36.885427 4 +119.831751 36.889927 16 +119.831751 36.898927 14 +119.831751 36.912427 5 +119.831751 36.921427 894 +119.831751 36.930427 2 +119.831751 36.948427 3 +119.831751 36.957427 3 +119.831751 36.961927 758 +119.831751 36.975427 10 +119.831751 36.988927 8 +119.837251 35.625427 7 +119.837251 35.629927 936 +119.837251 35.638927 760 +119.837251 35.679427 1078 +119.837251 35.688427 1569 +119.837251 35.692927 669 +119.837251 35.715427 635 +119.837251 35.724427 3 +119.837251 35.751427 16 +119.837251 35.760427 341 +119.837251 35.764927 9 +119.837251 35.769427 881 +119.837251 35.791927 457 +119.837251 35.796427 1170 +119.837251 35.800927 10 +119.837251 35.818927 629 +119.837251 35.872927 201 +119.837251 35.931427 903 +119.837251 35.976427 5 +119.837251 35.985427 791 +119.837251 36.016927 6 +119.837251 36.034927 160 +119.837251 36.075427 10 +119.837251 36.093427 9 +119.837251 36.097927 2138 +119.837251 36.102427 200 +119.837251 36.129427 671 +119.837251 36.160927 753 +119.837251 36.169927 12 +119.837251 36.219427 633 +119.837251 36.223927 778 +119.837251 36.228427 285 +119.837251 36.237427 4 +119.837251 36.583927 4 +119.837251 36.601927 189 +119.837251 36.606427 231 +119.837251 36.615427 720 +119.837251 36.619927 1408 +119.837251 36.646927 1080 +119.837251 36.651427 8 +119.837251 36.673927 4 +119.837251 36.678427 474 +119.837251 36.705427 777 +119.837251 36.714427 571 +119.837251 36.745927 243 +119.837251 36.750427 438 +119.837251 36.754927 364 +119.837251 36.763927 2 +119.837251 36.772927 272 +119.837251 36.826927 5 +119.837251 36.831427 798 +119.837251 36.858427 231 +119.837251 36.871927 166 +119.837251 36.912427 363 +119.837251 36.916927 1 +119.837251 36.921427 360 +119.837251 36.925927 1672 +119.837251 36.930427 651 +119.837251 36.934927 8 +119.837251 36.948427 392 +119.837251 36.975427 159 +119.837251 36.979927 59 +119.842751 35.638927 11 +119.842751 35.719927 235 +119.842751 35.737927 208 +119.842751 35.800927 1372 +119.842751 35.814427 8 +119.842751 35.818927 24 +119.842751 35.850427 196 +119.842751 36.003427 1345 +119.842751 36.007927 4 +119.842751 36.075427 815 +119.842751 36.079927 385 +119.842751 36.084427 696 +119.842751 36.088927 355 +119.842751 36.093427 576 +119.842751 36.097927 359 +119.842751 36.102427 608 +119.842751 36.124927 732 +119.842751 36.147427 285 +119.842751 36.165427 13 +119.842751 36.183427 365 +119.842751 36.201427 3 +119.842751 36.205927 727 +119.842751 36.250927 2278 +119.842751 36.273427 4 +119.842751 36.282427 1149 +119.842751 36.534427 291 +119.842751 36.538927 6 +119.842751 36.543427 164 +119.842751 36.561427 215 +119.842751 36.583927 314 +119.842751 36.606427 289 +119.842751 36.615427 3 +119.842751 36.646927 35 +119.842751 36.687427 367 +119.842751 36.718927 407 +119.842751 36.727927 114 +119.842751 36.732427 229 +119.842751 36.750427 35 +119.842751 36.763927 9 +119.842751 36.781927 2 +119.842751 36.786427 838 +119.842751 36.799927 8 +119.842751 36.835927 4 +119.842751 36.867427 738 +119.842751 36.871927 12 +119.842751 36.921427 33 +119.842751 36.925927 478 +119.842751 36.975427 16 +119.842751 36.979927 297 +119.842751 36.984427 918 +119.848251 35.643427 1461 +119.848251 35.661427 121 +119.848251 35.674927 269 +119.848251 35.679427 5 +119.848251 35.683927 899 +119.848251 35.688427 603 +119.848251 35.692927 548 +119.848251 35.710927 153 +119.848251 35.733427 415 +119.848251 35.814427 545 +119.848251 35.872927 286 +119.848251 35.944927 43 +119.848251 35.949427 6 +119.848251 36.016927 9 +119.848251 36.021427 1106 +119.848251 36.025927 875 +119.848251 36.093427 8 +119.848251 36.138427 6 +119.848251 36.169927 8 +119.848251 36.187927 108 +119.848251 36.192427 2 +119.848251 36.232927 11 +119.848251 36.237427 582 +119.848251 36.241927 5 +119.848251 36.246427 30 +119.848251 36.250927 365 +119.848251 36.255427 7 +119.848251 36.259927 1063 +119.848251 36.264427 220 +119.848251 36.268927 691 +119.848251 36.273427 2696 +119.848251 36.282427 8 +119.848251 36.579427 391 +119.848251 36.588427 457 +119.848251 36.597427 3 +119.848251 36.664927 3 +119.848251 36.678427 253 +119.848251 36.691927 4 +119.848251 36.714427 4 +119.848251 36.732427 359 +119.848251 36.741427 6 +119.848251 36.772927 285 +119.848251 36.777427 28 +119.848251 36.786427 2751 +119.848251 36.790927 361 +119.848251 36.795427 224 +119.848251 36.799927 1558 +119.848251 36.804427 20 +119.848251 36.813427 595 +119.848251 36.903427 1126 +119.848251 36.925927 6 +119.848251 36.934927 305 +119.848251 36.952927 645 +119.848251 36.975427 9 +119.848251 36.979927 1700 +119.848251 36.984427 1073 +119.848251 36.988927 536 +119.848251 36.993427 570 +119.853751 35.661427 219 +119.853751 35.683927 22 +119.853751 35.688427 4727 +119.853751 35.751427 362 +119.853751 35.760427 852 +119.853751 35.778427 197 +119.853751 35.800927 507 +119.853751 35.832427 506 +119.853751 35.841427 913 +119.853751 35.904427 417 +119.853751 35.944927 3015 +119.853751 35.949427 18 +119.853751 35.958427 471 +119.853751 36.102427 1045 +119.853751 36.106927 387 +119.853751 36.120427 868 +119.853751 36.138427 704 +119.853751 36.169927 1065 +119.853751 36.174427 9 +119.853751 36.196927 362 +119.853751 36.205927 435 +119.853751 36.210427 26 +119.853751 36.250927 2 +119.853751 36.273427 28 +119.853751 36.277927 638 +119.853751 36.282427 8 +119.853751 36.286927 20 +119.853751 36.538927 15 +119.853751 36.570427 781 +119.853751 36.601927 233 +119.853751 36.606427 11 +119.853751 36.610927 667 +119.853751 36.655927 857 +119.853751 36.664927 625 +119.853751 36.691927 1447 +119.853751 36.709927 1304 +119.853751 36.714427 7 +119.853751 36.768427 100 +119.853751 36.772927 733 +119.853751 36.786427 13 +119.853751 36.790927 9 +119.853751 36.795427 813 +119.853751 36.813427 26 +119.853751 36.822427 1200 +119.853751 36.826927 6 +119.853751 36.831427 4 +119.853751 36.835927 430 +119.853751 36.885427 12 +119.853751 36.889927 7 +119.853751 36.894427 850 +119.853751 36.898927 16 +119.853751 36.903427 1145 +119.853751 36.907927 5 +119.853751 36.952927 901 +119.853751 36.979927 721 +119.853751 36.988927 2 +119.853751 36.993427 4 +119.859251 35.625427 1533 +119.859251 35.652427 6 +119.859251 35.674927 1069 +119.859251 35.683927 47 +119.859251 35.706427 4 +119.859251 35.710927 49 +119.859251 35.751427 16 +119.859251 35.841427 261 +119.859251 35.904427 2 +119.859251 35.944927 35 +119.859251 35.949427 4 +119.859251 35.998927 326 +119.859251 36.043927 967 +119.859251 36.111427 550 +119.859251 36.120427 754 +119.859251 36.138427 658 +119.859251 36.151927 190 +119.859251 36.156427 144 +119.859251 36.196927 6 +119.859251 36.210427 1251 +119.859251 36.228427 1409 +119.859251 36.232927 30 +119.859251 36.237427 4 +119.859251 36.259927 731 +119.859251 36.277927 24 +119.859251 36.282427 734 +119.859251 36.286927 4 +119.859251 36.552427 267 +119.859251 36.637927 4 +119.859251 36.646927 703 +119.859251 36.655927 10 +119.859251 36.741427 4 +119.859251 36.790927 193 +119.859251 36.795427 4 +119.859251 36.808927 3 +119.859251 36.840427 822 +119.859251 36.844927 1098 +119.859251 36.862927 2 +119.859251 36.885427 524 +119.859251 36.889927 1 +119.859251 36.894427 400 +119.859251 36.898927 155 +119.859251 36.903427 1399 +119.859251 36.916927 745 +119.859251 36.921427 3 +119.859251 36.939427 4 +119.859251 36.957427 349 +119.859251 36.979927 582 +119.859251 36.984427 4 +119.864751 35.647927 61 +119.864751 35.652427 12 +119.864751 35.656927 4 +119.864751 35.661427 326 +119.864751 35.688427 204 +119.864751 35.733427 488 +119.864751 35.746927 780 +119.864751 35.751427 583 +119.864751 35.791927 505 +119.864751 35.796427 6 +119.864751 35.800927 186 +119.864751 35.827927 167 +119.864751 35.836927 540 +119.864751 35.841427 20 +119.864751 35.886427 84 +119.864751 35.908927 2 +119.864751 35.953927 371 +119.864751 35.980927 648 +119.864751 36.088927 200 +119.864751 36.142927 259 +119.864751 36.156427 11 +119.864751 36.160927 473 +119.864751 36.205927 747 +119.864751 36.210427 273 +119.864751 36.250927 1083 +119.864751 36.255427 9 +119.864751 36.583927 46 +119.864751 36.592927 242 +119.864751 36.601927 2 +119.864751 36.624427 317 +119.864751 36.633427 171 +119.864751 36.646927 422 +119.864751 36.651427 143 +119.864751 36.700927 753 +119.864751 36.723427 731 +119.864751 36.741427 1398 +119.864751 36.750427 56 +119.864751 36.763927 790 +119.864751 36.768427 522 +119.864751 36.840427 4 +119.864751 36.844927 275 +119.864751 36.849427 121 +119.864751 36.853927 3 +119.864751 36.862927 8 +119.864751 36.889927 200 +119.864751 36.894427 1315 +119.864751 36.898927 2778 +119.864751 36.903427 6 +119.864751 36.934927 5 +119.864751 36.939427 1157 +119.864751 36.957427 2 +119.864751 36.988927 780 +119.870251 35.616427 1241 +119.870251 35.643427 1627 +119.870251 35.652427 1022 +119.870251 35.674927 24 +119.870251 35.679427 556 +119.870251 35.683927 4 +119.870251 35.688427 391 +119.870251 35.710927 463 +119.870251 35.728927 475 +119.870251 35.773927 27 +119.870251 35.778427 276 +119.870251 35.791927 5 +119.870251 35.796427 3 +119.870251 35.800927 765 +119.870251 35.854927 20 +119.870251 35.908927 6 +119.870251 35.913427 149 +119.870251 35.953927 9 +119.870251 35.958427 388 +119.870251 35.962927 3 +119.870251 35.985427 6 +119.870251 36.030427 1503 +119.870251 36.034927 271 +119.870251 36.106927 4 +119.870251 36.160927 922 +119.870251 36.187927 30 +119.870251 36.210427 14 +119.870251 36.219427 1108 +119.870251 36.228427 514 +119.870251 36.232927 200 +119.870251 36.246427 734 +119.870251 36.295927 1132 +119.870251 36.534427 185 +119.870251 36.556927 61 +119.870251 36.561427 478 +119.870251 36.565927 319 +119.870251 36.583927 1532 +119.870251 36.588427 5 +119.870251 36.606427 384 +119.870251 36.633427 330 +119.870251 36.669427 96 +119.870251 36.768427 23 +119.870251 36.772927 1436 +119.870251 36.844927 517 +119.870251 36.862927 764 +119.870251 36.871927 720 +119.870251 36.894427 24 +119.870251 36.898927 14 +119.870251 36.916927 294 +119.870251 36.934927 6 +119.870251 36.939427 393 +119.870251 36.957427 672 +119.870251 36.979927 37 +119.870251 36.988927 1127 +119.875751 35.629927 17 +119.875751 35.634427 36 +119.875751 35.647927 1560 +119.875751 35.652427 585 +119.875751 35.670427 1072 +119.875751 35.674927 3 +119.875751 35.679427 208 +119.875751 35.688427 514 +119.875751 35.697427 305 +119.875751 35.773927 854 +119.875751 35.778427 529 +119.875751 35.782927 412 +119.875751 35.796427 764 +119.875751 35.814427 651 +119.875751 35.850427 491 +119.875751 35.854927 5 +119.875751 35.908927 13 +119.875751 35.917927 20 +119.875751 35.958427 4 +119.875751 36.007927 5 +119.875751 36.048427 474 +119.875751 36.057427 10 +119.875751 36.061927 626 +119.875751 36.075427 243 +119.875751 36.084427 276 +119.875751 36.102427 8 +119.875751 36.111427 1805 +119.875751 36.133927 407 +119.875751 36.138427 1311 +119.875751 36.178927 538 +119.875751 36.201427 335 +119.875751 36.205927 1237 +119.875751 36.223927 40 +119.875751 36.228427 123 +119.875751 36.259927 15 +119.875751 36.273427 7 +119.875751 36.277927 1653 +119.875751 36.565927 289 +119.875751 36.570427 7 +119.875751 36.583927 566 +119.875751 36.588427 12 +119.875751 36.633427 5 +119.875751 36.637927 430 +119.875751 36.664927 12 +119.875751 36.669427 1579 +119.875751 36.673927 128 +119.875751 36.678427 12 +119.875751 36.682927 2152 +119.875751 36.709927 4 +119.875751 36.714427 1044 +119.875751 36.745927 10 +119.875751 36.750427 4 +119.875751 36.768427 6 +119.875751 36.777427 191 +119.875751 36.786427 569 +119.875751 36.790927 1741 +119.875751 36.871927 14 +119.875751 36.894427 1116 +119.875751 36.898927 4 +119.875751 36.943927 4 +119.875751 36.948427 3 +119.875751 36.952927 2520 +119.875751 36.957427 270 +119.875751 36.961927 754 +119.881251 35.634427 243 +119.881251 35.638927 4 +119.881251 35.643427 582 +119.881251 35.647927 5 +119.881251 35.719927 486 +119.881251 35.737927 18 +119.881251 35.742427 22 +119.881251 35.746927 52 +119.881251 35.751427 68 +119.881251 35.791927 103 +119.881251 35.796427 724 +119.881251 35.850427 30 +119.881251 35.935927 232 +119.881251 35.958427 8 +119.881251 35.976427 1151 +119.881251 36.007927 771 +119.881251 36.012427 10 +119.881251 36.039427 751 +119.881251 36.057427 15 +119.881251 36.066427 335 +119.881251 36.102427 2 +119.881251 36.111427 3 +119.881251 36.129427 369 +119.881251 36.178927 256 +119.881251 36.196927 1025 +119.881251 36.232927 731 +119.881251 36.241927 6 +119.881251 36.259927 1210 +119.881251 36.264427 4 +119.881251 36.291427 38 +119.881251 36.561427 183 +119.881251 36.574927 308 +119.881251 36.583927 449 +119.881251 36.588427 5 +119.881251 36.597427 43 +119.881251 36.601927 8 +119.881251 36.633427 209 +119.881251 36.642427 839 +119.881251 36.664927 8 +119.881251 36.669427 2263 +119.881251 36.673927 507 +119.881251 36.678427 43 +119.881251 36.682927 11 +119.881251 36.696427 756 +119.881251 36.700927 29 +119.881251 36.714427 12 +119.881251 36.727927 418 +119.881251 36.750427 498 +119.881251 36.768427 7 +119.881251 36.772927 608 +119.881251 36.777427 9 +119.881251 36.790927 5 +119.881251 36.804427 14 +119.881251 36.808927 11 +119.881251 36.831427 1116 +119.881251 36.849427 1 +119.881251 36.871927 406 +119.881251 36.876427 692 +119.881251 36.889927 6 +119.881251 36.894427 763 +119.881251 36.903427 507 +119.881251 36.912427 317 +119.881251 36.930427 10 +119.881251 36.934927 411 +119.881251 36.948427 4 +119.881251 36.952927 8 +119.881251 36.957427 690 +119.881251 36.961927 8 +119.881251 36.984427 1419 +119.881251 36.988927 477 +119.886751 35.638927 1472 +119.886751 35.643427 17 +119.886751 35.697427 446 +119.886751 35.719927 4 +119.886751 35.737927 761 +119.886751 35.742427 62 +119.886751 35.746927 118 +119.886751 35.751427 208 +119.886751 35.773927 13 +119.886751 35.805427 20 +119.886751 35.809927 26 +119.886751 35.850427 1715 +119.886751 35.863927 78 +119.886751 35.868427 304 +119.886751 35.958427 46 +119.886751 35.971927 638 +119.886751 35.989927 4 +119.886751 35.994427 1 +119.886751 36.016927 460 +119.886751 36.039427 585 +119.886751 36.057427 453 +119.886751 36.097927 177 +119.886751 36.111427 554 +119.886751 36.147427 902 +119.886751 36.151927 4 +119.886751 36.174427 1122 +119.886751 36.183427 4 +119.886751 36.187927 6 +119.886751 36.214927 1 +119.886751 36.219427 17 +119.886751 36.237427 14 +119.886751 36.250927 4 +119.886751 36.255427 378 +119.886751 36.264427 623 +119.886751 36.291427 1 +119.886751 36.529927 571 +119.886751 36.561427 767 +119.886751 36.588427 917 +119.886751 36.642427 39 +119.886751 36.664927 10 +119.886751 36.669427 1382 +119.886751 36.673927 1191 +119.886751 36.678427 467 +119.886751 36.687427 6 +119.886751 36.700927 302 +119.886751 36.732427 5 +119.886751 36.741427 1020 +119.886751 36.750427 1374 +119.886751 36.772927 207 +119.886751 36.777427 41 +119.886751 36.781927 21 +119.886751 36.808927 32 +119.886751 36.858427 170 +119.886751 36.889927 3 +119.886751 36.894427 1042 +119.886751 36.903427 968 +119.886751 36.912427 329 +119.886751 36.916927 245 +119.886751 36.939427 244 +119.886751 36.988927 20 +119.892251 35.652427 966 +119.892251 35.656927 3 +119.892251 35.688427 731 +119.892251 35.715427 473 +119.892251 35.746927 400 +119.892251 35.751427 153 +119.892251 35.755927 61 +119.892251 35.773927 960 +119.892251 35.787427 44 +119.892251 35.791927 1442 +119.892251 35.800927 301 +119.892251 35.809927 4 +119.892251 35.823427 4 +119.892251 35.832427 19 +119.892251 35.850427 6 +119.892251 35.854927 78 +119.892251 35.859427 266 +119.892251 35.863927 603 +119.892251 35.886427 12 +119.892251 35.922427 11 +119.892251 35.944927 48 +119.892251 35.967427 54 +119.892251 35.985427 50 +119.892251 35.989927 2005 +119.892251 35.994427 701 +119.892251 35.998927 3282 +119.892251 36.016927 439 +119.892251 36.061927 9 +119.892251 36.066427 447 +119.892251 36.075427 437 +119.892251 36.124927 241 +119.892251 36.133927 724 +119.892251 36.192427 11 +119.892251 36.214927 497 +119.892251 36.219427 3 +119.892251 36.232927 773 +119.892251 36.237427 5 +119.892251 36.268927 6 +119.892251 36.273427 422 +119.892251 36.282427 4 +119.892251 36.286927 691 +119.892251 36.291427 1309 +119.892251 36.295927 1335 +119.892251 36.300427 15 +119.892251 36.304927 31 +119.892251 36.529927 292 +119.892251 36.588427 6 +119.892251 36.601927 174 +119.892251 36.615427 163 +119.892251 36.646927 590 +119.892251 36.669427 5 +119.892251 36.682927 25 +119.892251 36.687427 1477 +119.892251 36.700927 4 +119.892251 36.705427 927 +119.892251 36.736927 8 +119.892251 36.750427 14 +119.892251 36.768427 13 +119.892251 36.772927 152 +119.892251 36.777427 598 +119.892251 36.781927 2604 +119.892251 36.808927 1515 +119.892251 36.813427 3 +119.892251 36.817927 3 +119.892251 36.822427 6 +119.892251 36.831427 11 +119.892251 36.835927 858 +119.892251 36.849427 303 +119.892251 36.903427 17 +119.892251 36.921427 76 +119.892251 36.952927 7 +119.892251 36.961927 4 +119.892251 36.984427 10 +119.892251 36.988927 3 +119.897751 35.634427 4 +119.897751 35.652427 4 +119.897751 35.656927 10 +119.897751 35.661427 646 +119.897751 35.683927 4 +119.897751 35.688427 785 +119.897751 35.742427 4 +119.897751 35.746927 1869 +119.897751 35.751427 1301 +119.897751 35.755927 95 +119.897751 35.796427 542 +119.897751 35.800927 25 +119.897751 35.827927 568 +119.897751 35.854927 19 +119.897751 35.886427 2083 +119.897751 35.913427 270 +119.897751 35.917927 4 +119.897751 35.922427 252 +119.897751 35.944927 30 +119.897751 35.967427 48 +119.897751 35.976427 556 +119.897751 35.980927 9 +119.897751 35.998927 8 +119.897751 36.043927 12 +119.897751 36.048427 474 +119.897751 36.079927 597 +119.897751 36.093427 144 +119.897751 36.111427 94 +119.897751 36.142927 1530 +119.897751 36.147427 3 +119.897751 36.192427 82 +119.897751 36.196927 36 +119.897751 36.201427 1371 +119.897751 36.232927 456 +119.897751 36.250927 50 +119.897751 36.255427 1460 +119.897751 36.259927 6 +119.897751 36.273427 806 +119.897751 36.300427 11 +119.897751 36.349927 577 +119.897751 36.547927 398 +119.897751 36.574927 334 +119.897751 36.601927 994 +119.897751 36.606427 601 +119.897751 36.628927 11 +119.897751 36.633427 1541 +119.897751 36.669427 332 +119.897751 36.678427 147 +119.897751 36.682927 345 +119.897751 36.723427 963 +119.897751 36.736927 329 +119.897751 36.750427 1061 +119.897751 36.768427 3 +119.897751 36.772927 1755 +119.897751 36.777427 11 +119.897751 36.781927 207 +119.897751 36.790927 423 +119.897751 36.795427 821 +119.897751 36.804427 3 +119.897751 36.817927 72 +119.897751 36.822427 1339 +119.897751 36.903427 1006 +119.897751 36.907927 18 +119.897751 36.916927 360 +119.897751 36.925927 142 +119.897751 36.939427 9 +119.897751 36.948427 1711 +119.897751 36.952927 4 +119.897751 36.957427 551 +119.897751 36.984427 1767 +119.897751 36.988927 54 +119.903251 35.638927 5 +119.903251 35.656927 15 +119.903251 35.661427 29 +119.903251 35.688427 5 +119.903251 35.697427 4 +119.903251 35.701927 422 +119.903251 35.724427 325 +119.903251 35.746927 977 +119.903251 35.751427 28 +119.903251 35.760427 19 +119.903251 35.769427 1564 +119.903251 35.782927 871 +119.903251 35.787427 23 +119.903251 35.796427 5191 +119.903251 35.800927 83 +119.903251 35.814427 4 +119.903251 35.850427 204 +119.903251 35.854927 948 +119.903251 35.886427 3 +119.903251 35.895427 419 +119.903251 35.899927 16 +119.903251 35.949427 11 +119.903251 35.998927 4 +119.903251 36.003427 29 +119.903251 36.007927 1028 +119.903251 36.075427 5 +119.903251 36.129427 1649 +119.903251 36.174427 251 +119.903251 36.183427 677 +119.903251 36.192427 68 +119.903251 36.196927 1619 +119.903251 36.201427 31 +119.903251 36.259927 10 +119.903251 36.264427 495 +119.903251 36.304927 47 +119.903251 36.322927 1511 +119.903251 36.336427 6 +119.903251 36.372427 1306 +119.903251 36.561427 8 +119.903251 36.579427 4 +119.903251 36.583927 965 +119.903251 36.628927 4 +119.903251 36.646927 876 +119.903251 36.651427 5 +119.903251 36.691927 744 +119.903251 36.705427 20 +119.903251 36.709927 936 +119.903251 36.727927 457 +119.903251 36.732427 770 +119.903251 36.750427 21 +119.903251 36.763927 810 +119.903251 36.768427 2 +119.903251 36.772927 153 +119.903251 36.777427 172 +119.903251 36.781927 23 +119.903251 36.786427 11 +119.903251 36.790927 62 +119.903251 36.795427 83 +119.903251 36.799927 5 +119.903251 36.804427 121 +119.903251 36.822427 1 +119.903251 36.835927 308 +119.903251 36.849427 441 +119.903251 36.934927 1090 +119.903251 36.939427 4 +119.903251 36.988927 10 +119.908751 35.647927 1 +119.908751 35.692927 997 +119.908751 35.701927 622 +119.908751 35.728927 151 +119.908751 35.746927 5 +119.908751 35.760427 1152 +119.908751 35.782927 11 +119.908751 35.787427 2 +119.908751 35.796427 61 +119.908751 35.818927 7 +119.908751 35.823427 580 +119.908751 35.859427 979 +119.908751 35.868427 46 +119.908751 35.872927 35 +119.908751 35.886427 1028 +119.908751 35.890927 477 +119.908751 35.895427 8 +119.908751 35.899927 64 +119.908751 35.904427 1434 +119.908751 35.908927 29 +119.908751 35.913427 11 +119.908751 35.935927 16 +119.908751 35.944927 444 +119.908751 35.958427 660 +119.908751 35.962927 29 +119.908751 36.003427 14 +119.908751 36.007927 621 +119.908751 36.102427 656 +119.908751 36.129427 306 +119.908751 36.133927 1974 +119.908751 36.138427 334 +119.908751 36.174427 222 +119.908751 36.214927 270 +119.908751 36.219427 155 +119.908751 36.237427 8 +119.908751 36.282427 576 +119.908751 36.322927 8 +119.908751 36.336427 901 +119.908751 36.367927 1393 +119.908751 36.529927 911 +119.908751 36.552427 255 +119.908751 36.565927 39 +119.908751 36.574927 269 +119.908751 36.583927 19 +119.908751 36.628927 567 +119.908751 36.646927 8 +119.908751 36.651427 317 +119.908751 36.678427 343 +119.908751 36.682927 700 +119.908751 36.705427 1 +119.908751 36.709927 30 +119.908751 36.714427 726 +119.908751 36.727927 643 +119.908751 36.732427 10 +119.908751 36.772927 30 +119.908751 36.777427 1633 +119.908751 36.786427 18 +119.908751 36.790927 890 +119.908751 36.795427 41 +119.908751 36.799927 1381 +119.908751 36.804427 18 +119.908751 36.835927 163 +119.908751 36.849427 3 +119.908751 36.889927 964 +119.908751 36.903427 1 +119.908751 36.907927 83 +119.908751 36.934927 17 +119.908751 36.988927 20 +119.914251 35.638927 27 +119.914251 35.643427 1669 +119.914251 35.647927 2 +119.914251 35.724427 178 +119.914251 35.791927 13 +119.914251 35.796427 82 +119.914251 35.800927 59 +119.914251 35.814427 8 +119.914251 35.868427 29 +119.914251 35.872927 2175 +119.914251 35.886427 113 +119.914251 35.890927 75 +119.914251 35.899927 44 +119.914251 35.904427 240 +119.914251 35.908927 1997 +119.914251 35.913427 45 +119.914251 35.935927 7 +119.914251 35.944927 14 +119.914251 35.962927 573 +119.914251 35.980927 181 +119.914251 35.998927 389 +119.914251 36.007927 7 +119.914251 36.052927 412 +119.914251 36.061927 521 +119.914251 36.066427 501 +119.914251 36.070927 5 +119.914251 36.084427 662 +119.914251 36.088927 8 +119.914251 36.093427 5 +119.914251 36.097927 4 +119.914251 36.129427 3 +119.914251 36.133927 5 +119.914251 36.142927 849 +119.914251 36.147427 509 +119.914251 36.187927 661 +119.914251 36.219427 550 +119.914251 36.237427 1429 +119.914251 36.255427 7 +119.914251 36.259927 102 +119.914251 36.367927 74 +119.914251 36.372427 842 +119.914251 36.570427 5 +119.914251 36.633427 539 +119.914251 36.651427 352 +119.914251 36.655927 553 +119.914251 36.664927 3 +119.914251 36.673927 4 +119.914251 36.678427 546 +119.914251 36.696427 219 +119.914251 36.700927 25 +119.914251 36.705427 277 +119.914251 36.754927 407 +119.914251 36.763927 3 +119.914251 36.777427 87 +119.914251 36.781927 19 +119.914251 36.799927 17 +119.914251 36.804427 63 +119.914251 36.813427 241 +119.914251 36.867427 608 +119.914251 36.903427 564 +119.914251 36.907927 760 +119.914251 36.912427 703 +119.914251 36.921427 139 +119.914251 36.925927 370 +119.914251 36.939427 654 +119.914251 36.948427 4 +119.914251 36.984427 17 +119.919751 35.643427 5 +119.919751 35.719927 1198 +119.919751 35.787427 183 +119.919751 35.796427 1591 +119.919751 35.800927 115 +119.919751 35.805427 457 +119.919751 35.809927 5 +119.919751 35.814427 888 +119.919751 35.836927 927 +119.919751 35.854927 74 +119.919751 35.886427 31 +119.919751 35.890927 621 +119.919751 35.935927 516 +119.919751 35.944927 635 +119.919751 35.998927 4 +119.919751 36.012427 410 +119.919751 36.030427 349 +119.919751 36.034927 376 +119.919751 36.084427 384 +119.919751 36.088927 5 +119.919751 36.129427 172 +119.919751 36.133927 1611 +119.919751 36.147427 5 +119.919751 36.205927 5 +119.919751 36.255427 1193 +119.919751 36.259927 2383 +119.919751 36.264427 9 +119.919751 36.525427 478 +119.919751 36.556927 597 +119.919751 36.570427 214 +119.919751 36.579427 211 +119.919751 36.597427 528 +119.919751 36.619927 502 +119.919751 36.642427 282 +119.919751 36.655927 3 +119.919751 36.660427 5 +119.919751 36.664927 580 +119.919751 36.687427 664 +119.919751 36.691927 1208 +119.919751 36.696427 47 +119.919751 36.700927 1 +119.919751 36.709927 2 +119.919751 36.714427 925 +119.919751 36.727927 251 +119.919751 36.736927 444 +119.919751 36.754927 9 +119.919751 36.759427 9 +119.919751 36.768427 3 +119.919751 36.772927 23 +119.919751 36.777427 46 +119.919751 36.786427 157 +119.919751 36.790927 175 +119.919751 36.813427 7 +119.919751 36.835927 9 +119.919751 36.916927 237 +119.919751 36.952927 121 +119.919751 36.984427 1757 +119.925251 35.625427 1145 +119.925251 35.706427 338 +119.925251 35.778427 1420 +119.925251 35.782927 234 +119.925251 35.796427 660 +119.925251 35.800927 68 +119.925251 35.836927 3 +119.925251 35.841427 266 +119.925251 35.881927 254 +119.925251 35.886427 62 +119.925251 35.908927 46 +119.925251 35.913427 32 +119.925251 35.917927 140 +119.925251 35.931427 1359 +119.925251 35.935927 18 +119.925251 35.989927 482 +119.925251 36.097927 5 +119.925251 36.106927 63 +119.925251 36.129427 39 +119.925251 36.133927 10 +119.925251 36.151927 207 +119.925251 36.169927 1435 +119.925251 36.205927 1127 +119.925251 36.250927 922 +119.925251 36.259927 1096 +119.925251 36.295927 10 +119.925251 36.300427 8 +119.925251 36.322927 599 +119.925251 36.345427 567 +119.925251 36.349927 585 +119.925251 36.358927 976 +119.925251 36.372427 5 +119.925251 36.376927 634 +119.925251 36.588427 153 +119.925251 36.601927 286 +119.925251 36.642427 904 +119.925251 36.646927 3 +119.925251 36.673927 946 +119.925251 36.687427 112 +119.925251 36.696427 4 +119.925251 36.732427 45 +119.925251 36.736927 466 +119.925251 36.741427 153 +119.925251 36.745927 22 +119.925251 36.763927 651 +119.925251 36.768427 1309 +119.925251 36.772927 21 +119.925251 36.781927 720 +119.925251 36.786427 2046 +119.925251 36.790927 286 +119.925251 36.813427 13 +119.925251 36.840427 22 +119.925251 36.858427 575 +119.925251 36.885427 926 +119.925251 36.889927 1 +119.925251 36.907927 765 +119.925251 36.930427 177 +119.925251 36.934927 648 +119.925251 36.975427 9 +119.925251 36.979927 7 +119.925251 36.984427 4 +119.925251 36.988927 714 +119.930751 35.769427 4 +119.930751 35.773927 35 +119.930751 35.778427 31 +119.930751 35.782927 62 +119.930751 35.818927 136 +119.930751 35.823427 3 +119.930751 35.859427 52 +119.930751 35.863927 2178 +119.930751 35.895427 42 +119.930751 35.899927 7041 +119.930751 35.904427 9 +119.930751 35.908927 384 +119.930751 35.913427 11 +119.930751 35.917927 5 +119.930751 35.944927 71 +119.930751 35.967427 5 +119.930751 35.971927 973 +119.930751 36.012427 71 +119.930751 36.016927 776 +119.930751 36.021427 31 +119.930751 36.052927 581 +119.930751 36.066427 400 +119.930751 36.070927 1371 +119.930751 36.093427 361 +119.930751 36.097927 491 +119.930751 36.129427 1571 +119.930751 36.133927 1152 +119.930751 36.196927 1166 +119.930751 36.201427 19 +119.930751 36.210427 208 +119.930751 36.246427 4 +119.930751 36.250927 1113 +119.930751 36.259927 6 +119.930751 36.264427 1327 +119.930751 36.268927 12 +119.930751 36.273427 43 +119.930751 36.286927 974 +119.930751 36.291427 2347 +119.930751 36.295927 46 +119.930751 36.300427 1936 +119.930751 36.309427 1312 +119.930751 36.313927 8 +119.930751 36.345427 622 +119.930751 36.408427 488 +119.930751 36.520927 466 +119.930751 36.529927 849 +119.930751 36.534427 5 +119.930751 36.565927 1113 +119.930751 36.588427 72 +119.930751 36.592927 441 +119.930751 36.615427 6 +119.930751 36.642427 259 +119.930751 36.646927 772 +119.930751 36.655927 689 +119.930751 36.678427 6 +119.930751 36.705427 3 +119.930751 36.709927 543 +119.930751 36.732427 1335 +119.930751 36.736927 9480 +119.930751 36.741427 497 +119.930751 36.745927 9 +119.930751 36.750427 49 +119.930751 36.754927 538 +119.930751 36.763927 32 +119.930751 36.768427 96 +119.930751 36.781927 295 +119.930751 36.786427 3201 +119.930751 36.795427 1067 +119.930751 36.804427 877 +119.930751 36.853927 467 +119.930751 36.858427 4 +119.930751 36.898927 742 +119.930751 36.916927 539 +119.930751 36.952927 5 +119.930751 36.975427 18 +119.930751 36.979927 2252 +119.930751 36.984427 410 +119.936251 35.710927 313 +119.936251 35.715427 49 +119.936251 35.719927 8 +119.936251 35.769427 418 +119.936251 35.773927 2 +119.936251 35.782927 3 +119.936251 35.787427 41 +119.936251 35.791927 23 +119.936251 35.818927 2 +119.936251 35.859427 42 +119.936251 35.863927 50 +119.936251 35.877427 126 +119.936251 35.881927 789 +119.936251 35.886427 188 +119.936251 35.899927 155 +119.936251 35.908927 119 +119.936251 35.913427 17 +119.936251 35.949427 681 +119.936251 35.953927 1177 +119.936251 36.012427 33 +119.936251 36.016927 8 +119.936251 36.034927 1 +119.936251 36.052927 3 +119.936251 36.066427 240 +119.936251 36.070927 12 +119.936251 36.093427 3 +119.936251 36.106927 187 +119.936251 36.129427 7 +119.936251 36.142927 670 +119.936251 36.147427 970 +119.936251 36.151927 2 +119.936251 36.196927 7 +119.936251 36.214927 914 +119.936251 36.223927 572 +119.936251 36.232927 231 +119.936251 36.246427 13 +119.936251 36.250927 13 +119.936251 36.255427 28 +119.936251 36.259927 16 +119.936251 36.264427 4 +119.936251 36.268927 5 +119.936251 36.273427 3096 +119.936251 36.286927 5 +119.936251 36.291427 14 +119.936251 36.309427 3 +119.936251 36.354427 65 +119.936251 36.372427 666 +119.936251 36.403927 1829 +119.936251 36.565927 10 +119.936251 36.597427 6 +119.936251 36.606427 4 +119.936251 36.642427 367 +119.936251 36.655927 6 +119.936251 36.682927 13 +119.936251 36.691927 679 +119.936251 36.705427 548 +119.936251 36.709927 910 +119.936251 36.732427 110 +119.936251 36.736927 73 +119.936251 36.741427 340 +119.936251 36.750427 245 +119.936251 36.754927 2415 +119.936251 36.759427 15 +119.936251 36.768427 127 +119.936251 36.772927 1017 +119.936251 36.777427 342 +119.936251 36.781927 1112 +119.936251 36.786427 1147 +119.936251 36.790927 21608 +119.936251 36.795427 336 +119.936251 36.799927 1 +119.936251 36.804427 3 +119.936251 36.826927 62 +119.936251 36.840427 697 +119.936251 36.898927 7 +119.936251 36.930427 5 +119.936251 36.934927 1049 +119.936251 36.952927 504 +119.936251 36.988927 1119 +119.936251 36.993427 7 +119.941751 35.791927 3 +119.941751 35.800927 6 +119.941751 35.805427 23 +119.941751 35.845927 22 +119.941751 35.859427 8 +119.941751 35.863927 4 +119.941751 35.877427 502 +119.941751 35.881927 2750 +119.941751 35.886427 18 +119.941751 35.895427 898 +119.941751 35.899927 1 +119.941751 35.917927 991 +119.941751 35.949427 443 +119.941751 35.953927 24 +119.941751 35.958427 18 +119.941751 36.034927 214 +119.941751 36.039427 5 +119.941751 36.133927 930 +119.941751 36.169927 360 +119.941751 36.196927 70 +119.941751 36.219427 493 +119.941751 36.237427 1382 +119.941751 36.241927 530 +119.941751 36.250927 42 +119.941751 36.255427 23 +119.941751 36.259927 1348 +119.941751 36.273427 53 +119.941751 36.277927 564 +119.941751 36.322927 5 +119.941751 36.327427 1491 +119.941751 36.336427 34 +119.941751 36.340927 1275 +119.941751 36.403927 449 +119.941751 36.520927 750 +119.941751 36.547927 8 +119.941751 36.552427 1500 +119.941751 36.592927 11 +119.941751 36.610927 434 +119.941751 36.624427 920 +119.941751 36.642427 445 +119.941751 36.669427 340 +119.941751 36.682927 528 +119.941751 36.709927 14 +119.941751 36.714427 1637 +119.941751 36.727927 540 +119.941751 36.732427 312 +119.941751 36.736927 123 +119.941751 36.741427 6 +119.941751 36.750427 1032 +119.941751 36.754927 399 +119.941751 36.759427 1 +119.941751 36.763927 13 +119.941751 36.768427 25 +119.941751 36.772927 780 +119.941751 36.777427 2055 +119.941751 36.781927 224 +119.941751 36.786427 1212 +119.941751 36.790927 2268 +119.941751 36.795427 911 +119.941751 36.799927 122 +119.941751 36.826927 298 +119.941751 36.907927 482 +119.941751 36.916927 629 +119.941751 36.975427 4 +119.941751 36.993427 24 +119.947251 35.800927 751 +119.947251 35.841427 4 +119.947251 35.845927 1345 +119.947251 35.850427 4 +119.947251 35.877427 36 +119.947251 35.881927 69 +119.947251 35.890927 44 +119.947251 35.895427 8 +119.947251 35.917927 3 +119.947251 35.931427 172 +119.947251 36.007927 739 +119.947251 36.043927 175 +119.947251 36.057427 461 +119.947251 36.106927 320 +119.947251 36.133927 926 +119.947251 36.147427 662 +119.947251 36.183427 301 +119.947251 36.196927 1441 +119.947251 36.241927 5 +119.947251 36.246427 15 +119.947251 36.250927 1670 +119.947251 36.255427 55 +119.947251 36.259927 1468 +119.947251 36.264427 11 +119.947251 36.273427 25 +119.947251 36.282427 5 +119.947251 36.340927 1 +119.947251 36.358927 21 +119.947251 36.363427 5 +119.947251 36.367927 11 +119.947251 36.381427 636 +119.947251 36.390427 17 +119.947251 36.403927 1177 +119.947251 36.421927 249 +119.947251 36.430927 923 +119.947251 36.592927 584 +119.947251 36.646927 314 +119.947251 36.660427 646 +119.947251 36.669427 188 +119.947251 36.687427 4 +119.947251 36.691927 352 +119.947251 36.714427 29 +119.947251 36.732427 42 +119.947251 36.736927 212 +119.947251 36.741427 61 +119.947251 36.745927 6 +119.947251 36.750427 1176 +119.947251 36.754927 2 +119.947251 36.763927 397 +119.947251 36.768427 148 +119.947251 36.772927 1582 +119.947251 36.777427 2776 +119.947251 36.781927 1551 +119.947251 36.786427 3295 +119.947251 36.790927 2219 +119.947251 36.795427 581 +119.947251 36.799927 1079 +119.947251 36.804427 352 +119.947251 36.808927 502 +119.947251 36.817927 5 +119.947251 36.822427 18 +119.947251 36.826927 1326 +119.947251 36.831427 197 +119.947251 36.835927 8 +119.947251 36.840427 704 +119.947251 36.844927 31 +119.947251 36.849427 870 +119.947251 36.858427 4 +119.947251 36.943927 473 +119.947251 36.948427 11 +119.947251 36.952927 371 +119.947251 36.993427 1874 +119.947251 36.997927 4 +119.952751 35.787427 90 +119.952751 35.800927 5 +119.952751 35.850427 255 +119.952751 35.854927 359 +119.952751 35.868427 12 +119.952751 35.877427 7 +119.952751 35.881927 68 +119.952751 35.886427 168 +119.952751 35.967427 1109 +119.952751 36.061927 64 +119.952751 36.066427 23 +119.952751 36.079927 1170 +119.952751 36.084427 3 +119.952751 36.111427 151 +119.952751 36.142927 945 +119.952751 36.183427 2 +119.952751 36.223927 118 +119.952751 36.246427 14 +119.952751 36.250927 16 +119.952751 36.259927 71 +119.952751 36.264427 227 +119.952751 36.286927 7 +119.952751 36.358927 220 +119.952751 36.363427 1973 +119.952751 36.367927 47 +119.952751 36.376927 5 +119.952751 36.381427 34 +119.952751 36.403927 478 +119.952751 36.408427 4 +119.952751 36.570427 3 +119.952751 36.619927 14 +119.952751 36.642427 5 +119.952751 36.669427 15 +119.952751 36.673927 1300 +119.952751 36.687427 737 +119.952751 36.691927 1156 +119.952751 36.709927 14 +119.952751 36.714427 597 +119.952751 36.718927 282 +119.952751 36.723427 8 +119.952751 36.727927 9 +119.952751 36.736927 58 +119.952751 36.741427 3 +119.952751 36.750427 970 +119.952751 36.754927 102 +119.952751 36.759427 96 +119.952751 36.763927 510 +119.952751 36.768427 162 +119.952751 36.772927 839 +119.952751 36.777427 3990 +119.952751 36.781927 1632 +119.952751 36.786427 1704 +119.952751 36.790927 3088 +119.952751 36.795427 1844 +119.952751 36.799927 1534 +119.952751 36.804427 549 +119.952751 36.808927 127 +119.952751 36.813427 1 +119.952751 36.817927 39 +119.952751 36.822427 1402 +119.952751 36.826927 174 +119.952751 36.831427 2 +119.952751 36.840427 10 +119.952751 36.849427 9 +119.952751 36.853927 24 +119.952751 36.858427 1028 +119.952751 36.916927 910 +119.952751 36.921427 4 +119.952751 36.939427 689 +119.952751 36.943927 424 +119.952751 36.948427 593 +119.952751 36.952927 2 +119.952751 36.957427 376 +119.952751 36.993427 18 +119.958251 35.760427 4 +119.958251 35.764927 3 +119.958251 35.769427 3 +119.958251 35.809927 372 +119.958251 35.814427 874 +119.958251 35.850427 98 +119.958251 35.859427 187 +119.958251 35.863927 130 +119.958251 35.877427 2067 +119.958251 35.881927 742 +119.958251 35.886427 32 +119.958251 35.895427 47 +119.958251 35.976427 707 +119.958251 36.025927 127 +119.958251 36.061927 668 +119.958251 36.066427 98 +119.958251 36.070927 9 +119.958251 36.075427 842 +119.958251 36.097927 666 +119.958251 36.106927 160 +119.958251 36.138427 442 +119.958251 36.156427 1120 +119.958251 36.165427 5 +119.958251 36.174427 297 +119.958251 36.183427 6 +119.958251 36.187927 176 +119.958251 36.223927 1598 +119.958251 36.246427 13 +119.958251 36.250927 2338 +119.958251 36.259927 622 +119.958251 36.264427 302 +119.958251 36.268927 1068 +119.958251 36.273427 3 +119.958251 36.277927 21 +119.958251 36.282427 27 +119.958251 36.286927 20 +119.958251 36.291427 60 +119.958251 36.295927 11 +119.958251 36.300427 14 +119.958251 36.304927 1151 +119.958251 36.309427 1342 +119.958251 36.313927 1330 +119.958251 36.318427 610 +119.958251 36.327427 990 +119.958251 36.336427 966 +119.958251 36.354427 1047 +119.958251 36.363427 6 +119.958251 36.367927 1 +119.958251 36.390427 29 +119.958251 36.408427 692 +119.958251 36.570427 1841 +119.958251 36.606427 802 +119.958251 36.619927 4 +119.958251 36.642427 1433 +119.958251 36.687427 1403 +119.958251 36.691927 21 +119.958251 36.705427 528 +119.958251 36.709927 987 +119.958251 36.714427 11 +119.958251 36.718927 3 +119.958251 36.723427 28 +119.958251 36.727927 65 +119.958251 36.732427 132 +119.958251 36.736927 5 +119.958251 36.741427 9 +119.958251 36.745927 23 +119.958251 36.750427 68 +119.958251 36.754927 8 +119.958251 36.759427 1034 +119.958251 36.763927 91 +119.958251 36.768427 1579 +119.958251 36.772927 224 +119.958251 36.777427 2651 +119.958251 36.781927 1896 +119.958251 36.786427 3039 +119.958251 36.790927 3204 +119.958251 36.795427 580 +119.958251 36.799927 739 +119.958251 36.804427 744 +119.958251 36.808927 153 +119.958251 36.943927 4 +119.958251 36.948427 512 +119.963751 35.764927 7 +119.963751 35.769427 14 +119.963751 35.809927 8 +119.963751 35.814427 69 +119.963751 35.823427 24 +119.963751 35.827927 105 +119.963751 35.832427 42 +119.963751 35.841427 433 +119.963751 35.859427 83 +119.963751 35.863927 644 +119.963751 35.872927 309 +119.963751 35.877427 1500 +119.963751 35.881927 607 +119.963751 35.886427 487 +119.963751 35.913427 7 +119.963751 36.021427 6 +119.963751 36.034927 2 +119.963751 36.043927 370 +119.963751 36.061927 5 +119.963751 36.066427 767 +119.963751 36.075427 388 +119.963751 36.084427 402 +119.963751 36.111427 20 +119.963751 36.124927 761 +119.963751 36.129427 650 +119.963751 36.165427 1029 +119.963751 36.192427 564 +119.963751 36.214927 217 +119.963751 36.255427 140 +119.963751 36.259927 256 +119.963751 36.264427 91 +119.963751 36.268927 19 +119.963751 36.273427 4 +119.963751 36.277927 28 +119.963751 36.282427 1637 +119.963751 36.286927 124 +119.963751 36.291427 5551 +119.963751 36.295927 2097 +119.963751 36.300427 34 +119.963751 36.304927 50 +119.963751 36.309427 68 +119.963751 36.358927 106 +119.963751 36.372427 616 +119.963751 36.390427 715 +119.963751 36.394927 3 +119.963751 36.403927 4 +119.963751 36.408427 479 +119.963751 36.525427 1515 +119.963751 36.529927 32 +119.963751 36.592927 511 +119.963751 36.606427 8 +119.963751 36.628927 1154 +119.963751 36.633427 4 +119.963751 36.691927 361 +119.963751 36.723427 124 +119.963751 36.727927 42 +119.963751 36.732427 59 +119.963751 36.745927 34 +119.963751 36.754927 6 +119.963751 36.759427 292 +119.963751 36.763927 775 +119.963751 36.768427 277 +119.963751 36.772927 669 +119.963751 36.777427 1937 +119.963751 36.781927 3481 +119.963751 36.786427 3894 +119.963751 36.790927 4331 +119.963751 36.795427 2245 +119.963751 36.799927 844 +119.963751 36.804427 4 +119.963751 36.822427 223 +119.963751 36.831427 9 +119.963751 36.840427 4 +119.963751 36.844927 8 +119.963751 36.862927 11 +119.963751 36.871927 30 +119.963751 36.885427 5 +119.963751 36.889927 8 +119.963751 36.912427 241 +119.963751 36.948427 373 +119.963751 36.961927 3 +119.963751 36.970927 2084 +119.963751 36.975427 80 +119.963751 36.993427 1922 +119.969251 35.818927 177 +119.969251 35.845927 33 +119.969251 35.854927 5 +119.969251 35.859427 4 +119.969251 35.868427 355 +119.969251 35.872927 4508 +119.969251 35.877427 528 +119.969251 35.881927 83 +119.969251 35.890927 52 +119.969251 35.895427 56 +119.969251 35.899927 41 +119.969251 36.007927 118 +119.969251 36.021427 53 +119.969251 36.025927 664 +119.969251 36.075427 413 +119.969251 36.088927 508 +119.969251 36.129427 23 +119.969251 36.214927 870 +119.969251 36.241927 15 +119.969251 36.246427 682 +119.969251 36.250927 1131 +119.969251 36.255427 1036 +119.969251 36.259927 172 +119.969251 36.264427 1344 +119.969251 36.273427 2 +119.969251 36.282427 195 +119.969251 36.286927 347 +119.969251 36.291427 82 +119.969251 36.322927 5 +119.969251 36.327427 8 +119.969251 36.358927 560 +119.969251 36.390427 398 +119.969251 36.394927 2 +119.969251 36.408427 730 +119.969251 36.525427 13 +119.969251 36.529927 11 +119.969251 36.615427 275 +119.969251 36.651427 6 +119.969251 36.673927 7 +119.969251 36.714427 8 +119.969251 36.723427 25 +119.969251 36.727927 2 +119.969251 36.754927 107 +119.969251 36.759427 523 +119.969251 36.763927 26 +119.969251 36.768427 879 +119.969251 36.772927 55 +119.969251 36.777427 563 +119.969251 36.781927 1659 +119.969251 36.786427 1449 +119.969251 36.790927 2763 +119.969251 36.795427 349 +119.969251 36.799927 3007 +119.969251 36.804427 973 +119.969251 36.813427 12 +119.969251 36.826927 3 +119.969251 36.831427 24 +119.969251 36.840427 4 +119.969251 36.858427 21 +119.969251 36.948427 302 +119.969251 36.961927 778 +119.969251 36.975427 3 +119.969251 36.988927 782 +119.974751 35.809927 413 +119.974751 35.818927 17324 +119.974751 35.823427 1920 +119.974751 35.841427 5 +119.974751 35.845927 200 +119.974751 35.850427 65 +119.974751 35.854927 12 +119.974751 35.859427 946 +119.974751 35.868427 801 +119.974751 35.872927 1899 +119.974751 35.877427 330 +119.974751 35.881927 110 +119.974751 35.886427 37 +119.974751 35.890927 28 +119.974751 36.012427 12 +119.974751 36.025927 18 +119.974751 36.030427 380 +119.974751 36.070927 780 +119.974751 36.075427 5 +119.974751 36.079927 45 +119.974751 36.129427 2258 +119.974751 36.142927 1172 +119.974751 36.160927 466 +119.974751 36.165427 228 +119.974751 36.169927 893 +119.974751 36.219427 1639 +119.974751 36.223927 77 +119.974751 36.241927 1 +119.974751 36.246427 49 +119.974751 36.259927 107 +119.974751 36.264427 350 +119.974751 36.282427 426 +119.974751 36.286927 21 +119.974751 36.291427 489 +119.974751 36.300427 109 +119.974751 36.322927 6 +119.974751 36.327427 1068 +119.974751 36.331927 1134 +119.974751 36.345427 1159 +119.974751 36.358927 772 +119.974751 36.381427 934 +119.974751 36.426427 2227 +119.974751 36.615427 376 +119.974751 36.651427 348 +119.974751 36.669427 4 +119.974751 36.705427 455 +119.974751 36.741427 566 +119.974751 36.754927 1037 +119.974751 36.759427 75 +119.974751 36.763927 9 +119.974751 36.768427 12 +119.974751 36.772927 268 +119.974751 36.777427 568 +119.974751 36.781927 1833 +119.974751 36.786427 2453 +119.974751 36.790927 1873 +119.974751 36.795427 250 +119.974751 36.808927 994 +119.974751 36.813427 2 +119.974751 36.831427 24 +119.974751 36.862927 4 +119.974751 36.988927 13 +119.980251 35.809927 2513 +119.980251 35.814427 26 +119.980251 35.818927 584 +119.980251 35.823427 28 +119.980251 35.827927 1730 +119.980251 35.832427 14 +119.980251 35.836927 420 +119.980251 35.841427 2 +119.980251 35.845927 751 +119.980251 35.850427 7 +119.980251 35.854927 838 +119.980251 35.859427 2282 +119.980251 35.863927 266 +119.980251 35.868427 713 +119.980251 35.872927 5032 +119.980251 35.877427 10709 +119.980251 35.881927 1393 +119.980251 35.886427 815 +119.980251 35.890927 746 +119.980251 35.913427 18 +119.980251 36.007927 49 +119.980251 36.025927 469 +119.980251 36.030427 3 +119.980251 36.039427 39 +119.980251 36.043927 11 +119.980251 36.057427 4 +119.980251 36.061927 684 +119.980251 36.075427 678 +119.980251 36.079927 1120 +119.980251 36.093427 479 +119.980251 36.102427 399 +119.980251 36.129427 3 +119.980251 36.147427 2 +119.980251 36.156427 326 +119.980251 36.165427 529 +119.980251 36.169927 13 +119.980251 36.196927 904 +119.980251 36.232927 799 +119.980251 36.237427 1292 +119.980251 36.246427 1912 +119.980251 36.250927 11 +119.980251 36.255427 58 +119.980251 36.259927 1915 +119.980251 36.264427 1359 +119.980251 36.268927 91 +119.980251 36.273427 4 +119.980251 36.277927 21 +119.980251 36.282427 100 +119.980251 36.286927 1073 +119.980251 36.291427 685 +119.980251 36.295927 2092 +119.980251 36.300427 27 +119.980251 36.309427 16 +119.980251 36.331927 3 +119.980251 36.336427 3 +119.980251 36.376927 655 +119.980251 36.385927 2 +119.980251 36.403927 483 +119.980251 36.511927 347 +119.980251 36.570427 2 +119.980251 36.588427 34 +119.980251 36.592927 57 +119.980251 36.610927 3 +119.980251 36.615427 372 +119.980251 36.619927 4 +119.980251 36.651427 15 +119.980251 36.660427 9 +119.980251 36.673927 1360 +119.980251 36.709927 57 +119.980251 36.718927 14 +119.980251 36.727927 11 +119.980251 36.732427 14 +119.980251 36.736927 4 +119.980251 36.741427 27 +119.980251 36.745927 125 +119.980251 36.763927 84 +119.980251 36.768427 845 +119.980251 36.772927 926 +119.980251 36.777427 2097 +119.980251 36.781927 3640 +119.980251 36.786427 2871 +119.980251 36.790927 1509 +119.980251 36.795427 4961 +119.980251 36.799927 493 +119.980251 36.808927 5 +119.980251 36.813427 6 +119.980251 36.822427 8 +119.980251 36.844927 3 +119.980251 36.858427 6 +119.980251 36.862927 5 +119.980251 36.867427 1696 +119.985751 35.733427 266 +119.985751 35.742427 252 +119.985751 35.823427 45 +119.985751 35.827927 355 +119.985751 35.832427 316 +119.985751 35.836927 126 +119.985751 35.841427 511 +119.985751 35.845927 177 +119.985751 35.850427 193 +119.985751 35.854927 202 +119.985751 35.859427 582 +119.985751 35.863927 1341 +119.985751 35.868427 3989 +119.985751 35.872927 1852 +119.985751 35.877427 2468 +119.985751 35.881927 652 +119.985751 35.886427 59 +119.985751 35.890927 35 +119.985751 35.895427 108 +119.985751 35.899927 11 +119.985751 35.904427 56 +119.985751 35.985427 586 +119.985751 35.989927 352 +119.985751 35.994427 48 +119.985751 36.021427 15 +119.985751 36.025927 41 +119.985751 36.030427 43 +119.985751 36.034927 151 +119.985751 36.039427 1219 +119.985751 36.043927 407 +119.985751 36.048427 3 +119.985751 36.057427 317 +119.985751 36.061927 6 +119.985751 36.070927 535 +119.985751 36.075427 25 +119.985751 36.093427 12 +119.985751 36.124927 2711 +119.985751 36.129427 12 +119.985751 36.138427 1236 +119.985751 36.147427 304 +119.985751 36.165427 3 +119.985751 36.183427 555 +119.985751 36.196927 6 +119.985751 36.223927 477 +119.985751 36.246427 5 +119.985751 36.255427 620 +119.985751 36.259927 421 +119.985751 36.264427 1175 +119.985751 36.268927 1327 +119.985751 36.273427 701 +119.985751 36.277927 133 +119.985751 36.282427 1587 +119.985751 36.286927 568 +119.985751 36.291427 675 +119.985751 36.309427 793 +119.985751 36.313927 12 +119.985751 36.318427 87 +119.985751 36.331927 11 +119.985751 36.336427 1482 +119.985751 36.354427 1210 +119.985751 36.363427 439 +119.985751 36.367927 16 +119.985751 36.381427 711 +119.985751 36.426427 737 +119.985751 36.561427 8 +119.985751 36.565927 1395 +119.985751 36.583927 531 +119.985751 36.588427 9 +119.985751 36.592927 243 +119.985751 36.624427 353 +119.985751 36.660427 927 +119.985751 36.687427 4 +119.985751 36.709927 16 +119.985751 36.727927 14 +119.985751 36.732427 9 +119.985751 36.736927 5 +119.985751 36.745927 131 +119.985751 36.750427 293 +119.985751 36.763927 397 +119.985751 36.768427 2411 +119.985751 36.772927 571 +119.985751 36.777427 942 +119.985751 36.781927 4594 +119.985751 36.786427 2446 +119.985751 36.790927 1 +119.985751 36.795427 964 +119.985751 36.799927 965 +119.985751 36.804427 436 +119.985751 36.822427 4 +119.985751 36.858427 9 +119.985751 36.862927 4 +119.985751 36.867427 4 +119.985751 36.988927 21 +119.985751 36.993427 1157 +119.985751 37.002427 815 +119.991251 35.805427 15 +119.991251 35.823427 6 +119.991251 35.827927 167 +119.991251 35.832427 32 +119.991251 35.836927 338 +119.991251 35.841427 524 +119.991251 35.845927 69 +119.991251 35.850427 35 +119.991251 35.854927 569 +119.991251 35.859427 31 +119.991251 35.863927 1154 +119.991251 35.868427 3244 +119.991251 35.872927 3415 +119.991251 35.877427 2837 +119.991251 35.881927 3764 +119.991251 35.886427 3075 +119.991251 35.890927 12 +119.991251 35.899927 107 +119.991251 35.908927 18 +119.991251 35.944927 7 +119.991251 35.985427 420 +119.991251 35.989927 336 +119.991251 36.003427 702 +119.991251 36.021427 375 +119.991251 36.025927 1422 +119.991251 36.043927 3 +119.991251 36.057427 6 +119.991251 36.061927 450 +119.991251 36.066427 6 +119.991251 36.070927 11 +119.991251 36.075427 1570 +119.991251 36.084427 287 +119.991251 36.111427 15 +119.991251 36.115927 937 +119.991251 36.178927 172 +119.991251 36.196927 14 +119.991251 36.201427 729 +119.991251 36.219427 763 +119.991251 36.241927 720 +119.991251 36.250927 2 +119.991251 36.255427 2552 +119.991251 36.259927 208 +119.991251 36.264427 124 +119.991251 36.268927 42 +119.991251 36.273427 226 +119.991251 36.277927 1441 +119.991251 36.282427 2621 +119.991251 36.286927 2528 +119.991251 36.291427 2089 +119.991251 36.295927 623 +119.991251 36.300427 56 +119.991251 36.304927 1022 +119.991251 36.309427 6 +119.991251 36.313927 80 +119.991251 36.327427 6 +119.991251 36.354427 5 +119.991251 36.358927 3 +119.991251 36.367927 324 +119.991251 36.381427 1549 +119.991251 36.408427 19 +119.991251 36.412927 1796 +119.991251 36.417427 2 +119.991251 36.507427 372 +119.991251 36.525427 3 +119.991251 36.561427 8 +119.991251 36.565927 24 +119.991251 36.583927 566 +119.991251 36.588427 2747 +119.991251 36.592927 555 +119.991251 36.624427 3 +119.991251 36.633427 285 +119.991251 36.673927 6 +119.991251 36.700927 2 +119.991251 36.714427 4 +119.991251 36.718927 2486 +119.991251 36.723427 9 +119.991251 36.727927 19 +119.991251 36.732427 13 +119.991251 36.736927 800 +119.991251 36.745927 2 +119.991251 36.750427 169 +119.991251 36.754927 993 +119.991251 36.759427 13 +119.991251 36.763927 651 +119.991251 36.768427 92 +119.991251 36.772927 347 +119.991251 36.777427 618 +119.991251 36.781927 516 +119.991251 36.786427 4220 +119.991251 36.790927 96 +119.991251 36.795427 5432 +119.991251 36.799927 1742 +119.991251 36.804427 23 +119.991251 36.817927 29 +119.991251 36.984427 4 +119.991251 36.993427 7 +119.996751 35.805427 550 +119.996751 35.818927 69 +119.996751 35.850427 3741 +119.996751 35.854927 854 +119.996751 35.859427 1512 +119.996751 35.863927 512 +119.996751 35.868427 1428 +119.996751 35.872927 2510 +119.996751 35.877427 1684 +119.996751 35.881927 1781 +119.996751 35.886427 104 +119.996751 35.890927 381 +119.996751 35.895427 13 +119.996751 35.913427 22 +119.996751 35.917927 23 +119.996751 35.922427 5 +119.996751 35.935927 217 +119.996751 36.025927 467 +119.996751 36.061927 77 +119.996751 36.066427 40 +119.996751 36.070927 1685 +119.996751 36.075427 1784 +119.996751 36.079927 13 +119.996751 36.084427 1659 +119.996751 36.093427 1286 +119.996751 36.138427 703 +119.996751 36.147427 560 +119.996751 36.169927 2 +119.996751 36.174427 17 +119.996751 36.201427 4 +119.996751 36.210427 1282 +119.996751 36.223927 456 +119.996751 36.246427 25 +119.996751 36.255427 1106 +119.996751 36.264427 2152 +119.996751 36.268927 1104 +119.996751 36.273427 565 +119.996751 36.277927 3438 +119.996751 36.282427 3305 +119.996751 36.286927 2137 +119.996751 36.291427 2115 +119.996751 36.295927 2664 +119.996751 36.300427 630 +119.996751 36.304927 71 +119.996751 36.309427 1430 +119.996751 36.327427 791 +119.996751 36.345427 1673 +119.996751 36.349927 44 +119.996751 36.358927 799 +119.996751 36.372427 826 +119.996751 36.417427 820 +119.996751 36.520927 8 +119.996751 36.525427 1153 +119.996751 36.543427 3623 +119.996751 36.565927 914 +119.996751 36.588427 172 +119.996751 36.592927 148 +119.996751 36.619927 636 +119.996751 36.628927 347 +119.996751 36.664927 231 +119.996751 36.669427 452 +119.996751 36.673927 4 +119.996751 36.682927 3 +119.996751 36.687427 4 +119.996751 36.700927 9 +119.996751 36.718927 44 +119.996751 36.723427 13 +119.996751 36.745927 32 +119.996751 36.750427 3 +119.996751 36.759427 21 +119.996751 36.763927 278 +119.996751 36.768427 54 +119.996751 36.772927 30 +119.996751 36.777427 318 +119.996751 36.781927 244 +119.996751 36.786427 58 +119.996751 36.790927 529 +119.996751 36.795427 18 +119.996751 36.799927 1599 +119.996751 36.804427 29 +119.996751 36.813427 11 +119.996751 36.817927 23 +119.996751 36.984427 523 +119.996751 36.988927 7 +119.996751 36.997927 404 +119.996751 37.002427 9 +120.002251 35.805427 83 +120.002251 35.809927 42 +120.002251 35.841427 2 +120.002251 35.845927 541 +120.002251 35.850427 5 +120.002251 35.859427 579 +120.002251 35.863927 4036 +120.002251 35.868427 2272 +120.002251 35.872927 4867 +120.002251 35.877427 3667 +120.002251 35.881927 431 +120.002251 35.886427 910 +120.002251 35.890927 1015 +120.002251 35.895427 2509 +120.002251 35.904427 26719 +120.002251 35.908927 18 +120.002251 35.913427 7 +120.002251 35.917927 271 +120.002251 35.922427 36 +120.002251 35.980927 459 +120.002251 35.994427 645 +120.002251 36.012427 1945 +120.002251 36.052927 821 +120.002251 36.057427 5 +120.002251 36.066427 56 +120.002251 36.070927 2261 +120.002251 36.075427 2081 +120.002251 36.079927 45 +120.002251 36.088927 158 +120.002251 36.102427 812 +120.002251 36.120427 1004 +120.002251 36.142927 260 +120.002251 36.147427 6 +120.002251 36.151927 7 +120.002251 36.160927 6 +120.002251 36.165427 31 +120.002251 36.169927 1131 +120.002251 36.174427 1458 +120.002251 36.210427 3 +120.002251 36.223927 759 +120.002251 36.228427 18 +120.002251 36.232927 893 +120.002251 36.241927 26 +120.002251 36.246427 258 +120.002251 36.250927 86 +120.002251 36.255427 11 +120.002251 36.259927 323 +120.002251 36.264427 1408 +120.002251 36.268927 1057 +120.002251 36.273427 3389 +120.002251 36.277927 1889 +120.002251 36.282427 5218 +120.002251 36.286927 3190 +120.002251 36.291427 3561 +120.002251 36.295927 488 +120.002251 36.300427 130 +120.002251 36.304927 45 +120.002251 36.309427 2604 +120.002251 36.313927 174 +120.002251 36.318427 89 +120.002251 36.331927 13 +120.002251 36.336427 16 +120.002251 36.345427 579 +120.002251 36.349927 13 +120.002251 36.354427 1 +120.002251 36.358927 16 +120.002251 36.372427 3 +120.002251 36.403927 330 +120.002251 36.408427 223 +120.002251 36.511927 8 +120.002251 36.516427 1040 +120.002251 36.520927 4 +120.002251 36.592927 88 +120.002251 36.624427 10 +120.002251 36.628927 2 +120.002251 36.637927 450 +120.002251 36.664927 4 +120.002251 36.673927 15 +120.002251 36.727927 355 +120.002251 36.732427 1 +120.002251 36.741427 17 +120.002251 36.745927 665 +120.002251 36.750427 20 +120.002251 36.754927 546 +120.002251 36.759427 3 +120.002251 36.763927 435 +120.002251 36.768427 17 +120.002251 36.772927 466 +120.002251 36.777427 295 +120.002251 36.781927 2335 +120.002251 36.786427 4 +120.002251 36.795427 39 +120.002251 36.799927 120 +120.002251 36.952927 4 +120.002251 36.957427 728 +120.002251 36.975427 10 +120.002251 36.979927 2853 +120.002251 36.997927 3 +120.007751 35.796427 17 +120.007751 35.809927 22 +120.007751 35.832427 105 +120.007751 35.841427 3 +120.007751 35.845927 1476 +120.007751 35.850427 87 +120.007751 35.854927 351 +120.007751 35.859427 104 +120.007751 35.863927 36 +120.007751 35.868427 820 +120.007751 35.872927 282 +120.007751 35.877427 2333 +120.007751 35.881927 564 +120.007751 35.886427 1443 +120.007751 35.895427 2 +120.007751 35.913427 3 +120.007751 35.917927 33 +120.007751 35.989927 10 +120.007751 36.012427 24 +120.007751 36.052927 4 +120.007751 36.070927 6157 +120.007751 36.075427 51 +120.007751 36.079927 18 +120.007751 36.097927 8 +120.007751 36.147427 1326 +120.007751 36.169927 534 +120.007751 36.174427 15 +120.007751 36.183427 1027 +120.007751 36.192427 160 +120.007751 36.223927 241 +120.007751 36.246427 64 +120.007751 36.250927 2266 +120.007751 36.255427 262 +120.007751 36.259927 2938 +120.007751 36.264427 522 +120.007751 36.268927 2840 +120.007751 36.273427 3535 +120.007751 36.277927 6945 +120.007751 36.282427 2033 +120.007751 36.286927 4350 +120.007751 36.291427 2729 +120.007751 36.295927 84 +120.007751 36.300427 1319 +120.007751 36.304927 580 +120.007751 36.309427 425 +120.007751 36.322927 1 +120.007751 36.331927 3 +120.007751 36.336427 857 +120.007751 36.345427 806 +120.007751 36.363427 6 +120.007751 36.381427 28 +120.007751 36.390427 15 +120.007751 36.394927 665 +120.007751 36.408427 399 +120.007751 36.421927 533 +120.007751 36.489427 506 +120.007751 36.592927 288 +120.007751 36.597427 297 +120.007751 36.601927 353 +120.007751 36.606427 14 +120.007751 36.624427 576 +120.007751 36.646927 3 +120.007751 36.727927 24 +120.007751 36.732427 719 +120.007751 36.741427 563 +120.007751 36.745927 102 +120.007751 36.759427 62 +120.007751 36.763927 532 +120.007751 36.772927 1 +120.007751 36.781927 31 +120.007751 36.786427 2051 +120.007751 36.840427 1335 +120.007751 36.844927 17 +120.013251 35.742427 258 +120.013251 35.746927 1861 +120.013251 35.751427 5 +120.013251 35.755927 8 +120.013251 35.800927 5 +120.013251 35.805427 5 +120.013251 35.809927 65 +120.013251 35.814427 2695 +120.013251 35.832427 553 +120.013251 35.841427 790 +120.013251 35.845927 31 +120.013251 35.850427 128 +120.013251 35.863927 261 +120.013251 35.868427 2609 +120.013251 35.872927 913 +120.013251 35.877427 611 +120.013251 35.881927 466 +120.013251 35.886427 653 +120.013251 35.890927 2510 +120.013251 35.904427 202 +120.013251 35.913427 5 +120.013251 35.976427 824 +120.013251 36.034927 232 +120.013251 36.039427 14 +120.013251 36.070927 23 +120.013251 36.075427 10 +120.013251 36.079927 373 +120.013251 36.084427 185 +120.013251 36.088927 4 +120.013251 36.097927 189 +120.013251 36.102427 714 +120.013251 36.106927 9 +120.013251 36.120427 1596 +120.013251 36.133927 618 +120.013251 36.138427 739 +120.013251 36.147427 5 +120.013251 36.160927 1195 +120.013251 36.165427 315 +120.013251 36.169927 134 +120.013251 36.214927 727 +120.013251 36.219427 8 +120.013251 36.228427 634 +120.013251 36.237427 395 +120.013251 36.250927 426 +120.013251 36.255427 188 +120.013251 36.259927 1066 +120.013251 36.264427 1161 +120.013251 36.268927 2600 +120.013251 36.273427 3909 +120.013251 36.277927 6823 +120.013251 36.282427 5533 +120.013251 36.286927 1685 +120.013251 36.291427 2236 +120.013251 36.295927 66 +120.013251 36.300427 167 +120.013251 36.304927 186 +120.013251 36.309427 701 +120.013251 36.313927 820 +120.013251 36.322927 123 +120.013251 36.349927 401 +120.013251 36.363427 1167 +120.013251 36.381427 15 +120.013251 36.385927 7 +120.013251 36.390427 400 +120.013251 36.412927 484 +120.013251 36.466927 362 +120.013251 36.480427 5 +120.013251 36.502927 420 +120.013251 36.552427 12 +120.013251 36.556927 1180 +120.013251 36.601927 394 +120.013251 36.651427 372 +120.013251 36.669427 17 +120.013251 36.673927 7 +120.013251 36.678427 22 +120.013251 36.750427 6 +120.013251 36.754927 9 +120.013251 36.759427 307 +120.013251 36.763927 7341 +120.013251 36.768427 7 +120.013251 36.772927 1 +120.013251 36.781927 51 +120.013251 36.795427 3 +120.013251 36.840427 15 +120.018751 35.742427 3 +120.018751 35.751427 748 +120.018751 35.755927 4 +120.018751 35.769427 2 +120.018751 35.791927 478 +120.018751 35.796427 353 +120.018751 35.805427 19 +120.018751 35.809927 94 +120.018751 35.814427 12 +120.018751 35.832427 227 +120.018751 35.836927 3 +120.018751 35.845927 15 +120.018751 35.863927 493 +120.018751 35.868427 6613 +120.018751 35.872927 1462 +120.018751 35.877427 676 +120.018751 35.881927 640 +120.018751 35.886427 521 +120.018751 35.895427 71 +120.018751 35.899927 2 +120.018751 35.904427 64 +120.018751 35.908927 17 +120.018751 35.917927 170 +120.018751 36.030427 824 +120.018751 36.034927 2 +120.018751 36.066427 2 +120.018751 36.075427 125 +120.018751 36.079927 887 +120.018751 36.088927 99 +120.018751 36.120427 67 +120.018751 36.133927 59 +120.018751 36.138427 6 +120.018751 36.142927 1938 +120.018751 36.147427 33 +120.018751 36.151927 6 +120.018751 36.160927 10 +120.018751 36.210427 38 +120.018751 36.214927 560 +120.018751 36.228427 2707 +120.018751 36.232927 517 +120.018751 36.237427 593 +120.018751 36.241927 44 +120.018751 36.246427 527 +120.018751 36.250927 241 +120.018751 36.255427 623 +120.018751 36.259927 360 +120.018751 36.264427 390 +120.018751 36.268927 500 +120.018751 36.273427 2286 +120.018751 36.277927 2732 +120.018751 36.282427 2755 +120.018751 36.286927 1941 +120.018751 36.291427 486 +120.018751 36.295927 1301 +120.018751 36.300427 10 +120.018751 36.304927 17 +120.018751 36.309427 9 +120.018751 36.313927 6 +120.018751 36.358927 700 +120.018751 36.381427 2 +120.018751 36.385927 2442 +120.018751 36.390427 16 +120.018751 36.408427 516 +120.018751 36.412927 23 +120.018751 36.480427 328 +120.018751 36.484927 289 +120.018751 36.493927 357 +120.018751 36.498427 4 +120.018751 36.556927 656 +120.018751 36.601927 230 +120.018751 36.615427 981 +120.018751 36.669427 10 +120.018751 36.678427 25 +120.018751 36.687427 40 +120.018751 36.700927 159 +120.018751 36.745927 189 +120.018751 36.750427 168 +120.018751 36.759427 235 +120.018751 36.763927 63 +120.018751 36.768427 287 +120.018751 36.777427 3 +120.018751 36.781927 129 +120.018751 36.786427 687 +120.018751 36.795427 937 +120.018751 36.835927 8 +120.018751 36.862927 90 +120.018751 36.903427 3 +120.018751 36.970927 12 +120.024251 35.751427 4 +120.024251 35.773927 4306 +120.024251 35.791927 31 +120.024251 35.796427 96 +120.024251 35.859427 26 +120.024251 35.863927 3168 +120.024251 35.868427 7 +120.024251 35.872927 381 +120.024251 35.877427 2064 +120.024251 35.890927 4 +120.024251 35.895427 13 +120.024251 35.899927 76 +120.024251 35.904427 42 +120.024251 35.908927 5 +120.024251 35.917927 103 +120.024251 35.926927 8 +120.024251 35.931427 3 +120.024251 36.030427 10 +120.024251 36.070927 415 +120.024251 36.075427 32 +120.024251 36.079927 37 +120.024251 36.084427 1814 +120.024251 36.088927 367 +120.024251 36.093427 414 +120.024251 36.097927 792 +120.024251 36.102427 615 +120.024251 36.120427 14 +120.024251 36.124927 1470 +120.024251 36.142927 29 +120.024251 36.147427 19 +120.024251 36.174427 941 +120.024251 36.178927 26 +120.024251 36.183427 883 +120.024251 36.187927 7 +120.024251 36.210427 1173 +120.024251 36.219427 924 +120.024251 36.223927 9 +120.024251 36.228427 64 +120.024251 36.232927 8 +120.024251 36.237427 113 +120.024251 36.241927 1888 +120.024251 36.246427 19 +120.024251 36.250927 1263 +120.024251 36.255427 2183 +120.024251 36.259927 403 +120.024251 36.264427 2882 +120.024251 36.268927 2717 +120.024251 36.273427 929 +120.024251 36.277927 2130 +120.024251 36.282427 4177 +120.024251 36.286927 3878 +120.024251 36.291427 1578 +120.024251 36.295927 456 +120.024251 36.300427 1 +120.024251 36.313927 1398 +120.024251 36.318427 712 +120.024251 36.349927 809 +120.024251 36.354427 445 +120.024251 36.363427 1179 +120.024251 36.385927 6 +120.024251 36.390427 17 +120.024251 36.412927 1149 +120.024251 36.421927 21 +120.024251 36.426427 870 +120.024251 36.471427 6 +120.024251 36.475927 136 +120.024251 36.480427 5 +120.024251 36.484927 564 +120.024251 36.489427 219 +120.024251 36.511927 185 +120.024251 36.525427 2 +120.024251 36.529927 390 +120.024251 36.556927 213 +120.024251 36.574927 452 +120.024251 36.601927 648 +120.024251 36.606427 6 +120.024251 36.615427 645 +120.024251 36.633427 8 +120.024251 36.705427 6 +120.024251 36.732427 7 +120.024251 36.736927 1205 +120.024251 36.741427 47 +120.024251 36.745927 4 +120.024251 36.750427 4 +120.024251 36.754927 4 +120.024251 36.759427 1143 +120.024251 36.763927 367 +120.024251 36.768427 428 +120.024251 36.777427 189 +120.024251 36.786427 1099 +120.024251 36.790927 457 +120.024251 36.799927 3 +120.024251 36.835927 294 +120.024251 36.894427 36 +120.024251 36.903427 20 +120.024251 36.907927 8 +120.029751 35.791927 49 +120.029751 35.863927 106 +120.029751 35.868427 109 +120.029751 35.872927 417 +120.029751 35.877427 1927 +120.029751 35.881927 2405 +120.029751 35.886427 61 +120.029751 35.890927 432 +120.029751 35.895427 2927 +120.029751 35.899927 786 +120.029751 35.904427 200 +120.029751 36.043927 110 +120.029751 36.048427 1643 +120.029751 36.061927 342 +120.029751 36.066427 10 +120.029751 36.070927 157 +120.029751 36.079927 88 +120.029751 36.084427 588 +120.029751 36.088927 5 +120.029751 36.097927 30 +120.029751 36.102427 651 +120.029751 36.106927 1161 +120.029751 36.124927 20 +120.029751 36.142927 6 +120.029751 36.165427 631 +120.029751 36.169927 586 +120.029751 36.192427 298 +120.029751 36.196927 387 +120.029751 36.241927 113 +120.029751 36.246427 377 +120.029751 36.250927 42 +120.029751 36.255427 90 +120.029751 36.264427 4228 +120.029751 36.268927 693 +120.029751 36.277927 430 +120.029751 36.282427 1811 +120.029751 36.286927 3368 +120.029751 36.291427 3401 +120.029751 36.295927 617 +120.029751 36.300427 98 +120.029751 36.309427 7 +120.029751 36.349927 14 +120.029751 36.412927 1378 +120.029751 36.426427 470 +120.029751 36.466927 3 +120.029751 36.471427 768 +120.029751 36.475927 26 +120.029751 36.480427 169 +120.029751 36.489427 3 +120.029751 36.556927 899 +120.029751 36.588427 843 +120.029751 36.606427 3 +120.029751 36.633427 2039 +120.029751 36.637927 8 +120.029751 36.655927 4 +120.029751 36.664927 27 +120.029751 36.678427 10 +120.029751 36.705427 25 +120.029751 36.714427 6 +120.029751 36.723427 51 +120.029751 36.736927 389 +120.029751 36.741427 1077 +120.029751 36.745927 24 +120.029751 36.750427 674 +120.029751 36.777427 7 +120.029751 36.781927 571 +120.029751 36.813427 14 +120.029751 36.894427 1983 +120.029751 36.898927 3 +120.029751 36.903427 1769 +120.035251 35.814427 4 +120.035251 35.863927 1421 +120.035251 35.868427 15 +120.035251 35.872927 79 +120.035251 35.877427 1395 +120.035251 35.881927 397 +120.035251 35.886427 28 +120.035251 35.890927 12 +120.035251 35.895427 538 +120.035251 35.899927 555 +120.035251 35.922427 4 +120.035251 35.926927 7 +120.035251 35.958427 1 +120.035251 36.003427 573 +120.035251 36.034927 6 +120.035251 36.043927 4 +120.035251 36.057427 980 +120.035251 36.066427 627 +120.035251 36.070927 28 +120.035251 36.075427 6 +120.035251 36.079927 373 +120.035251 36.084427 567 +120.035251 36.129427 370 +120.035251 36.142927 11 +120.035251 36.147427 10 +120.035251 36.156427 713 +120.035251 36.187927 422 +120.035251 36.250927 234 +120.035251 36.255427 1830 +120.035251 36.259927 59 +120.035251 36.264427 1555 +120.035251 36.273427 2 +120.035251 36.277927 46 +120.035251 36.282427 19 +120.035251 36.286927 268 +120.035251 36.291427 177 +120.035251 36.295927 496 +120.035251 36.300427 416 +120.035251 36.309427 7 +120.035251 36.313927 9 +120.035251 36.340927 1334 +120.035251 36.345427 6 +120.035251 36.372427 804 +120.035251 36.376927 1039 +120.035251 36.394927 727 +120.035251 36.399427 4 +120.035251 36.403927 400 +120.035251 36.435427 403 +120.035251 36.439927 512 +120.035251 36.498427 7 +120.035251 36.511927 12 +120.035251 36.570427 586 +120.035251 36.574927 3 +120.035251 36.588427 5 +120.035251 36.696427 16 +120.035251 36.736927 6 +120.035251 36.741427 27 +120.035251 36.745927 488 +120.035251 36.750427 591 +120.035251 36.754927 34 +120.035251 36.763927 4 +120.035251 36.777427 115 +120.035251 36.781927 1012 +120.035251 36.858427 13 +120.035251 36.876427 2 +120.035251 36.889927 3 +120.040751 35.859427 13 +120.040751 35.863927 73 +120.040751 35.868427 1605 +120.040751 35.872927 512 +120.040751 35.877427 75 +120.040751 35.881927 181 +120.040751 35.890927 181 +120.040751 35.895427 20815 +120.040751 35.899927 636 +120.040751 35.904427 162 +120.040751 35.917927 5 +120.040751 36.007927 23 +120.040751 36.012427 197 +120.040751 36.030427 1682 +120.040751 36.034927 222 +120.040751 36.043927 619 +120.040751 36.057427 8 +120.040751 36.124927 374 +120.040751 36.129427 814 +120.040751 36.133927 102 +120.040751 36.142927 1961 +120.040751 36.147427 3 +120.040751 36.174427 806 +120.040751 36.223927 712 +120.040751 36.237427 220 +120.040751 36.246427 3 +120.040751 36.250927 1529 +120.040751 36.255427 2391 +120.040751 36.259927 35 +120.040751 36.286927 156 +120.040751 36.291427 284 +120.040751 36.295927 1796 +120.040751 36.304927 3 +120.040751 36.309427 555 +120.040751 36.313927 848 +120.040751 36.367927 21 +120.040751 36.372427 6 +120.040751 36.376927 8 +120.040751 36.426427 18 +120.040751 36.439927 577 +120.040751 36.448927 3 +120.040751 36.453427 871 +120.040751 36.471427 287 +120.040751 36.475927 516 +120.040751 36.480427 369 +120.040751 36.547927 3 +120.040751 36.588427 870 +120.040751 36.633427 477 +120.040751 36.655927 17 +120.040751 36.678427 11 +120.040751 36.700927 3 +120.040751 36.745927 6 +120.040751 36.750427 3 +120.040751 36.754927 681 +120.040751 36.795427 53 +120.040751 36.804427 1 +120.040751 36.826927 5 +120.040751 36.885427 10 +120.040751 36.894427 12 +120.040751 36.930427 274 +120.046251 35.868427 7 +120.046251 35.872927 42 +120.046251 35.877427 861 +120.046251 35.881927 714 +120.046251 35.886427 49 +120.046251 35.890927 25 +120.046251 35.895427 35 +120.046251 35.899927 186 +120.046251 35.913427 280 +120.046251 35.917927 98 +120.046251 35.949427 12 +120.046251 36.012427 20 +120.046251 36.021427 86 +120.046251 36.025927 103 +120.046251 36.030427 213 +120.046251 36.043927 14 +120.046251 36.052927 55 +120.046251 36.057427 56 +120.046251 36.061927 598 +120.046251 36.066427 35 +120.046251 36.079927 219 +120.046251 36.084427 38 +120.046251 36.088927 7 +120.046251 36.093427 755 +120.046251 36.115927 6 +120.046251 36.120427 1062 +120.046251 36.124927 378 +120.046251 36.129427 704 +120.046251 36.160927 674 +120.046251 36.169927 1784 +120.046251 36.174427 5 +120.046251 36.196927 358 +120.046251 36.205927 3 +120.046251 36.223927 2 +120.046251 36.228427 2 +120.046251 36.232927 35 +120.046251 36.241927 485 +120.046251 36.246427 499 +120.046251 36.250927 728 +120.046251 36.255427 29 +120.046251 36.259927 4 +120.046251 36.264427 218 +120.046251 36.268927 3 +120.046251 36.273427 338 +120.046251 36.286927 1458 +120.046251 36.291427 168 +120.046251 36.295927 1 +120.046251 36.300427 1073 +120.046251 36.304927 75 +120.046251 36.309427 227 +120.046251 36.313927 1176 +120.046251 36.318427 19 +120.046251 36.322927 21 +120.046251 36.327427 2614 +120.046251 36.331927 50 +120.046251 36.399427 6 +120.046251 36.403927 2 +120.046251 36.417427 1012 +120.046251 36.489427 736 +120.046251 36.498427 4 +120.046251 36.502927 6 +120.046251 36.507427 5 +120.046251 36.520927 4 +120.046251 36.547927 3 +120.046251 36.552427 571 +120.046251 36.565927 5 +120.046251 36.601927 342 +120.046251 36.651427 888 +120.046251 36.696427 31 +120.046251 36.700927 70 +120.046251 36.727927 2 +120.046251 36.822427 6 +120.046251 36.826927 6 +120.046251 36.844927 9 +120.046251 36.853927 3 +120.051751 35.872927 8 +120.051751 35.877427 2082 +120.051751 35.881927 442 +120.051751 35.886427 270 +120.051751 35.890927 23 +120.051751 35.895427 217 +120.051751 35.904427 1289 +120.051751 35.917927 4 +120.051751 35.931427 352 +120.051751 35.940427 316 +120.051751 35.949427 33 +120.051751 35.953927 43 +120.051751 35.994427 62 +120.051751 35.998927 26 +120.051751 36.052927 21 +120.051751 36.057427 76 +120.051751 36.066427 292 +120.051751 36.079927 8 +120.051751 36.084427 686 +120.051751 36.093427 4 +120.051751 36.115927 34 +120.051751 36.120427 1142 +120.051751 36.138427 340 +120.051751 36.160927 5 +120.051751 36.169927 4 +120.051751 36.219427 267 +120.051751 36.228427 344 +120.051751 36.232927 433 +120.051751 36.237427 4 +120.051751 36.241927 6 +120.051751 36.246427 137 +120.051751 36.250927 262 +120.051751 36.255427 230 +120.051751 36.264427 475 +120.051751 36.282427 3 +120.051751 36.291427 3154 +120.051751 36.295927 241 +120.051751 36.300427 1401 +120.051751 36.313927 1114 +120.051751 36.318427 35 +120.051751 36.327427 116 +120.051751 36.331927 46 +120.051751 36.336427 6 +120.051751 36.349927 1134 +120.051751 36.354427 1062 +120.051751 36.385927 1544 +120.051751 36.426427 2 +120.051751 36.430927 577 +120.051751 36.439927 3 +120.051751 36.457927 771 +120.051751 36.466927 340 +120.051751 36.484927 465 +120.051751 36.493927 5 +120.051751 36.502927 3484 +120.051751 36.561427 19 +120.051751 36.565927 905 +120.051751 36.570427 619 +120.051751 36.610927 4 +120.051751 36.615427 1094 +120.051751 36.637927 4 +120.051751 36.642427 5 +120.051751 36.646927 3 +120.051751 36.655927 8 +120.051751 36.669427 9 +120.051751 36.691927 7 +120.051751 36.709927 3 +120.051751 36.727927 3 +120.051751 36.732427 3 +120.051751 36.736927 722 +120.051751 36.745927 770 +120.051751 36.754927 22 +120.051751 36.763927 20 +120.051751 36.768427 14 +120.051751 36.826927 20 +120.051751 36.835927 10 +120.051751 36.867427 7 +120.051751 36.943927 12 +120.057251 35.881927 3932 +120.057251 35.886427 9 +120.057251 35.890927 120 +120.057251 35.899927 8 +120.057251 35.985427 5 +120.057251 35.989927 1123 +120.057251 35.994427 1111 +120.057251 35.998927 188 +120.057251 36.007927 441 +120.057251 36.012427 274 +120.057251 36.030427 21 +120.057251 36.061927 469 +120.057251 36.066427 423 +120.057251 36.075427 777 +120.057251 36.079927 347 +120.057251 36.102427 955 +120.057251 36.111427 4 +120.057251 36.115927 2757 +120.057251 36.192427 4 +120.057251 36.205927 505 +120.057251 36.228427 681 +120.057251 36.232927 11 +120.057251 36.237427 10 +120.057251 36.241927 623 +120.057251 36.246427 405 +120.057251 36.250927 749 +120.057251 36.255427 2 +120.057251 36.291427 43 +120.057251 36.295927 255 +120.057251 36.300427 19 +120.057251 36.318427 15 +120.057251 36.336427 35 +120.057251 36.340927 1998 +120.057251 36.385927 19 +120.057251 36.403927 1230 +120.057251 36.552427 706 +120.057251 36.570427 350 +120.057251 36.597427 202 +120.057251 36.610927 4 +120.057251 36.615427 4 +120.057251 36.637927 467 +120.057251 36.660427 135 +120.057251 36.687427 63 +120.057251 36.691927 21 +120.057251 36.696427 26 +120.057251 36.705427 10 +120.057251 36.714427 33 +120.057251 36.763927 7 +120.057251 36.786427 7 +120.057251 36.795427 18 +120.057251 36.808927 8 +120.057251 36.817927 11 +120.057251 36.943927 19 +120.057251 37.002427 214 +120.062751 35.881927 39 +120.062751 35.886427 485 +120.062751 35.890927 1107 +120.062751 35.895427 18 +120.062751 35.904427 4 +120.062751 35.931427 131 +120.062751 35.958427 145 +120.062751 35.980927 5 +120.062751 35.985427 6 +120.062751 36.012427 47 +120.062751 36.030427 837 +120.062751 36.039427 401 +120.062751 36.048427 13 +120.062751 36.061927 74 +120.062751 36.066427 137 +120.062751 36.070927 94 +120.062751 36.075427 173 +120.062751 36.079927 7 +120.062751 36.084427 994 +120.062751 36.111427 3 +120.062751 36.156427 10 +120.062751 36.174427 1362 +120.062751 36.178927 23 +120.062751 36.183427 16 +120.062751 36.210427 669 +120.062751 36.228427 9 +120.062751 36.237427 95 +120.062751 36.241927 30 +120.062751 36.246427 380 +120.062751 36.250927 99 +120.062751 36.291427 6 +120.062751 36.295927 2112 +120.062751 36.300427 229 +120.062751 36.304927 6 +120.062751 36.313927 8 +120.062751 36.327427 18 +120.062751 36.336427 1802 +120.062751 36.340927 13 +120.062751 36.381427 668 +120.062751 36.385927 5 +120.062751 36.403927 5 +120.062751 36.435427 28 +120.062751 36.439927 14 +120.062751 36.462427 239 +120.062751 36.552427 4 +120.062751 36.556927 4 +120.062751 36.570427 558 +120.062751 36.574927 621 +120.062751 36.610927 518 +120.062751 36.615427 843 +120.062751 36.660427 771 +120.062751 36.664927 16 +120.062751 36.682927 22 +120.062751 36.687427 107 +120.062751 36.691927 12 +120.062751 36.705427 27 +120.062751 36.759427 7 +120.062751 36.772927 4 +120.062751 36.777427 2027 +120.062751 36.790927 1207 +120.062751 36.795427 413 +120.062751 36.808927 20 +120.062751 36.835927 852 +120.062751 36.916927 760 +120.062751 36.930427 2185 +120.062751 37.006927 474 +120.068251 35.890927 25 +120.068251 35.899927 391 +120.068251 35.926927 13 +120.068251 35.931427 6 +120.068251 35.944927 17 +120.068251 36.012427 869 +120.068251 36.021427 3 +120.068251 36.025927 578 +120.068251 36.088927 3 +120.068251 36.097927 472 +120.068251 36.102427 405 +120.068251 36.174427 1643 +120.068251 36.178927 618 +120.068251 36.183427 1768 +120.068251 36.187927 5 +120.068251 36.228427 2200 +120.068251 36.232927 116 +120.068251 36.246427 1315 +120.068251 36.250927 40 +120.068251 36.282427 16 +120.068251 36.291427 219 +120.068251 36.313927 38 +120.068251 36.318427 884 +120.068251 36.322927 483 +120.068251 36.327427 34 +120.068251 36.345427 960 +120.068251 36.381427 6 +120.068251 36.417427 40 +120.068251 36.435427 1105 +120.068251 36.439927 1017 +120.068251 36.444427 120 +120.068251 36.448927 4 +120.068251 36.457927 6 +120.068251 36.471427 3 +120.068251 36.475927 589 +120.068251 36.502927 1388 +120.068251 36.552427 11 +120.068251 36.556927 1534 +120.068251 36.574927 693 +120.068251 36.583927 450 +120.068251 36.646927 15 +120.068251 36.651427 13 +120.068251 36.660427 14 +120.068251 36.664927 10 +120.068251 36.678427 2172 +120.068251 36.682927 467 +120.068251 36.687427 153 +120.068251 36.691927 10 +120.068251 36.750427 4 +120.068251 36.763927 6 +120.068251 36.768427 30 +120.068251 36.772927 3 +120.068251 36.781927 9 +120.068251 36.813427 8 +120.068251 36.822427 7 +120.068251 36.831427 81 +120.068251 36.835927 262 +120.068251 36.844927 817 +120.068251 36.849427 10 +120.068251 36.853927 4 +120.068251 36.916927 10 +120.068251 36.930427 136 +120.068251 36.975427 309 +120.068251 37.006927 317 +120.073751 35.886427 10 +120.073751 35.890927 7 +120.073751 35.895427 879 +120.073751 35.899927 39 +120.073751 35.931427 384 +120.073751 35.935927 336 +120.073751 36.007927 630 +120.073751 36.012427 47 +120.073751 36.030427 361 +120.073751 36.034927 5 +120.073751 36.093427 339 +120.073751 36.097927 134 +120.073751 36.102427 1131 +120.073751 36.183427 57 +120.073751 36.187927 1073 +120.073751 36.196927 1259 +120.073751 36.210427 714 +120.073751 36.214927 821 +120.073751 36.219427 8 +120.073751 36.228427 43 +120.073751 36.232927 7 +120.073751 36.241927 29 +120.073751 36.246427 960 +120.073751 36.286927 108 +120.073751 36.291427 176 +120.073751 36.295927 3624 +120.073751 36.300427 9 +120.073751 36.313927 1021 +120.073751 36.331927 453 +120.073751 36.340927 6 +120.073751 36.345427 610 +120.073751 36.349927 19 +120.073751 36.354427 520 +120.073751 36.376927 7 +120.073751 36.390427 5 +120.073751 36.394927 1278 +120.073751 36.417427 3 +120.073751 36.421927 5 +120.073751 36.439927 4 +120.073751 36.448927 1804 +120.073751 36.453427 5 +120.073751 36.457927 541 +120.073751 36.462427 426 +120.073751 36.480427 147 +120.073751 36.507427 14 +120.073751 36.511927 4 +120.073751 36.597427 542 +120.073751 36.601927 6 +120.073751 36.606427 559 +120.073751 36.615427 355 +120.073751 36.642427 586 +120.073751 36.651427 2339 +120.073751 36.673927 1 +120.073751 36.682927 228 +120.073751 36.700927 8 +120.073751 36.732427 8 +120.073751 36.736927 5 +120.073751 36.768427 30 +120.073751 36.772927 16 +120.073751 36.786427 7 +120.073751 36.795427 5 +120.073751 36.831427 10 +120.073751 36.835927 173 +120.073751 36.844927 3 +120.073751 36.867427 3 +120.073751 36.885427 317 +120.073751 36.916927 696 +120.073751 36.975427 37 +120.079251 35.926927 5 +120.079251 35.931427 9 +120.079251 35.998927 9 +120.079251 36.012427 844 +120.079251 36.016927 217 +120.079251 36.021427 574 +120.079251 36.025927 64 +120.079251 36.034927 531 +120.079251 36.043927 294 +120.079251 36.057427 4 +120.079251 36.084427 124 +120.079251 36.088927 1363 +120.079251 36.093427 1316 +120.079251 36.097927 26 +120.079251 36.138427 17 +120.079251 36.196927 6 +120.079251 36.210427 100 +120.079251 36.214927 2130 +120.079251 36.219427 5 +120.079251 36.250927 10 +120.079251 36.291427 247 +120.079251 36.295927 267 +120.079251 36.300427 12 +120.079251 36.313927 3 +120.079251 36.322927 422 +120.079251 36.327427 1 +120.079251 36.331927 940 +120.079251 36.399427 1198 +120.079251 36.421927 244 +120.079251 36.426427 5 +120.079251 36.439927 8 +120.079251 36.448927 551 +120.079251 36.502927 391 +120.079251 36.507427 1036 +120.079251 36.511927 7 +120.079251 36.597427 636 +120.079251 36.601927 4 +120.079251 36.606427 9 +120.079251 36.646927 1 +120.079251 36.651427 1309 +120.079251 36.682927 60 +120.079251 36.687427 77 +120.079251 36.691927 6 +120.079251 36.700927 13 +120.079251 36.705427 8 +120.079251 36.718927 8 +120.079251 36.723427 11 +120.079251 36.754927 4 +120.079251 36.849427 10 +120.079251 36.912427 714 +120.079251 36.970927 3 +120.079251 37.002427 2095 +120.084751 35.890927 2 +120.084751 35.904427 3 +120.084751 35.917927 9 +120.084751 35.998927 341 +120.084751 36.012427 38 +120.084751 36.016927 109 +120.084751 36.021427 803 +120.084751 36.025927 21 +120.084751 36.052927 27 +120.084751 36.057427 1968 +120.084751 36.066427 188 +120.084751 36.084427 551 +120.084751 36.088927 2310 +120.084751 36.093427 2 +120.084751 36.183427 345 +120.084751 36.187927 5 +120.084751 36.214927 3 +120.084751 36.291427 296 +120.084751 36.295927 1218 +120.084751 36.300427 303 +120.084751 36.304927 1246 +120.084751 36.327427 7 +120.084751 36.331927 16 +120.084751 36.358927 2032 +120.084751 36.363427 40 +120.084751 36.385927 7 +120.084751 36.390427 8 +120.084751 36.421927 1044 +120.084751 36.426427 11 +120.084751 36.448927 1 +120.084751 36.502927 653 +120.084751 36.507427 6 +120.084751 36.511927 2689 +120.084751 36.516427 4 +120.084751 36.543427 192 +120.084751 36.547927 2259 +120.084751 36.556927 903 +120.084751 36.561427 12 +120.084751 36.574927 1354 +120.084751 36.579427 11 +120.084751 36.583927 484 +120.084751 36.597427 534 +120.084751 36.601927 17 +120.084751 36.606427 524 +120.084751 36.624427 148 +120.084751 36.628927 99 +120.084751 36.633427 12 +120.084751 36.651427 1302 +120.084751 36.682927 20 +120.084751 36.687427 40 +120.084751 36.691927 7 +120.084751 36.696427 27 +120.084751 36.700927 45 +120.084751 36.705427 8 +120.084751 36.732427 1520 +120.084751 36.750427 14 +120.084751 36.799927 215 +120.084751 36.876427 901 +120.084751 36.880927 173 +120.084751 36.889927 404 +120.084751 36.952927 652 +120.084751 36.988927 128 +120.084751 36.997927 2118 +120.090251 35.899927 2 +120.090251 35.917927 3 +120.090251 36.007927 1353 +120.090251 36.012427 496 +120.090251 36.025927 7 +120.090251 36.030427 88 +120.090251 36.048427 173 +120.090251 36.061927 294 +120.090251 36.066427 500 +120.090251 36.070927 97 +120.090251 36.088927 3 +120.090251 36.097927 179 +120.090251 36.178927 107 +120.090251 36.277927 9 +120.090251 36.291427 48 +120.090251 36.304927 876 +120.090251 36.309427 5 +120.090251 36.318427 6 +120.090251 36.322927 7 +120.090251 36.345427 1735 +120.090251 36.358927 3 +120.090251 36.439927 506 +120.090251 36.444427 725 +120.090251 36.453427 623 +120.090251 36.462427 6 +120.090251 36.466927 435 +120.090251 36.475927 440 +120.090251 36.480427 558 +120.090251 36.484927 306 +120.090251 36.511927 4 +120.090251 36.516427 924 +120.090251 36.543427 130 +120.090251 36.547927 44 +120.090251 36.556927 14 +120.090251 36.561427 3 +120.090251 36.574927 25 +120.090251 36.619927 1737 +120.090251 36.624427 149 +120.090251 36.628927 1864 +120.090251 36.633427 18 +120.090251 36.651427 1030 +120.090251 36.682927 10 +120.090251 36.736927 33 +120.090251 36.745927 42 +120.090251 36.750427 35 +120.090251 36.754927 27 +120.090251 36.786427 878 +120.090251 36.840427 3 +120.090251 36.844927 228 +120.090251 36.907927 442 +120.090251 36.912427 87 +120.090251 36.979927 43 +120.090251 36.984427 1950 +120.090251 36.997927 2 +120.095751 35.917927 1 +120.095751 35.926927 6 +120.095751 35.931427 584 +120.095751 35.989927 66 +120.095751 36.016927 700 +120.095751 36.030427 22 +120.095751 36.079927 1342 +120.095751 36.088927 2066 +120.095751 36.093427 828 +120.095751 36.097927 12 +120.095751 36.102427 59 +120.095751 36.187927 2245 +120.095751 36.192427 13 +120.095751 36.232927 31 +120.095751 36.304927 4 +120.095751 36.309427 21 +120.095751 36.331927 1401 +120.095751 36.421927 6 +120.095751 36.426427 20 +120.095751 36.444427 5 +120.095751 36.466927 14 +120.095751 36.475927 614 +120.095751 36.493927 605 +120.095751 36.556927 1335 +120.095751 36.561427 10 +120.095751 36.588427 19 +120.095751 36.619927 86 +120.095751 36.624427 54 +120.095751 36.628927 5 +120.095751 36.637927 19 +120.095751 36.669427 5 +120.095751 36.691927 2 +120.095751 36.705427 6 +120.095751 36.732427 5 +120.095751 36.736927 14 +120.095751 36.745927 15 +120.095751 36.750427 10577 +120.095751 36.754927 17 +120.095751 36.759427 6 +120.095751 36.840427 9 +120.095751 36.907927 806 +120.095751 36.939427 575 +120.095751 36.957427 10 +120.095751 36.979927 776 +120.095751 37.002427 297 +120.101251 35.904427 1 +120.101251 35.908927 20 +120.101251 35.913427 556 +120.101251 35.917927 7 +120.101251 35.926927 115 +120.101251 35.931427 5 +120.101251 35.994427 623 +120.101251 36.012427 3 +120.101251 36.021427 193 +120.101251 36.030427 588 +120.101251 36.052927 268 +120.101251 36.066427 509 +120.101251 36.088927 69 +120.101251 36.093427 8 +120.101251 36.097927 68 +120.101251 36.291427 44 +120.101251 36.295927 109 +120.101251 36.300427 54 +120.101251 36.304927 99 +120.101251 36.309427 2404 +120.101251 36.313927 184 +120.101251 36.318427 920 +120.101251 36.331927 175 +120.101251 36.367927 27 +120.101251 36.385927 183 +120.101251 36.475927 9 +120.101251 36.547927 3 +120.101251 36.556927 4 +120.101251 36.588427 687 +120.101251 36.597427 8 +120.101251 36.601927 1220 +120.101251 36.619927 669 +120.101251 36.624427 57 +120.101251 36.628927 644 +120.101251 36.633427 8 +120.101251 36.669427 38 +120.101251 36.705427 6 +120.101251 36.709927 2 +120.101251 36.723427 7 +120.101251 36.727927 829 +120.101251 36.741427 22 +120.101251 36.750427 65045 +120.101251 36.754927 7 +120.101251 36.777427 19 +120.101251 36.786427 4 +120.101251 36.835927 12 +120.101251 36.871927 452 +120.101251 36.889927 390 +120.101251 36.921427 1334 +120.101251 36.925927 496 +120.101251 36.957427 2329 +120.101251 36.961927 863 +120.101251 36.966427 4 +120.101251 36.975427 365 +120.101251 36.993427 577 +120.106751 35.899927 4 +120.106751 35.908927 6 +120.106751 35.913427 351 +120.106751 35.922427 221 +120.106751 35.985427 1899 +120.106751 35.994427 41 +120.106751 35.998927 636 +120.106751 36.003427 21 +120.106751 36.012427 1 +120.106751 36.016927 302 +120.106751 36.030427 277 +120.106751 36.034927 521 +120.106751 36.066427 5 +120.106751 36.075427 3 +120.106751 36.093427 37 +120.106751 36.097927 13 +120.106751 36.133927 6 +120.106751 36.291427 109 +120.106751 36.295927 5865 +120.106751 36.300427 88 +120.106751 36.304927 102 +120.106751 36.309427 1082 +120.106751 36.313927 2 +120.106751 36.331927 784 +120.106751 36.363427 29 +120.106751 36.367927 28 +120.106751 36.376927 9 +120.106751 36.385927 2364 +120.106751 36.390427 8 +120.106751 36.394927 1786 +120.106751 36.408427 959 +120.106751 36.417427 616 +120.106751 36.471427 8 +120.106751 36.480427 815 +120.106751 36.484927 516 +120.106751 36.547927 4 +120.106751 36.552427 1320 +120.106751 36.579427 81 +120.106751 36.601927 3 +120.106751 36.610927 977 +120.106751 36.633427 975 +120.106751 36.637927 867 +120.106751 36.642427 9 +120.106751 36.669427 13 +120.106751 36.682927 12 +120.106751 36.687427 9 +120.106751 36.714427 37 +120.106751 36.723427 22 +120.106751 36.741427 31 +120.106751 36.745927 4 +120.106751 36.777427 16 +120.106751 36.781927 31 +120.106751 36.790927 10 +120.106751 36.826927 713 +120.106751 36.840427 13 +120.106751 36.862927 540 +120.106751 36.943927 1 +120.106751 36.975427 3 +120.112251 35.917927 1742 +120.112251 35.922427 6 +120.112251 35.931427 53 +120.112251 35.971927 3 +120.112251 35.989927 15 +120.112251 35.994427 130 +120.112251 36.003427 1149 +120.112251 36.007927 21 +120.112251 36.012427 223 +120.112251 36.016927 163 +120.112251 36.021427 169 +120.112251 36.057427 3 +120.112251 36.079927 705 +120.112251 36.088927 30 +120.112251 36.093427 1460 +120.112251 36.295927 17 +120.112251 36.304927 14 +120.112251 36.309427 690 +120.112251 36.313927 1042 +120.112251 36.358927 2736 +120.112251 36.363427 25 +120.112251 36.367927 5 +120.112251 36.376927 1421 +120.112251 36.385927 22 +120.112251 36.390427 13 +120.112251 36.403927 1320 +120.112251 36.408427 630 +120.112251 36.412927 1907 +120.112251 36.430927 4 +120.112251 36.435427 4 +120.112251 36.480427 8 +120.112251 36.484927 9 +120.112251 36.502927 32 +120.112251 36.507427 35 +120.112251 36.511927 146 +120.112251 36.516427 19 +120.112251 36.547927 302 +120.112251 36.579427 1341 +120.112251 36.592927 543 +120.112251 36.682927 14 +120.112251 36.700927 5 +120.112251 36.705427 71 +120.112251 36.727927 4 +120.112251 36.790927 646 +120.112251 36.795427 4 +120.112251 36.813427 5 +120.112251 36.826927 277 +120.112251 36.867427 269 +120.112251 36.871927 12 +120.112251 36.880927 202 +120.112251 36.907927 1842 +120.112251 36.934927 279 +120.112251 36.957427 1228 +120.112251 36.961927 9 +120.112251 36.984427 7 +120.117751 35.922427 10 +120.117751 35.926927 177 +120.117751 35.931427 152 +120.117751 35.953927 17 +120.117751 35.958427 6 +120.117751 35.962927 44 +120.117751 35.967427 2 +120.117751 35.971927 564 +120.117751 35.989927 48 +120.117751 35.994427 2296 +120.117751 35.998927 50 +120.117751 36.003427 34 +120.117751 36.012427 367 +120.117751 36.016927 767 +120.117751 36.021427 10 +120.117751 36.093427 1732 +120.117751 36.133927 204 +120.117751 36.192427 269 +120.117751 36.273427 907 +120.117751 36.277927 4 +120.117751 36.309427 57 +120.117751 36.313927 2227 +120.117751 36.318427 38 +120.117751 36.372427 911 +120.117751 36.390427 6 +120.117751 36.408427 5 +120.117751 36.430927 722 +120.117751 36.435427 3666 +120.117751 36.439927 18 +120.117751 36.502927 74 +120.117751 36.507427 113 +120.117751 36.511927 5925 +120.117751 36.516427 1469 +120.117751 36.520927 61 +120.117751 36.525427 20 +120.117751 36.529927 1467 +120.117751 36.538927 4 +120.117751 36.601927 5 +120.117751 36.606427 472 +120.117751 36.637927 5 +120.117751 36.642427 1898 +120.117751 36.687427 2 +120.117751 36.705427 91 +120.117751 36.736927 27 +120.117751 36.795427 63 +120.117751 36.813427 151 +120.117751 36.871927 625 +120.117751 36.885427 446 +120.117751 36.903427 448 +120.117751 36.925927 184 +120.117751 36.943927 4 +120.117751 36.970927 578 +120.117751 36.984427 378 +120.117751 36.993427 614 +120.123251 35.917927 161 +120.123251 35.922427 70 +120.123251 35.926927 6 +120.123251 35.931427 6 +120.123251 35.935927 205 +120.123251 35.967427 12 +120.123251 35.994427 16 +120.123251 35.998927 3792 +120.123251 36.007927 15 +120.123251 36.012427 569 +120.123251 36.016927 21 +120.123251 36.021427 1552 +120.123251 36.025927 52 +120.123251 36.030427 971 +120.123251 36.057427 699 +120.123251 36.061927 13 +120.123251 36.079927 1130 +120.123251 36.088927 1601 +120.123251 36.237427 6 +120.123251 36.309427 65 +120.123251 36.313927 12 +120.123251 36.322927 460 +120.123251 36.358927 5 +120.123251 36.363427 1216 +120.123251 36.367927 1450 +120.123251 36.376927 74 +120.123251 36.381427 387 +120.123251 36.385927 24 +120.123251 36.390427 1855 +120.123251 36.394927 2 +120.123251 36.399427 9 +120.123251 36.403927 2 +120.123251 36.417427 2473 +120.123251 36.421927 399 +120.123251 36.435427 5 +120.123251 36.444427 727 +120.123251 36.448927 268 +120.123251 36.457927 3 +120.123251 36.462427 10 +120.123251 36.484927 576 +120.123251 36.502927 7 +120.123251 36.507427 30 +120.123251 36.511927 18 +120.123251 36.520927 1724 +120.123251 36.525427 119 +120.123251 36.529927 1068 +120.123251 36.534427 784 +120.123251 36.538927 279 +120.123251 36.543427 147 +120.123251 36.574927 1 +120.123251 36.592927 749 +120.123251 36.637927 2485 +120.123251 36.642427 3 +120.123251 36.660427 414 +120.123251 36.687427 10 +120.123251 36.691927 26 +120.123251 36.696427 6 +120.123251 36.732427 27 +120.123251 36.790927 296 +120.123251 36.822427 247 +120.123251 36.835927 193 +120.123251 36.867427 1449 +120.123251 36.912427 1099 +120.123251 36.970927 7 +120.123251 36.975427 539 +120.123251 37.006927 78 +120.128751 35.913427 5 +120.128751 35.922427 365 +120.128751 35.926927 1218 +120.128751 35.931427 361 +120.128751 35.940427 17 +120.128751 35.944927 11 +120.128751 35.949427 424 +120.128751 35.971927 844 +120.128751 35.989927 166 +120.128751 35.994427 19 +120.128751 35.998927 33 +120.128751 36.003427 101 +120.128751 36.007927 405 +120.128751 36.012427 1 +120.128751 36.016927 14 +120.128751 36.021427 919 +120.128751 36.030427 4 +120.128751 36.057427 1073 +120.128751 36.061927 46 +120.128751 36.066427 124 +120.128751 36.084427 3568 +120.128751 36.219427 10 +120.128751 36.237427 3653 +120.128751 36.241927 6 +120.128751 36.291427 817 +120.128751 36.313927 707 +120.128751 36.318427 20 +120.128751 36.322927 1035 +120.128751 36.345427 10 +120.128751 36.376927 1292 +120.128751 36.381427 551 +120.128751 36.385927 589 +120.128751 36.390427 11 +120.128751 36.394927 716 +120.128751 36.399427 2437 +120.128751 36.408427 4 +120.128751 36.444427 699 +120.128751 36.448927 520 +120.128751 36.453427 1384 +120.128751 36.462427 847 +120.128751 36.466927 3 +120.128751 36.511927 51 +120.128751 36.516427 506 +120.128751 36.520927 9 +120.128751 36.525427 671 +120.128751 36.529927 3170 +120.128751 36.534427 2671 +120.128751 36.718927 4 +120.128751 36.759427 44 +120.128751 36.804427 568 +120.128751 36.835927 395 +120.128751 36.894427 556 +120.128751 36.898927 239 +120.128751 36.943927 693 +120.128751 37.006927 714 +120.134251 35.922427 984 +120.134251 35.926927 275 +120.134251 35.931427 3307 +120.134251 35.935927 373 +120.134251 35.940427 180 +120.134251 35.976427 821 +120.134251 35.998927 12 +120.134251 36.003427 1 +120.134251 36.007927 2 +120.134251 36.012427 149 +120.134251 36.016927 425 +120.134251 36.025927 1261 +120.134251 36.034927 488 +120.134251 36.048427 7 +120.134251 36.052927 321 +120.134251 36.061927 37 +120.134251 36.066427 934 +120.134251 36.070927 2905 +120.134251 36.075427 145 +120.134251 36.079927 19 +120.134251 36.214927 4 +120.134251 36.219427 3660 +120.134251 36.241927 23 +120.134251 36.246427 2195 +120.134251 36.250927 8 +120.134251 36.286927 18 +120.134251 36.291427 44 +120.134251 36.295927 4 +120.134251 36.313927 3 +120.134251 36.318427 843 +120.134251 36.340927 33 +120.134251 36.345427 1894 +120.134251 36.358927 6 +120.134251 36.363427 31 +120.134251 36.376927 4 +120.134251 36.381427 13 +120.134251 36.390427 4 +120.134251 36.408427 425 +120.134251 36.466927 8 +120.134251 36.480427 532 +120.134251 36.507427 43 +120.134251 36.516427 4 +120.134251 36.520927 35 +120.134251 36.525427 2137 +120.134251 36.529927 96 +120.134251 36.534427 2425 +120.134251 36.538927 20 +120.134251 36.543427 2 +120.134251 36.547927 16 +120.134251 36.552427 18 +120.134251 36.601927 716 +120.134251 36.673927 7 +120.134251 36.691927 2149 +120.134251 36.696427 12 +120.134251 36.705427 26 +120.134251 36.709927 4 +120.134251 36.714427 13 +120.134251 36.718927 4 +120.134251 36.741427 3 +120.134251 36.759427 7 +120.134251 36.768427 3 +120.134251 36.772927 1259 +120.134251 36.777427 9 +120.134251 36.808927 5 +120.134251 36.894427 321 +120.139751 35.922427 243 +120.139751 35.926927 257 +120.139751 35.931427 953 +120.139751 35.935927 6 +120.139751 35.940427 21564 +120.139751 35.944927 18 +120.139751 35.949427 879 +120.139751 35.971927 25 +120.139751 35.976427 2231 +120.139751 35.980927 346 +120.139751 35.985427 488 +120.139751 36.003427 32 +120.139751 36.007927 193 +120.139751 36.012427 56 +120.139751 36.016927 1832 +120.139751 36.021427 2057 +120.139751 36.070927 14 +120.139751 36.075427 188 +120.139751 36.084427 3 +120.139751 36.228427 9 +120.139751 36.241927 38 +120.139751 36.246427 2797 +120.139751 36.286927 1011 +120.139751 36.300427 4 +120.139751 36.322927 1329 +120.139751 36.327427 161 +120.139751 36.340927 16 +120.139751 36.345427 71 +120.139751 36.349927 14 +120.139751 36.354427 55 +120.139751 36.358927 1161 +120.139751 36.363427 119 +120.139751 36.367927 37 +120.139751 36.376927 26 +120.139751 36.381427 970 +120.139751 36.408427 876 +120.139751 36.421927 5 +120.139751 36.426427 482 +120.139751 36.457927 771 +120.139751 36.466927 6 +120.139751 36.489427 14 +120.139751 36.502927 106 +120.139751 36.507427 2094 +120.139751 36.516427 8 +120.139751 36.520927 16 +120.139751 36.525427 5 +120.139751 36.529927 71 +120.139751 36.534427 41 +120.139751 36.543427 1 +120.139751 36.547927 2529 +120.139751 36.552427 1188 +120.139751 36.615427 42 +120.139751 36.619927 1520 +120.139751 36.673927 5 +120.139751 36.696427 8 +120.139751 36.700927 734 +120.139751 36.705427 12 +120.139751 36.709927 85 +120.139751 36.714427 6 +120.139751 36.741427 9 +120.139751 36.768427 775 +120.139751 36.786427 363 +120.139751 36.790927 4 +120.139751 36.835927 457 +120.139751 36.885427 381 +120.139751 36.898927 233 +120.145251 35.908927 8 +120.145251 35.913427 413 +120.145251 35.926927 481 +120.145251 35.931427 2386 +120.145251 35.935927 149 +120.145251 35.940427 1013 +120.145251 35.944927 51 +120.145251 35.976427 439 +120.145251 35.980927 3089 +120.145251 35.985427 1939 +120.145251 35.989927 7 +120.145251 35.994427 241 +120.145251 35.998927 423 +120.145251 36.003427 33 +120.145251 36.007927 1915 +120.145251 36.012427 1483 +120.145251 36.016927 975 +120.145251 36.021427 437 +120.145251 36.048427 2 +120.145251 36.052927 7 +120.145251 36.057427 1255 +120.145251 36.061927 14 +120.145251 36.070927 5 +120.145251 36.075427 1971 +120.145251 36.079927 12 +120.145251 36.084427 4 +120.145251 36.219427 1691 +120.145251 36.232927 2409 +120.145251 36.255427 5 +120.145251 36.259927 112 +120.145251 36.264427 28 +120.145251 36.295927 1956 +120.145251 36.304927 1982 +120.145251 36.309427 6 +120.145251 36.322927 62 +120.145251 36.327427 2693 +120.145251 36.331927 727 +120.145251 36.345427 37 +120.145251 36.349927 332 +120.145251 36.354427 5751 +120.145251 36.358927 155 +120.145251 36.363427 1560 +120.145251 36.367927 211 +120.145251 36.376927 1448 +120.145251 36.381427 28 +120.145251 36.462427 1105 +120.145251 36.466927 2326 +120.145251 36.475927 5 +120.145251 36.480427 456 +120.145251 36.484927 2 +120.145251 36.502927 4 +120.145251 36.511927 3 +120.145251 36.534427 5 +120.145251 36.538927 58 +120.145251 36.552427 18 +120.145251 36.561427 1357 +120.145251 36.570427 1235 +120.145251 36.597427 608 +120.145251 36.655927 2170 +120.145251 36.709927 27 +120.145251 36.723427 57 +120.145251 36.745927 6 +120.145251 36.772927 230 +120.145251 36.777427 574 +120.145251 36.795427 5 +120.145251 36.799927 1306 +120.145251 36.804427 11 +120.145251 36.813427 15 +120.145251 36.993427 322 +120.150751 35.908927 46 +120.150751 35.913427 2 +120.150751 35.926927 8 +120.150751 35.931427 676 +120.150751 35.935927 1489 +120.150751 35.940427 8 +120.150751 35.944927 2 +120.150751 35.949427 7 +120.150751 35.953927 13 +120.150751 35.958427 204 +120.150751 35.962927 4200 +120.150751 35.967427 105 +120.150751 35.971927 200 +120.150751 35.976427 2541 +120.150751 35.980927 445 +120.150751 35.985427 324 +120.150751 35.989927 5 +120.150751 35.998927 1379 +120.150751 36.003427 1945 +120.150751 36.007927 338 +120.150751 36.012427 832 +120.150751 36.016927 358 +120.150751 36.021427 653 +120.150751 36.025927 2 +120.150751 36.030427 3 +120.150751 36.048427 1161 +120.150751 36.052927 499 +120.150751 36.070927 15 +120.150751 36.075427 3 +120.150751 36.219427 5 +120.150751 36.237427 1 +120.150751 36.246427 10 +120.150751 36.255427 32 +120.150751 36.259927 253 +120.150751 36.264427 20 +120.150751 36.336427 10 +120.150751 36.340927 1334 +120.150751 36.345427 1253 +120.150751 36.349927 987 +120.150751 36.354427 541 +120.150751 36.421927 5 +120.150751 36.430927 3318 +120.150751 36.435427 7 +120.150751 36.448927 38 +120.150751 36.453427 9 +120.150751 36.462427 3 +120.150751 36.475927 3 +120.150751 36.480427 16 +120.150751 36.489427 2071 +120.150751 36.493927 951 +120.150751 36.516427 31 +120.150751 36.520927 1559 +120.150751 36.538927 2039 +120.150751 36.574927 2591 +120.150751 36.579427 29 +120.150751 36.624427 369 +120.150751 36.633427 27 +120.150751 36.723427 27 +120.150751 36.786427 4 +120.150751 36.790927 1689 +120.150751 36.795427 5 +120.150751 36.799927 4 +120.150751 36.817927 606 +120.150751 36.826927 4 +120.150751 36.831427 547 +120.150751 36.876427 369 +120.150751 36.970927 361 +120.150751 36.975427 6 +120.150751 36.988927 548 +120.156251 35.746927 118 +120.156251 35.751427 12 +120.156251 35.913427 106 +120.156251 35.917927 200 +120.156251 35.922427 224 +120.156251 35.926927 1061 +120.156251 35.931427 1081 +120.156251 35.944927 212 +120.156251 35.949427 61 +120.156251 35.953927 4472 +120.156251 35.958427 239 +120.156251 35.962927 467 +120.156251 35.967427 208 +120.156251 35.971927 2924 +120.156251 35.976427 200 +120.156251 35.980927 371 +120.156251 35.985427 357 +120.156251 35.994427 19 +120.156251 36.003427 418 +120.156251 36.007927 51 +120.156251 36.012427 791 +120.156251 36.016927 1035 +120.156251 36.021427 2396 +120.156251 36.025927 2018 +120.156251 36.030427 2294 +120.156251 36.034927 2 +120.156251 36.057427 77 +120.156251 36.061927 33 +120.156251 36.066427 8 +120.156251 36.070927 798 +120.156251 36.214927 11 +120.156251 36.219427 89 +120.156251 36.228427 6 +120.156251 36.241927 2 +120.156251 36.246427 123 +120.156251 36.250927 116 +120.156251 36.255427 3909 +120.156251 36.309427 9 +120.156251 36.318427 4 +120.156251 36.340927 861 +120.156251 36.345427 133 +120.156251 36.349927 2911 +120.156251 36.354427 750 +120.156251 36.444427 1337 +120.156251 36.448927 777 +120.156251 36.453427 985 +120.156251 36.457927 12 +120.156251 36.475927 10 +120.156251 36.484927 999 +120.156251 36.489427 1182 +120.156251 36.493927 47 +120.156251 36.529927 47 +120.156251 36.547927 19 +120.156251 36.628927 504 +120.156251 36.633427 21 +120.156251 36.669427 542 +120.156251 36.732427 12 +120.156251 36.741427 12 +120.156251 36.745927 3 +120.156251 36.768427 424 +120.156251 36.808927 9 +120.156251 36.817927 4 +120.156251 36.835927 2 +120.156251 36.952927 623 +120.156251 37.002427 1334 +120.161751 35.764927 1 +120.161751 35.922427 2280 +120.161751 35.926927 420 +120.161751 35.935927 497 +120.161751 35.940427 2490 +120.161751 35.944927 4172 +120.161751 35.949427 2133 +120.161751 35.953927 333 +120.161751 35.958427 772 +120.161751 35.962927 1556 +120.161751 35.967427 1619 +120.161751 35.971927 1331 +120.161751 35.976427 1843 +120.161751 35.980927 6 +120.161751 35.985427 1208 +120.161751 35.998927 3 +120.161751 36.003427 1409 +120.161751 36.007927 3719 +120.161751 36.012427 142 +120.161751 36.016927 1660 +120.161751 36.021427 298 +120.161751 36.025927 537 +120.161751 36.030427 322 +120.161751 36.034927 1083 +120.161751 36.039427 389 +120.161751 36.043927 1773 +120.161751 36.048427 1603 +120.161751 36.052927 17 +120.161751 36.061927 92 +120.161751 36.066427 3312 +120.161751 36.210427 6 +120.161751 36.214927 8 +120.161751 36.219427 3948 +120.161751 36.228427 48 +120.161751 36.237427 1039 +120.161751 36.241927 23 +120.161751 36.246427 1335 +120.161751 36.304927 3 +120.161751 36.309427 2293 +120.161751 36.313927 649 +120.161751 36.318427 3217 +120.161751 36.322927 21 +120.161751 36.345427 414 +120.161751 36.349927 247 +120.161751 36.354427 61 +120.161751 36.367927 7 +120.161751 36.372427 945 +120.161751 36.394927 6 +120.161751 36.439927 3 +120.161751 36.484927 18 +120.161751 36.489427 3 +120.161751 36.507427 4 +120.161751 36.511927 11 +120.161751 36.529927 779 +120.161751 36.534427 648 +120.161751 36.547927 9 +120.161751 36.579427 34 +120.161751 36.583927 1668 +120.161751 36.601927 467 +120.161751 36.615427 7 +120.161751 36.646927 1171 +120.161751 36.651427 4 +120.161751 36.727927 6 +120.161751 36.768427 266 +120.161751 36.835927 673 +120.161751 36.844927 55 +120.161751 36.849427 768 +120.161751 36.867427 32 +120.161751 36.943927 263 +120.161751 36.975427 938 +120.161751 37.002427 10 +120.167251 35.769427 108 +120.167251 35.922427 219 +120.167251 35.931427 137 +120.167251 35.935927 44 +120.167251 35.944927 2624 +120.167251 35.949427 519 +120.167251 35.962927 3952 +120.167251 35.967427 3002 +120.167251 35.971927 1219 +120.167251 35.976427 1310 +120.167251 35.980927 1212 +120.167251 35.985427 4352 +120.167251 35.989927 133 +120.167251 35.994427 2 +120.167251 35.998927 9 +120.167251 36.003427 77 +120.167251 36.007927 746 +120.167251 36.012427 50 +120.167251 36.016927 51 +120.167251 36.021427 202 +120.167251 36.025927 422 +120.167251 36.030427 98 +120.167251 36.043927 53 +120.167251 36.048427 1 +120.167251 36.052927 2 +120.167251 36.057427 29 +120.167251 36.237427 1358 +120.167251 36.241927 10 +120.167251 36.246427 606 +120.167251 36.259927 3446 +120.167251 36.264427 2422 +120.167251 36.318427 3 +120.167251 36.336427 805 +120.167251 36.340927 14 +120.167251 36.349927 124 +120.167251 36.354427 2329 +120.167251 36.358927 35 +120.167251 36.394927 44 +120.167251 36.408427 1735 +120.167251 36.412927 5973 +120.167251 36.417427 2 +120.167251 36.435427 5 +120.167251 36.439927 40 +120.167251 36.448927 8 +120.167251 36.462427 1358 +120.167251 36.466927 465 +120.167251 36.475927 450 +120.167251 36.493927 1179 +120.167251 36.498427 5 +120.167251 36.502927 685 +120.167251 36.511927 2094 +120.167251 36.525427 17 +120.167251 36.552427 1652 +120.167251 36.556927 6 +120.167251 36.583927 972 +120.167251 36.588427 5 +120.167251 36.637927 470 +120.167251 36.642427 1 +120.167251 36.768427 1094 +120.167251 36.781927 628 +120.167251 36.808927 1380 +120.167251 36.817927 3 +120.167251 36.822427 927 +120.167251 36.844927 710 +120.167251 36.849427 11 +120.167251 36.858427 1010 +120.167251 36.867427 461 +120.167251 36.898927 924 +120.167251 36.966427 20 +120.167251 36.979927 944 +120.167251 36.984427 5 +120.167251 37.002427 270 +120.172751 35.778427 3 +120.172751 35.895427 561 +120.172751 35.899927 804 +120.172751 35.944927 127 +120.172751 35.949427 799 +120.172751 35.953927 1488 +120.172751 35.958427 1234 +120.172751 35.962927 3797 +120.172751 35.967427 1982 +120.172751 35.971927 1680 +120.172751 35.976427 1392 +120.172751 35.980927 781 +120.172751 35.985427 778 +120.172751 35.989927 390 +120.172751 35.994427 4 +120.172751 35.998927 238 +120.172751 36.007927 8 +120.172751 36.012427 1 +120.172751 36.016927 10 +120.172751 36.039427 1965 +120.172751 36.043927 268 +120.172751 36.048427 10 +120.172751 36.052927 4195 +120.172751 36.061927 11 +120.172751 36.246427 641 +120.172751 36.264427 14 +120.172751 36.313927 1 +120.172751 36.336427 8 +120.172751 36.340927 2743 +120.172751 36.367927 51 +120.172751 36.372427 1979 +120.172751 36.394927 40 +120.172751 36.399427 551 +120.172751 36.403927 1791 +120.172751 36.408427 253 +120.172751 36.412927 162 +120.172751 36.417427 27 +120.172751 36.435427 2083 +120.172751 36.448927 25 +120.172751 36.453427 1389 +120.172751 36.462427 241 +120.172751 36.466927 247 +120.172751 36.489427 25 +120.172751 36.561427 736 +120.172751 36.565927 1 +120.172751 36.624427 634 +120.172751 36.687427 10 +120.172751 36.718927 11 +120.172751 36.723427 1315 +120.172751 36.727927 9 +120.172751 36.781927 2 +120.172751 36.790927 4 +120.172751 36.858427 23 +120.172751 36.871927 213 +120.172751 36.966427 284 +120.172751 36.970927 179 +120.178251 35.890927 113 +120.178251 35.899927 6 +120.178251 35.908927 9 +120.178251 35.935927 4346 +120.178251 35.940427 512 +120.178251 35.944927 428 +120.178251 35.949427 2051 +120.178251 35.953927 5268 +120.178251 35.958427 6244 +120.178251 35.962927 4882 +120.178251 35.967427 1778 +120.178251 35.971927 2195 +120.178251 35.976427 490 +120.178251 35.980927 1779 +120.178251 35.985427 1 +120.178251 36.007927 35 +120.178251 36.025927 29 +120.178251 36.030427 28 +120.178251 36.039427 12 +120.178251 36.043927 2808 +120.178251 36.048427 147 +120.178251 36.052927 6 +120.178251 36.246427 1182 +120.178251 36.250927 12 +120.178251 36.331927 2 +120.178251 36.340927 22 +120.178251 36.376927 15 +120.178251 36.390427 1056 +120.178251 36.394927 301 +120.178251 36.399427 770 +120.178251 36.403927 1324 +120.178251 36.408427 2231 +120.178251 36.412927 142 +120.178251 36.417427 497 +120.178251 36.421927 13 +120.178251 36.426427 35 +120.178251 36.462427 24 +120.178251 36.480427 11 +120.178251 36.484927 19 +120.178251 36.520927 23 +120.178251 36.529927 8 +120.178251 36.552427 1533 +120.178251 36.556927 40 +120.178251 36.561427 9 +120.178251 36.565927 8 +120.178251 36.588427 34 +120.178251 36.592927 998 +120.178251 36.606427 422 +120.178251 36.673927 4 +120.178251 36.682927 3 +120.178251 36.687427 1422 +120.178251 36.691927 1283 +120.178251 36.718927 398 +120.178251 36.723427 11 +120.178251 36.727927 7 +120.178251 36.736927 562 +120.178251 36.741427 21 +120.178251 36.777427 332 +120.178251 36.790927 4 +120.178251 36.795427 2028 +120.178251 36.817927 252 +120.178251 36.835927 1670 +120.178251 36.867427 1134 +120.178251 36.907927 883 +120.178251 36.912427 917 +120.178251 36.975427 35 +120.178251 36.984427 632 +120.178251 36.988927 3 +120.178251 37.011427 241 +120.183751 35.899927 4 +120.183751 35.908927 988 +120.183751 35.940427 838 +120.183751 35.944927 1667 +120.183751 35.949427 2889 +120.183751 35.953927 1499 +120.183751 35.958427 2315 +120.183751 35.962927 2332 +120.183751 35.967427 2677 +120.183751 35.971927 1483 +120.183751 35.976427 27 +120.183751 36.021427 61 +120.183751 36.025927 5 +120.183751 36.030427 7 +120.183751 36.034927 9 +120.183751 36.039427 81 +120.183751 36.255427 1744 +120.183751 36.282427 2494 +120.183751 36.318427 331 +120.183751 36.336427 4 +120.183751 36.394927 679 +120.183751 36.399427 2495 +120.183751 36.403927 2207 +120.183751 36.408427 52 +120.183751 36.412927 1663 +120.183751 36.417427 156 +120.183751 36.421927 74 +120.183751 36.426427 248 +120.183751 36.430927 115 +120.183751 36.435427 833 +120.183751 36.439927 72 +120.183751 36.453427 42 +120.183751 36.462427 6 +120.183751 36.480427 1370 +120.183751 36.520927 7 +120.183751 36.534427 449 +120.183751 36.552427 6 +120.183751 36.574927 3 +120.183751 36.588427 1062 +120.183751 36.592927 919 +120.183751 36.597427 21 +120.183751 36.646927 653 +120.183751 36.664927 1040 +120.183751 36.673927 2014 +120.183751 36.678427 13 +120.183751 36.687427 873 +120.183751 36.691927 1022 +120.183751 36.736927 7 +120.183751 36.741427 2291 +120.183751 36.777427 19 +120.183751 36.790927 24 +120.183751 36.795427 9 +120.183751 36.903427 217 +120.183751 36.934927 1272 +120.183751 36.984427 684 +120.189251 35.917927 939 +120.189251 35.944927 50 +120.189251 35.949427 4574 +120.189251 35.953927 2761 +120.189251 35.958427 1845 +120.189251 35.962927 2185 +120.189251 35.967427 3038 +120.189251 35.971927 3738 +120.189251 36.025927 25 +120.189251 36.030427 68 +120.189251 36.034927 2 +120.189251 36.039427 8 +120.189251 36.255427 11 +120.189251 36.259927 20 +120.189251 36.282427 4 +120.189251 36.286927 4 +120.189251 36.336427 8 +120.189251 36.354427 810 +120.189251 36.376927 1181 +120.189251 36.385927 533 +120.189251 36.399427 7 +120.189251 36.403927 19 +120.189251 36.408427 428 +120.189251 36.417427 3 +120.189251 36.421927 2235 +120.189251 36.430927 28 +120.189251 36.435427 1420 +120.189251 36.439927 42 +120.189251 36.453427 1478 +120.189251 36.489427 574 +120.189251 36.520927 542 +120.189251 36.529927 476 +120.189251 36.538927 415 +120.189251 36.570427 915 +120.189251 36.574927 53 +120.189251 36.597427 3 +120.189251 36.615427 664 +120.189251 36.628927 14 +120.189251 36.633427 19 +120.189251 36.637927 1528 +120.189251 36.664927 927 +120.189251 36.673927 5 +120.189251 36.678427 1 +120.189251 36.687427 10 +120.189251 36.691927 1253 +120.189251 36.696427 4 +120.189251 36.736927 6 +120.189251 36.777427 518 +120.189251 36.799927 4 +120.189251 36.808927 156 +120.189251 36.831427 4 +120.189251 36.835927 1578 +120.189251 36.858427 707 +120.189251 36.885427 321 +120.189251 37.002427 4 +120.189251 37.015927 756 +120.194751 35.913427 575 +120.194751 35.944927 1 +120.194751 35.949427 1293 +120.194751 35.953927 836 +120.194751 35.958427 4573 +120.194751 35.962927 48 +120.194751 35.980927 9 +120.194751 36.021427 28 +120.194751 36.034927 22 +120.194751 36.039427 11 +120.194751 36.043927 6 +120.194751 36.057427 193 +120.194751 36.255427 12 +120.194751 36.259927 3647 +120.194751 36.273427 870 +120.194751 36.282427 2 +120.194751 36.295927 3985 +120.194751 36.300427 89 +120.194751 36.327427 449 +120.194751 36.336427 1117 +120.194751 36.403927 336 +120.194751 36.408427 1 +120.194751 36.412927 20 +120.194751 36.417427 1476 +120.194751 36.439927 775 +120.194751 36.453427 5 +120.194751 36.462427 403 +120.194751 36.480427 2 +120.194751 36.489427 791 +120.194751 36.493927 1046 +120.194751 36.498427 2440 +120.194751 36.507427 980 +120.194751 36.511927 4 +120.194751 36.579427 745 +120.194751 36.583927 19 +120.194751 36.597427 790 +120.194751 36.601927 679 +120.194751 36.606427 230 +120.194751 36.610927 306 +120.194751 36.615427 7 +120.194751 36.628927 25 +120.194751 36.633427 1365 +120.194751 36.637927 429 +120.194751 36.646927 22 +120.194751 36.687427 1078 +120.194751 36.696427 15 +120.194751 36.727927 672 +120.194751 36.876427 929 +120.194751 36.894427 133 +120.194751 36.934927 1319 +120.194751 36.975427 1393 +120.194751 36.993427 70 +120.194751 37.015927 559 +120.194751 37.020427 25 +120.200251 35.944927 5 +120.200251 35.949427 423 +120.200251 35.953927 1368 +120.200251 35.958427 1418 +120.200251 35.980927 47 +120.200251 36.025927 7 +120.200251 36.030427 133 +120.200251 36.034927 43 +120.200251 36.039427 10 +120.200251 36.282427 87 +120.200251 36.385927 35 +120.200251 36.390427 722 +120.200251 36.399427 654 +120.200251 36.412927 730 +120.200251 36.417427 42 +120.200251 36.444427 95 +120.200251 36.475927 1332 +120.200251 36.480427 13 +120.200251 36.498427 10 +120.200251 36.502927 47 +120.200251 36.507427 6 +120.200251 36.516427 1095 +120.200251 36.529927 909 +120.200251 36.534427 752 +120.200251 36.547927 8 +120.200251 36.574927 24 +120.200251 36.579427 2249 +120.200251 36.583927 923 +120.200251 36.601927 516 +120.200251 36.606427 464 +120.200251 36.615427 979 +120.200251 36.633427 24 +120.200251 36.637927 2642 +120.200251 36.655927 28 +120.200251 36.660427 1340 +120.200251 36.691927 787 +120.200251 36.705427 155 +120.200251 36.709927 20 +120.200251 36.714427 8 +120.200251 36.732427 6 +120.200251 36.750427 2168 +120.200251 36.763927 3 +120.200251 36.790927 646 +120.200251 36.795427 276 +120.200251 36.826927 35 +120.200251 36.831427 1827 +120.200251 36.871927 630 +120.200251 36.876427 772 +120.200251 36.880927 389 +120.200251 36.885427 629 +120.200251 36.898927 681 +120.200251 36.934927 11 +120.200251 36.943927 527 +120.200251 36.952927 600 +120.200251 36.966427 10 +120.200251 36.984427 7 +120.200251 36.988927 309 +120.200251 36.993427 8 +120.205751 35.926927 1415 +120.205751 35.931427 29 +120.205751 35.953927 659 +120.205751 35.958427 2966 +120.205751 36.025927 501 +120.205751 36.030427 3669 +120.205751 36.034927 1414 +120.205751 36.039427 254 +120.205751 36.043927 101 +120.205751 36.246427 722 +120.205751 36.250927 4 +120.205751 36.264427 8 +120.205751 36.295927 839 +120.205751 36.399427 4 +120.205751 36.417427 38 +120.205751 36.444427 23 +120.205751 36.498427 491 +120.205751 36.502927 87 +120.205751 36.534427 4 +120.205751 36.538927 1317 +120.205751 36.543427 4 +120.205751 36.547927 5 +120.205751 36.579427 2725 +120.205751 36.583927 4 +120.205751 36.588427 721 +120.205751 36.633427 1224 +120.205751 36.637927 16 +120.205751 36.655927 21 +120.205751 36.660427 26 +120.205751 36.664927 28 +120.205751 36.669427 1754 +120.205751 36.673927 2 +120.205751 36.687427 609 +120.205751 36.705427 1795 +120.205751 36.732427 398 +120.205751 36.750427 53 +120.205751 36.763927 732 +120.205751 36.822427 392 +120.205751 36.826927 427 +120.205751 36.831427 14 +120.205751 36.840427 4 +120.205751 36.844927 514 +120.205751 36.849427 4 +120.205751 36.862927 950 +120.205751 36.871927 5 +120.205751 36.934927 28 +120.205751 36.952927 148 +120.205751 36.966427 1183 +120.205751 36.970927 361 +120.205751 36.979927 308 +120.205751 36.988927 1149 +120.205751 36.993427 1565 +120.205751 36.997927 158 +120.205751 37.011427 300 +120.211251 35.926927 5 +120.211251 35.931427 7 +120.211251 35.935927 1994 +120.211251 35.949427 121 +120.211251 35.953927 668 +120.211251 35.958427 1003 +120.211251 35.962927 183 +120.211251 35.967427 6651 +120.211251 35.971927 31 +120.211251 35.980927 68 +120.211251 35.985427 2 +120.211251 36.030427 1235 +120.211251 36.034927 2919 +120.211251 36.039427 588 +120.211251 36.043927 1102 +120.211251 36.246427 31 +120.211251 36.250927 408 +120.211251 36.264427 846 +120.211251 36.268927 59 +120.211251 36.273427 908 +120.211251 36.277927 9 +120.211251 36.291427 4 +120.211251 36.336427 195 +120.211251 36.399427 12 +120.211251 36.462427 1553 +120.211251 36.511927 658 +120.211251 36.520927 196 +120.211251 36.534427 598 +120.211251 36.538927 1257 +120.211251 36.543427 221 +120.211251 36.547927 1294 +120.211251 36.579427 2329 +120.211251 36.583927 1577 +120.211251 36.633427 5 +120.211251 36.637927 4 +120.211251 36.669427 8 +120.211251 36.673927 30 +120.211251 36.678427 307 +120.211251 36.682927 8 +120.211251 36.714427 2029 +120.211251 36.718927 37 +120.211251 36.732427 21 +120.211251 36.759427 5 +120.211251 36.763927 979 +120.211251 36.822427 64 +120.211251 36.826927 8 +120.211251 36.831427 3 +120.211251 36.835927 3374 +120.211251 36.840427 486 +120.211251 36.844927 29 +120.211251 36.849427 5 +120.211251 36.853927 9 +120.211251 36.921427 414 +120.211251 36.952927 180 +120.211251 36.979927 11 +120.211251 37.011427 4 +120.216751 35.935927 8 +120.216751 35.940427 55 +120.216751 35.944927 48 +120.216751 35.949427 980 +120.216751 35.953927 3134 +120.216751 35.958427 907 +120.216751 35.962927 3865 +120.216751 35.967427 463 +120.216751 35.985427 70 +120.216751 35.989927 32 +120.216751 36.030427 251 +120.216751 36.034927 1506 +120.216751 36.039427 2929 +120.216751 36.043927 1807 +120.216751 36.048427 471 +120.216751 36.057427 3 +120.216751 36.250927 5 +120.216751 36.255427 4 +120.216751 36.291427 1131 +120.216751 36.300427 744 +120.216751 36.318427 2352 +120.216751 36.327427 5 +120.216751 36.331927 5 +120.216751 36.336427 37 +120.216751 36.399427 712 +120.216751 36.408427 34 +120.216751 36.412927 1119 +120.216751 36.426427 3 +120.216751 36.435427 403 +120.216751 36.457927 21 +120.216751 36.462427 10 +120.216751 36.466927 3 +120.216751 36.480427 4382 +120.216751 36.529927 9 +120.216751 36.547927 1676 +120.216751 36.565927 4 +120.216751 36.570427 715 +120.216751 36.583927 777 +120.216751 36.673927 1040 +120.216751 36.678427 2431 +120.216751 36.687427 293 +120.216751 36.691927 392 +120.216751 36.696427 14 +120.216751 36.700927 803 +120.216751 36.714427 26 +120.216751 36.723427 14 +120.216751 36.732427 82 +120.216751 36.736927 6 +120.216751 36.822427 1420 +120.216751 36.835927 32 +120.216751 36.840427 13 +120.216751 36.849427 6 +120.216751 36.853927 552 +120.216751 36.858427 7 +120.216751 36.862927 5 +120.216751 36.925927 830 +120.216751 36.930427 3 +120.216751 36.970927 828 +120.216751 37.024927 1427 +120.216751 37.051927 316 +120.216751 37.074427 8 +120.222251 35.944927 121 +120.222251 35.949427 2144 +120.222251 35.953927 1701 +120.222251 35.958427 5293 +120.222251 35.962927 1227 +120.222251 35.967427 295 +120.222251 36.039427 619 +120.222251 36.043927 4336 +120.222251 36.048427 570 +120.222251 36.052927 12 +120.222251 36.250927 1238 +120.222251 36.255427 1856 +120.222251 36.282427 1 +120.222251 36.300427 16 +120.222251 36.304927 5 +120.222251 36.327427 1476 +120.222251 36.331927 28 +120.222251 36.336427 27 +120.222251 36.385927 275 +120.222251 36.417427 8 +120.222251 36.421927 4 +120.222251 36.426427 1000 +120.222251 36.430927 640 +120.222251 36.439927 14 +120.222251 36.444427 45 +120.222251 36.453427 713 +120.222251 36.457927 906 +120.222251 36.466927 3 +120.222251 36.480427 1154 +120.222251 36.484927 394 +120.222251 36.489427 4 +120.222251 36.565927 978 +120.222251 36.570427 6 +120.222251 36.601927 3313 +120.222251 36.646927 1836 +120.222251 36.651427 265 +120.222251 36.687427 953 +120.222251 36.718927 6 +120.222251 36.723427 40 +120.222251 36.727927 224 +120.222251 36.732427 4419 +120.222251 36.741427 10 +120.222251 36.754927 1012 +120.222251 36.759427 381 +120.222251 36.768427 1349 +120.222251 36.772927 4 +120.222251 36.822427 4 +120.222251 36.840427 11 +120.222251 36.853927 589 +120.222251 36.862927 936 +120.222251 36.894427 371 +120.222251 36.898927 444 +120.222251 36.903427 4 +120.222251 36.907927 934 +120.222251 36.993427 282 +120.222251 36.997927 62 +120.222251 37.002427 4 +120.222251 37.024927 4 +120.222251 37.074427 931 +120.227751 35.949427 137 +120.227751 35.953927 788 +120.227751 35.958427 750 +120.227751 35.962927 1275 +120.227751 35.967427 354 +120.227751 35.971927 424 +120.227751 36.043927 1 +120.227751 36.048427 788 +120.227751 36.052927 31 +120.227751 36.201427 7 +120.227751 36.250927 4 +120.227751 36.255427 2192 +120.227751 36.259927 1 +120.227751 36.268927 33 +120.227751 36.286927 13 +120.227751 36.291427 53 +120.227751 36.300427 5 +120.227751 36.304927 550 +120.227751 36.322927 391 +120.227751 36.336427 18 +120.227751 36.340927 1854 +120.227751 36.394927 8 +120.227751 36.399427 1051 +120.227751 36.430927 16 +120.227751 36.444427 2 +120.227751 36.448927 1165 +120.227751 36.453427 25 +120.227751 36.462427 387 +120.227751 36.466927 4 +120.227751 36.480427 100 +120.227751 36.484927 1375 +120.227751 36.511927 18 +120.227751 36.619927 856 +120.227751 36.628927 52 +120.227751 36.633427 465 +120.227751 36.646927 24 +120.227751 36.723427 13 +120.227751 36.727927 1320 +120.227751 36.732427 1288 +120.227751 36.736927 56 +120.227751 36.750427 628 +120.227751 36.754927 253 +120.227751 36.759427 196 +120.227751 36.822427 482 +120.227751 36.876427 709 +120.227751 36.889927 530 +120.227751 36.898927 4 +120.227751 36.916927 220 +120.227751 36.952927 366 +120.227751 36.997927 1407 +120.227751 37.083427 840 +120.233251 35.949427 1354 +120.233251 35.953927 519 +120.233251 35.958427 709 +120.233251 35.962927 1269 +120.233251 35.967427 1149 +120.233251 35.971927 699 +120.233251 35.976427 39 +120.233251 35.980927 519 +120.233251 35.994427 8 +120.233251 36.048427 210 +120.233251 36.052927 182 +120.233251 36.196927 20 +120.233251 36.201427 4248 +120.233251 36.205927 10 +120.233251 36.268927 59 +120.233251 36.273427 27763 +120.233251 36.277927 28 +120.233251 36.282427 208 +120.233251 36.286927 28 +120.233251 36.291427 2077 +120.233251 36.295927 5 +120.233251 36.327427 1299 +120.233251 36.331927 8 +120.233251 36.336427 32 +120.233251 36.340927 15 +120.233251 36.394927 365 +120.233251 36.399427 45 +120.233251 36.412927 1191 +120.233251 36.462427 3 +120.233251 36.466927 760 +120.233251 36.471427 840 +120.233251 36.475927 6 +120.233251 36.480427 88 +120.233251 36.484927 11 +120.233251 36.619927 700 +120.233251 36.633427 498 +120.233251 36.646927 572 +120.233251 36.651427 793 +120.233251 36.655927 438 +120.233251 36.660427 46 +120.233251 36.669427 636 +120.233251 36.678427 888 +120.233251 36.682927 398 +120.233251 36.696427 19 +120.233251 36.700927 995 +120.233251 36.723427 20 +120.233251 36.727927 551 +120.233251 36.732427 565 +120.233251 36.736927 11 +120.233251 36.750427 27 +120.233251 36.813427 1059 +120.233251 36.822427 14 +120.233251 36.826927 1382 +120.233251 36.840427 696 +120.233251 36.858427 513 +120.233251 36.885427 4 +120.233251 36.889927 478 +120.233251 36.894427 527 +120.233251 36.898927 1294 +120.233251 36.903427 878 +120.233251 36.907927 1364 +120.233251 36.912427 9 +120.233251 36.979927 1026 +120.233251 36.993427 14 +120.233251 37.083427 321 +120.233251 37.092427 27 +120.233251 37.096927 5 +120.233251 37.105927 232 +120.238751 35.962927 842 +120.238751 35.967427 1522 +120.238751 35.971927 445 +120.238751 35.976427 9 +120.238751 35.980927 2 +120.238751 35.989927 8 +120.238751 36.268927 2112 +120.238751 36.273427 219 +120.238751 36.277927 5871 +120.238751 36.282427 3 +120.238751 36.336427 1 +120.238751 36.381427 675 +120.238751 36.385927 771 +120.238751 36.403927 1355 +120.238751 36.408427 8 +120.238751 36.412927 12 +120.238751 36.462427 53 +120.238751 36.466927 263 +120.238751 36.529927 681 +120.238751 36.552427 582 +120.238751 36.615427 884 +120.238751 36.637927 14 +120.238751 36.642427 8 +120.238751 36.646927 4 +120.238751 36.651427 19 +120.238751 36.655927 5 +120.238751 36.660427 1746 +120.238751 36.678427 2 +120.238751 36.696427 8 +120.238751 36.700927 32 +120.238751 36.709927 1812 +120.238751 36.723427 53 +120.238751 36.727927 9 +120.238751 36.732427 20 +120.238751 36.736927 10 +120.238751 36.741427 8 +120.238751 36.745927 743 +120.238751 36.759427 594 +120.238751 36.804427 1277 +120.238751 36.822427 6 +120.238751 36.826927 9 +120.238751 36.831427 588 +120.238751 36.849427 403 +120.238751 36.862927 371 +120.238751 36.871927 628 +120.238751 36.876427 293 +120.238751 36.880927 3 +120.238751 36.894427 4 +120.238751 36.948427 390 +120.238751 36.952927 129 +120.238751 36.979927 7 +120.238751 36.997927 817 +120.238751 37.114927 424 +120.244251 35.958427 2549 +120.244251 35.962927 2284 +120.244251 35.967427 1679 +120.244251 36.205927 1177 +120.244251 36.214927 7 +120.244251 36.219427 1634 +120.244251 36.223927 18 +120.244251 36.228427 2069 +120.244251 36.264427 2130 +120.244251 36.268927 17 +120.244251 36.273427 99 +120.244251 36.277927 1495 +120.244251 36.345427 101 +120.244251 36.349927 39 +120.244251 36.372427 1312 +120.244251 36.381427 955 +120.244251 36.403927 3 +120.244251 36.408427 8 +120.244251 36.453427 5 +120.244251 36.525427 604 +120.244251 36.570427 1260 +120.244251 36.637927 938 +120.244251 36.642427 610 +120.244251 36.651427 19 +120.244251 36.655927 4 +120.244251 36.682927 612 +120.244251 36.727927 6 +120.244251 36.741427 16 +120.244251 36.745927 13 +120.244251 36.750427 439 +120.244251 36.768427 33 +120.244251 36.804427 21 +120.244251 36.826927 594 +120.244251 36.840427 5 +120.244251 36.844927 685 +120.244251 36.849427 8 +120.244251 36.871927 948 +120.244251 36.876427 84 +120.244251 36.889927 1107 +120.244251 36.975427 4 +120.244251 36.979927 284 +120.244251 36.984427 122 +120.244251 37.087927 746 +120.249751 35.962927 2021 +120.249751 35.971927 27 +120.249751 36.205927 6 +120.249751 36.214927 9 +120.249751 36.219427 39 +120.249751 36.223927 3 +120.249751 36.228427 6 +120.249751 36.232927 120 +120.249751 36.237427 18 +120.249751 36.246427 54 +120.249751 36.264427 746 +120.249751 36.273427 12 +120.249751 36.277927 2 +120.249751 36.282427 383 +120.249751 36.286927 4 +120.249751 36.300427 40 +120.249751 36.336427 137 +120.249751 36.340927 7 +120.249751 36.345427 82 +120.249751 36.358927 2 +120.249751 36.408427 725 +120.249751 36.412927 272 +120.249751 36.417427 749 +120.249751 36.430927 638 +120.249751 36.435427 3109 +120.249751 36.448927 825 +120.249751 36.489427 310 +120.249751 36.516427 1384 +120.249751 36.592927 22 +120.249751 36.601927 551 +120.249751 36.615427 5 +120.249751 36.619927 6 +120.249751 36.642427 60 +120.249751 36.651427 561 +120.249751 36.655927 430 +120.249751 36.678427 8 +120.249751 36.682927 2025 +120.249751 36.687427 3 +120.249751 36.723427 10 +120.249751 36.727927 4 +120.249751 36.732427 1736 +120.249751 36.763927 2393 +120.249751 36.768427 20 +120.249751 36.786427 21 +120.249751 36.790927 1342 +120.249751 36.817927 11 +120.249751 36.822427 4 +120.249751 36.831427 585 +120.249751 36.871927 913 +120.249751 36.876427 182 +120.249751 36.880927 388 +120.249751 36.889927 14 +120.249751 36.921427 154 +120.249751 36.966427 206 +120.249751 36.993427 240 +120.249751 37.051927 1388 +120.249751 37.078927 409 +120.255251 35.967427 18 +120.255251 35.971927 195 +120.255251 36.012427 1164 +120.255251 36.205927 455 +120.255251 36.232927 3036 +120.255251 36.250927 97 +120.255251 36.282427 1282 +120.255251 36.300427 7 +120.255251 36.313927 59 +120.255251 36.318427 117 +120.255251 36.322927 17 +120.255251 36.340927 561 +120.255251 36.367927 5 +120.255251 36.430927 6 +120.255251 36.435427 11 +120.255251 36.448927 221 +120.255251 36.471427 8 +120.255251 36.475927 8 +120.255251 36.480427 5 +120.255251 36.516427 986 +120.255251 36.547927 1242 +120.255251 36.615427 1212 +120.255251 36.637927 1027 +120.255251 36.642427 332 +120.255251 36.646927 981 +120.255251 36.651427 13 +120.255251 36.655927 6 +120.255251 36.673927 859 +120.255251 36.691927 9 +120.255251 36.723427 4 +120.255251 36.732427 7 +120.255251 36.781927 4 +120.255251 36.804427 897 +120.255251 36.817927 1848 +120.255251 36.903427 334 +120.255251 36.993427 428 +120.260751 35.971927 87 +120.260751 35.976427 1611 +120.260751 36.219427 2387 +120.260751 36.223927 749 +120.260751 36.241927 7 +120.260751 36.250927 4 +120.260751 36.255427 16 +120.260751 36.282427 95 +120.260751 36.286927 5 +120.260751 36.300427 1914 +120.260751 36.313927 1976 +120.260751 36.318427 2118 +120.260751 36.322927 225 +120.260751 36.331927 56 +120.260751 36.336427 73 +120.260751 36.385927 66 +120.260751 36.390427 57 +120.260751 36.394927 5 +120.260751 36.448927 240 +120.260751 36.471427 2465 +120.260751 36.475927 1337 +120.260751 36.480427 5 +120.260751 36.525427 1276 +120.260751 36.606427 4 +120.260751 36.615427 361 +120.260751 36.642427 248 +120.260751 36.646927 15 +120.260751 36.651427 298 +120.260751 36.655927 492 +120.260751 36.673927 1677 +120.260751 36.687427 8 +120.260751 36.691927 1573 +120.260751 36.696427 2714 +120.260751 36.700927 22 +120.260751 36.732427 1064 +120.260751 36.736927 3 +120.260751 36.745927 2769 +120.260751 36.750427 89 +120.260751 36.804427 4 +120.260751 36.876427 18 +120.260751 36.889927 687 +120.260751 36.934927 425 +120.260751 36.939427 965 +120.260751 36.943927 7 +120.260751 36.948427 1023 +120.260751 36.975427 306 +120.260751 36.993427 13 +120.260751 37.096927 13 +120.260751 37.105927 264 +120.266251 35.971927 745 +120.266251 36.205927 1982 +120.266251 36.210427 715 +120.266251 36.219427 1705 +120.266251 36.223927 16 +120.266251 36.232927 6 +120.266251 36.237427 3928 +120.266251 36.241927 1951 +120.266251 36.268927 130 +120.266251 36.277927 19 +120.266251 36.327427 8 +120.266251 36.331927 191 +120.266251 36.336427 2757 +120.266251 36.340927 1351 +120.266251 36.367927 791 +120.266251 36.372427 597 +120.266251 36.385927 28 +120.266251 36.390427 3591 +120.266251 36.394927 42 +120.266251 36.448927 440 +120.266251 36.475927 19 +120.266251 36.529927 4 +120.266251 36.588427 409 +120.266251 36.601927 6 +120.266251 36.610927 1005 +120.266251 36.642427 668 +120.266251 36.646927 388 +120.266251 36.696427 71 +120.266251 36.700927 23 +120.266251 36.709927 41 +120.266251 36.727927 5 +120.266251 36.732427 11 +120.266251 36.745927 37 +120.266251 36.750427 15 +120.266251 36.826927 12 +120.266251 36.831427 1061 +120.266251 36.844927 490 +120.266251 36.858427 443 +120.266251 36.862927 524 +120.266251 36.867427 10 +120.266251 36.903427 3 +120.266251 36.907927 169 +120.266251 36.912427 413 +120.266251 36.916927 610 +120.266251 36.934927 22 +120.266251 37.015927 3 +120.266251 37.020427 695 +120.271751 36.187927 4265 +120.271751 36.192427 15 +120.271751 36.214927 3525 +120.271751 36.219427 49 +120.271751 36.237427 45 +120.271751 36.241927 11 +120.271751 36.255427 35 +120.271751 36.264427 250 +120.271751 36.273427 110 +120.271751 36.282427 6 +120.271751 36.309427 2 +120.271751 36.313927 2 +120.271751 36.331927 2 +120.271751 36.336427 200 +120.271751 36.340927 38 +120.271751 36.345427 262 +120.271751 36.363427 137 +120.271751 36.367927 361 +120.271751 36.372427 1618 +120.271751 36.385927 15 +120.271751 36.390427 30 +120.271751 36.403927 4 +120.271751 36.448927 1027 +120.271751 36.543427 307 +120.271751 36.588427 416 +120.271751 36.606427 1952 +120.271751 36.628927 2592 +120.271751 36.633427 5 +120.271751 36.651427 266 +120.271751 36.655927 273 +120.271751 36.660427 965 +120.271751 36.754927 280 +120.271751 36.759427 240 +120.271751 36.763927 5 +120.271751 36.768427 5 +120.271751 36.772927 1431 +120.271751 36.781927 43 +120.271751 36.790927 28 +120.271751 36.804427 925 +120.271751 36.808927 770 +120.271751 36.844927 1592 +120.271751 36.862927 4 +120.271751 36.867427 8 +120.271751 36.925927 454 +120.271751 36.930427 4 +120.271751 37.038427 211 +120.271751 37.083427 209 +120.277251 35.980927 25 +120.277251 36.187927 78 +120.277251 36.214927 16 +120.277251 36.219427 27 +120.277251 36.250927 15 +120.277251 36.268927 40 +120.277251 36.273427 11 +120.277251 36.282427 3339 +120.277251 36.286927 2606 +120.277251 36.318427 2 +120.277251 36.331927 3 +120.277251 36.336427 1142 +120.277251 36.340927 946 +120.277251 36.363427 1466 +120.277251 36.367927 2446 +120.277251 36.372427 33 +120.277251 36.403927 2289 +120.277251 36.408427 3 +120.277251 36.444427 262 +120.277251 36.448927 150 +120.277251 36.457927 798 +120.277251 36.511927 537 +120.277251 36.516427 1968 +120.277251 36.556927 618 +120.277251 36.628927 11 +120.277251 36.651427 731 +120.277251 36.655927 824 +120.277251 36.660427 711 +120.277251 36.687427 11 +120.277251 36.700927 5 +120.277251 36.705427 1360 +120.277251 36.714427 569 +120.277251 36.727927 609 +120.277251 36.732427 374 +120.277251 36.750427 57 +120.277251 36.754927 302 +120.277251 36.777427 3 +120.277251 36.781927 9 +120.277251 36.790927 12 +120.277251 36.804427 949 +120.277251 36.808927 551 +120.277251 36.813427 5 +120.277251 36.831427 4 +120.277251 36.840427 7 +120.277251 36.862927 25 +120.277251 36.880927 1018 +120.277251 36.885427 4 +120.277251 36.952927 595 +120.277251 36.957427 302 +120.277251 36.970927 23 +120.277251 36.993427 281 +120.277251 37.024927 834 +120.277251 37.105927 1571 +120.282751 35.971927 6 +120.282751 35.976427 5 +120.282751 35.989927 48 +120.282751 35.998927 3 +120.282751 36.003427 74 +120.282751 36.183427 412 +120.282751 36.232927 3 +120.282751 36.282427 5 +120.282751 36.318427 12 +120.282751 36.331927 943 +120.282751 36.363427 24 +120.282751 36.367927 891 +120.282751 36.372427 8 +120.282751 36.381427 2 +120.282751 36.385927 1187 +120.282751 36.511927 73 +120.282751 36.516427 1581 +120.282751 36.529927 891 +120.282751 36.547927 598 +120.282751 36.552427 653 +120.282751 36.588427 1040 +120.282751 36.624427 138 +120.282751 36.633427 473 +120.282751 36.642427 58 +120.282751 36.646927 1304 +120.282751 36.664927 181 +120.282751 36.669427 1115 +120.282751 36.687427 1276 +120.282751 36.736927 14 +120.282751 36.750427 1521 +120.282751 36.781927 240 +120.282751 36.804427 674 +120.282751 36.808927 688 +120.282751 36.817927 805 +120.282751 36.822427 1086 +120.282751 36.835927 74 +120.282751 36.840427 6 +120.282751 36.880927 5 +120.282751 36.898927 971 +120.282751 36.939427 440 +120.282751 36.957427 687 +120.282751 37.042927 18 +120.282751 37.051927 639 +120.282751 37.056427 27 +120.282751 37.119427 178 +120.288251 35.976427 2859 +120.288251 35.980927 38 +120.288251 35.989927 845 +120.288251 35.994427 1487 +120.288251 36.003427 843 +120.288251 36.048427 39 +120.288251 36.052927 407 +120.288251 36.187927 5 +120.288251 36.192427 17 +120.288251 36.228427 4 +120.288251 36.232927 2343 +120.288251 36.250927 404 +120.288251 36.273427 1 +120.288251 36.327427 258 +120.288251 36.331927 151 +120.288251 36.349927 27 +120.288251 36.354427 20 +120.288251 36.363427 15 +120.288251 36.367927 1258 +120.288251 36.376927 4 +120.288251 36.390427 2 +120.288251 36.394927 136 +120.288251 36.399427 29 +120.288251 36.421927 2455 +120.288251 36.448927 6 +120.288251 36.480427 18 +120.288251 36.516427 9 +120.288251 36.588427 720 +120.288251 36.592927 129 +120.288251 36.597427 27 +120.288251 36.601927 1512 +120.288251 36.628927 3 +120.288251 36.633427 1542 +120.288251 36.642427 15 +120.288251 36.646927 10 +120.288251 36.678427 7 +120.288251 36.723427 752 +120.288251 36.741427 416 +120.288251 36.763927 812 +120.288251 36.808927 21 +120.288251 36.831427 789 +120.288251 36.840427 4837 +120.288251 36.844927 12 +120.288251 36.849427 769 +120.288251 36.853927 1543 +120.288251 36.907927 835 +120.288251 36.921427 805 +120.288251 36.943927 487 +120.288251 36.957427 374 +120.288251 36.966427 5 +120.288251 36.979927 674 +120.288251 37.038427 4 +120.288251 37.047427 4 +120.288251 37.051927 6 +120.293751 36.003427 10 +120.293751 36.052927 6370 +120.293751 36.057427 7178 +120.293751 36.061927 1383 +120.293751 36.187927 127 +120.293751 36.192427 4073 +120.293751 36.232927 7 +120.293751 36.237427 1361 +120.293751 36.246427 57 +120.293751 36.327427 1217 +120.293751 36.331927 64 +120.293751 36.345427 26 +120.293751 36.349927 2094 +120.293751 36.354427 129 +120.293751 36.394927 65 +120.293751 36.399427 2011 +120.293751 36.417427 4 +120.293751 36.421927 15 +120.293751 36.453427 988 +120.293751 36.475927 8 +120.293751 36.480427 2787 +120.293751 36.529927 239 +120.293751 36.538927 27 +120.293751 36.592927 2134 +120.293751 36.597427 368 +120.293751 36.601927 13 +120.293751 36.628927 18 +120.293751 36.633427 24 +120.293751 36.642427 4 +120.293751 36.646927 1058 +120.293751 36.655927 6 +120.293751 36.678427 11 +120.293751 36.682927 991 +120.293751 36.696427 5 +120.293751 36.705427 497 +120.293751 36.709927 853 +120.293751 36.754927 2 +120.293751 36.759427 496 +120.293751 36.763927 186 +120.293751 36.804427 702 +120.293751 36.808927 201 +120.293751 36.871927 419 +120.293751 36.880927 100 +120.293751 36.889927 902 +120.293751 36.903427 619 +120.293751 36.934927 955 +120.293751 36.952927 947 +120.293751 37.015927 13 +120.293751 37.038427 6 +120.293751 37.042927 944 +120.293751 37.047427 165 +120.293751 37.051927 5 +120.293751 37.069927 4 +120.299251 36.048427 24 +120.299251 36.052927 6281 +120.299251 36.057427 18349 +120.299251 36.061927 10182 +120.299251 36.066427 173 +120.299251 36.192427 5 +120.299251 36.277927 416 +120.299251 36.282427 1591 +120.299251 36.291427 190 +120.299251 36.295927 11 +120.299251 36.322927 121 +120.299251 36.340927 8 +120.299251 36.345427 1935 +120.299251 36.349927 3 +120.299251 36.354427 5 +120.299251 36.372427 6 +120.299251 36.394927 1 +120.299251 36.430927 61 +120.299251 36.435427 2 +120.299251 36.444427 7 +120.299251 36.466927 790 +120.299251 36.538927 859 +120.299251 36.574927 1905 +120.299251 36.601927 25 +120.299251 36.633427 1902 +120.299251 36.642427 644 +120.299251 36.646927 8 +120.299251 36.651427 1812 +120.299251 36.655927 14 +120.299251 36.678427 2108 +120.299251 36.682927 5 +120.299251 36.691927 4 +120.299251 36.696427 1013 +120.299251 36.745927 601 +120.299251 36.777427 586 +120.299251 36.831427 1072 +120.299251 36.876427 2467 +120.299251 36.880927 15 +120.299251 36.921427 2 +120.299251 36.934927 604 +120.299251 36.966427 5 +120.299251 36.970927 469 +120.299251 37.015927 1075 +120.299251 37.020427 5 +120.299251 37.024927 169 +120.299251 37.069927 423 +120.299251 37.114927 444 +120.304751 36.003427 471 +120.304751 36.048427 8 +120.304751 36.052927 6523 +120.304751 36.057427 13543 +120.304751 36.061927 13928 +120.304751 36.066427 7493 +120.304751 36.070927 102 +120.304751 36.286927 118 +120.304751 36.327427 1578 +120.304751 36.349927 4 +120.304751 36.367927 2261 +120.304751 36.394927 535 +120.304751 36.399427 397 +120.304751 36.439927 28 +120.304751 36.444427 963 +120.304751 36.516427 915 +120.304751 36.561427 4 +120.304751 36.570427 3 +120.304751 36.606427 492 +120.304751 36.660427 14 +120.304751 36.664927 808 +120.304751 36.669427 7 +120.304751 36.678427 5 +120.304751 36.682927 665 +120.304751 36.709927 1356 +120.304751 36.732427 8 +120.304751 36.786427 1534 +120.304751 36.790927 12 +120.304751 36.876427 19 +120.304751 36.889927 846 +120.304751 36.894427 4 +120.304751 36.898927 567 +120.304751 36.912427 115 +120.304751 36.921427 814 +120.304751 36.934927 4 +120.304751 36.952927 764 +120.304751 36.966427 1192 +120.304751 36.984427 426 +120.304751 36.993427 14 +120.304751 36.997927 1225 +120.304751 37.006927 8 +120.304751 37.011427 689 +120.304751 37.020427 6 +120.304751 37.024927 4 +120.304751 37.042927 2008 +120.304751 37.047427 1 +120.304751 37.051927 4 +120.304751 37.078927 5 +120.304751 37.083427 1451 +120.304751 37.087927 10 +120.310251 35.940427 739 +120.310251 35.944927 29 +120.310251 36.057427 6450 +120.310251 36.061927 4400 +120.310251 36.066427 52207 +120.310251 36.070927 2581 +120.310251 36.075427 993 +120.310251 36.079927 167 +120.310251 36.286927 2 +120.310251 36.336427 1438 +120.310251 36.340927 394 +120.310251 36.345427 86 +120.310251 36.349927 723 +120.310251 36.354427 2 +120.310251 36.358927 4 +120.310251 36.363427 4 +120.310251 36.367927 123 +120.310251 36.372427 5 +120.310251 36.385927 3 +120.310251 36.390427 10 +120.310251 36.399427 7 +120.310251 36.408427 17 +120.310251 36.435427 1101 +120.310251 36.439927 1182 +120.310251 36.444427 1471 +120.310251 36.471427 4 +120.310251 36.480427 1382 +120.310251 36.579427 1694 +120.310251 36.606427 1100 +120.310251 36.660427 1567 +120.310251 36.687427 623 +120.310251 36.705427 1077 +120.310251 36.714427 812 +120.310251 36.718927 665 +120.310251 36.736927 276 +120.310251 36.741427 7 +120.310251 36.763927 1491 +120.310251 36.813427 1164 +120.310251 36.831427 858 +120.310251 36.840427 583 +120.310251 36.858427 1422 +120.310251 36.894427 208 +120.310251 36.903427 584 +120.310251 36.925927 11 +120.310251 36.930427 99 +120.310251 36.957427 123 +120.310251 36.966427 17 +120.310251 36.979927 829 +120.310251 37.011427 268 +120.310251 37.020427 450 +120.310251 37.038427 280 +120.310251 37.047427 4 +120.310251 37.051927 9 +120.310251 37.056427 348 +120.310251 37.078927 7 +120.310251 37.083427 13 +120.310251 37.096927 3 +120.315751 36.061927 6510 +120.315751 36.066427 11191 +120.315751 36.070927 8401 +120.315751 36.075427 9084 +120.315751 36.079927 5901 +120.315751 36.097927 165 +120.315751 36.286927 123 +120.315751 36.322927 69 +120.315751 36.327427 4 +120.315751 36.336427 101 +120.315751 36.340927 24 +120.315751 36.345427 36 +120.315751 36.349927 375 +120.315751 36.354427 865 +120.315751 36.376927 58 +120.315751 36.381427 1488 +120.315751 36.385927 691 +120.315751 36.408427 556 +120.315751 36.412927 32 +120.315751 36.426427 3 +120.315751 36.435427 254 +120.315751 36.439927 252 +120.315751 36.444427 2439 +120.315751 36.471427 5 +120.315751 36.475927 1100 +120.315751 36.529927 4 +120.315751 36.556927 45 +120.315751 36.561427 2438 +120.315751 36.583927 4 +120.315751 36.660427 1502 +120.315751 36.687427 1089 +120.315751 36.691927 4 +120.315751 36.714427 7 +120.315751 36.741427 381 +120.315751 36.750427 352 +120.315751 36.763927 6 +120.315751 36.790927 268 +120.315751 36.795427 407 +120.315751 36.921427 9 +120.315751 36.925927 3401 +120.315751 36.930427 46 +120.315751 36.934927 4 +120.315751 36.939427 13 +120.315751 36.943927 1806 +120.315751 36.948427 361 +120.315751 36.979927 4 +120.315751 37.011427 10 +120.315751 37.042927 835 +120.315751 37.047427 52 +120.315751 37.051927 1 +120.315751 37.060927 397 +120.315751 37.096927 1615 +120.321251 36.057427 149 +120.321251 36.061927 6296 +120.321251 36.066427 12802 +120.321251 36.070927 11050 +120.321251 36.075427 11407 +120.321251 36.079927 6665 +120.321251 36.084427 1857 +120.321251 36.246427 172 +120.321251 36.277927 686 +120.321251 36.309427 2 +120.321251 36.313927 41 +120.321251 36.318427 290 +120.321251 36.322927 3425 +120.321251 36.327427 20 +120.321251 36.331927 9 +120.321251 36.336427 3 +120.321251 36.345427 499 +120.321251 36.349927 4 +120.321251 36.354427 404 +120.321251 36.358927 3197 +120.321251 36.363427 151 +120.321251 36.372427 252 +120.321251 36.376927 50 +120.321251 36.381427 29 +120.321251 36.394927 19 +120.321251 36.399427 13 +120.321251 36.412927 487 +120.321251 36.426427 386 +120.321251 36.439927 4 +120.321251 36.444427 369 +120.321251 36.448927 4 +120.321251 36.466927 771 +120.321251 36.471427 5 +120.321251 36.507427 2670 +120.321251 36.525427 464 +120.321251 36.606427 1024 +120.321251 36.660427 14 +120.321251 36.664927 34 +120.321251 36.669427 576 +120.321251 36.673927 756 +120.321251 36.678427 829 +120.321251 36.687427 11 +120.321251 36.691927 751 +120.321251 36.696427 234 +120.321251 36.714427 1548 +120.321251 36.718927 3 +120.321251 36.732427 1384 +120.321251 36.813427 365 +120.321251 36.822427 4 +120.321251 36.844927 731 +120.321251 36.898927 209 +120.321251 36.961927 4 +120.321251 37.002427 365 +120.321251 37.006927 11 +120.321251 37.015927 29 +120.321251 37.033927 485 +120.321251 37.051927 6 +120.321251 37.105927 570 +120.326751 36.052927 2804 +120.326751 36.057427 3119 +120.326751 36.061927 7772 +120.326751 36.066427 7026 +120.326751 36.070927 10120 +120.326751 36.075427 9424 +120.326751 36.079927 12653 +120.326751 36.084427 5037 +120.326751 36.088927 6 +120.326751 36.106927 3 +120.326751 36.241927 57 +120.326751 36.250927 526 +120.326751 36.295927 7 +120.326751 36.300427 4542 +120.326751 36.304927 9 +120.326751 36.309427 1 +120.326751 36.313927 230 +120.326751 36.318427 89 +120.326751 36.322927 56 +120.326751 36.327427 13 +120.326751 36.331927 1461 +120.326751 36.336427 6 +120.326751 36.340927 962 +120.326751 36.358927 98 +120.326751 36.363427 73 +120.326751 36.367927 70 +120.326751 36.372427 533 +120.326751 36.376927 967 +120.326751 36.381427 51 +120.326751 36.385927 636 +120.326751 36.394927 5 +120.326751 36.399427 1307 +120.326751 36.412927 280 +120.326751 36.444427 3 +120.326751 36.498427 6 +120.326751 36.502927 3 +120.326751 36.570427 131 +120.326751 36.574927 3 +120.326751 36.610927 1593 +120.326751 36.664927 16 +120.326751 36.669427 19 +120.326751 36.678427 18 +120.326751 36.732427 540 +120.326751 36.754927 475 +120.326751 36.772927 3 +120.326751 36.777427 732 +120.326751 36.808927 1623 +120.326751 36.889927 989 +120.326751 36.898927 279 +120.326751 36.903427 119 +120.326751 36.957427 1659 +120.326751 36.961927 6 +120.326751 36.970927 9 +120.326751 36.993427 3 +120.326751 36.997927 411 +120.326751 37.002427 408 +120.326751 37.011427 26 +120.326751 37.015927 1845 +120.326751 37.060927 8 +120.326751 37.065427 1735 +120.332251 36.052927 1108 +120.332251 36.057427 4569 +120.332251 36.061927 8483 +120.332251 36.066427 10524 +120.332251 36.070927 11562 +120.332251 36.075427 7347 +120.332251 36.079927 8321 +120.332251 36.084427 5763 +120.332251 36.088927 11 +120.332251 36.102427 207 +120.332251 36.106927 9 +120.332251 36.111427 19 +120.332251 36.115927 13 +120.332251 36.250927 376 +120.332251 36.295927 5 +120.332251 36.300427 251 +120.332251 36.304927 74 +120.332251 36.309427 3469 +120.332251 36.318427 4 +120.332251 36.340927 4 +120.332251 36.367927 671 +120.332251 36.372427 3 +120.332251 36.376927 20 +120.332251 36.381427 819 +120.332251 36.385927 102 +120.332251 36.390427 1189 +120.332251 36.394927 3 +120.332251 36.430927 56 +120.332251 36.498427 1362 +120.332251 36.552427 4 +120.332251 36.610927 63 +120.332251 36.673927 7 +120.332251 36.678427 59 +120.332251 36.682927 1392 +120.332251 36.696427 14 +120.332251 36.718927 548 +120.332251 36.723427 527 +120.332251 36.727927 743 +120.332251 36.763927 27 +120.332251 36.768427 7 +120.332251 36.777427 486 +120.332251 36.781927 332 +120.332251 36.808927 6 +120.332251 36.826927 1175 +120.332251 36.858427 710 +120.332251 36.876427 21 +120.332251 36.921427 663 +120.332251 36.970927 768 +120.332251 36.975427 213 +120.332251 36.979927 217 +120.332251 37.011427 1 +120.332251 37.015927 77 +120.332251 37.020427 888 +120.332251 37.042927 4 +120.337751 36.057427 2958 +120.337751 36.061927 3118 +120.337751 36.066427 6794 +120.337751 36.070927 6075 +120.337751 36.075427 7877 +120.337751 36.079927 5787 +120.337751 36.084427 3283 +120.337751 36.088927 207 +120.337751 36.093427 10 +120.337751 36.097927 4 +120.337751 36.102427 493 +120.337751 36.106927 2498 +120.337751 36.111427 3391 +120.337751 36.115927 409 +120.337751 36.124927 5 +120.337751 36.133927 510 +120.337751 36.232927 2 +120.337751 36.237427 1380 +120.337751 36.241927 3 +120.337751 36.246427 844 +120.337751 36.255427 2 +120.337751 36.259927 2394 +120.337751 36.277927 17 +120.337751 36.304927 20 +120.337751 36.309427 186 +120.337751 36.340927 102 +120.337751 36.349927 19 +120.337751 36.354427 24 +120.337751 36.358927 53 +120.337751 36.376927 932 +120.337751 36.381427 29 +120.337751 36.385927 725 +120.337751 36.430927 2 +120.337751 36.435427 681 +120.337751 36.502927 10 +120.337751 36.543427 4 +120.337751 36.547927 1598 +120.337751 36.552427 589 +120.337751 36.570427 12 +120.337751 36.637927 1291 +120.337751 36.655927 453 +120.337751 36.682927 712 +120.337751 36.687427 3 +120.337751 36.691927 1189 +120.337751 36.696427 1569 +120.337751 36.700927 14 +120.337751 36.723427 46 +120.337751 36.727927 2792 +120.337751 36.741427 854 +120.337751 36.745927 497 +120.337751 36.763927 39 +120.337751 36.768427 2528 +120.337751 36.772927 38 +120.337751 36.781927 7 +120.337751 36.813427 3 +120.337751 36.826927 3 +120.337751 36.831427 4 +120.337751 36.912427 282 +120.337751 36.925927 58 +120.337751 36.997927 3 +120.337751 37.015927 976 +120.337751 37.020427 3 +120.337751 37.038427 590 +120.337751 37.069927 288 +120.337751 37.074427 5 +120.343251 36.043927 142 +120.343251 36.048427 1358 +120.343251 36.052927 2839 +120.343251 36.057427 60 +120.343251 36.061927 411 +120.343251 36.066427 765 +120.343251 36.070927 6437 +120.343251 36.075427 10084 +120.343251 36.079927 1104 +120.343251 36.084427 3332 +120.343251 36.088927 1610 +120.343251 36.093427 1619 +120.343251 36.097927 1788 +120.343251 36.102427 2046 +120.343251 36.106927 676 +120.343251 36.111427 6986 +120.343251 36.115927 3352 +120.343251 36.120427 2123 +120.343251 36.124927 1211 +120.343251 36.129427 37 +120.343251 36.133927 189 +120.343251 36.142927 136 +120.343251 36.232927 178 +120.343251 36.237427 246 +120.343251 36.241927 1750 +120.343251 36.246427 124 +120.343251 36.255427 32 +120.343251 36.268927 930 +120.343251 36.304927 3 +120.343251 36.331927 4 +120.343251 36.349927 69 +120.343251 36.354427 1293 +120.343251 36.381427 4 +120.343251 36.412927 11 +120.343251 36.435427 1611 +120.343251 36.439927 2 +120.343251 36.480427 19 +120.343251 36.484927 1477 +120.343251 36.502927 1303 +120.343251 36.507427 786 +120.343251 36.552427 5 +120.343251 36.570427 1404 +120.343251 36.592927 1186 +120.343251 36.646927 301 +120.343251 36.655927 10 +120.343251 36.696427 53 +120.343251 36.700927 515 +120.343251 36.705427 1439 +120.343251 36.723427 98 +120.343251 36.727927 32 +120.343251 36.741427 656 +120.343251 36.763927 61 +120.343251 36.768427 9 +120.343251 36.777427 442 +120.343251 36.781927 340 +120.343251 36.786427 6 +120.343251 36.808927 11 +120.343251 36.813427 430 +120.343251 36.840427 2324 +120.343251 36.871927 775 +120.343251 36.894427 579 +120.343251 36.930427 251 +120.343251 36.948427 7 +120.343251 36.966427 367 +120.343251 36.984427 579 +120.343251 36.997927 4 +120.343251 37.024927 959 +120.343251 37.033927 423 +120.343251 37.038427 151 +120.343251 37.042927 206 +120.343251 37.051927 360 +120.343251 37.056427 12 +120.348751 36.048427 119 +120.348751 36.052927 1306 +120.348751 36.057427 168 +120.348751 36.061927 120 +120.348751 36.070927 6869 +120.348751 36.075427 9357 +120.348751 36.079927 8326 +120.348751 36.084427 9323 +120.348751 36.088927 9177 +120.348751 36.093427 4825 +120.348751 36.097927 2000 +120.348751 36.102427 6874 +120.348751 36.106927 5975 +120.348751 36.111427 9542 +120.348751 36.115927 6068 +120.348751 36.120427 1410 +120.348751 36.124927 1595 +120.348751 36.129427 2253 +120.348751 36.138427 73 +120.348751 36.142927 1332 +120.348751 36.232927 1772 +120.348751 36.237427 49 +120.348751 36.241927 4 +120.348751 36.264427 584 +120.348751 36.291427 3 +120.348751 36.295927 2 +120.348751 36.322927 15 +120.348751 36.327427 185 +120.348751 36.331927 20 +120.348751 36.354427 608 +120.348751 36.363427 4 +120.348751 36.367927 5 +120.348751 36.385927 9 +120.348751 36.390427 4 +120.348751 36.394927 2138 +120.348751 36.399427 41 +120.348751 36.403927 952 +120.348751 36.408427 471 +120.348751 36.417427 501 +120.348751 36.475927 473 +120.348751 36.484927 1522 +120.348751 36.588427 5 +120.348751 36.660427 28 +120.348751 36.696427 1072 +120.348751 36.700927 2210 +120.348751 36.705427 361 +120.348751 36.709927 8 +120.348751 36.723427 1125 +120.348751 36.763927 347 +120.348751 36.781927 4 +120.348751 36.808927 709 +120.348751 36.849427 4 +120.348751 36.880927 1097 +120.348751 36.907927 1111 +120.348751 36.925927 275 +120.348751 36.943927 5 +120.348751 36.948427 946 +120.348751 37.015927 2 +120.348751 37.024927 108 +120.348751 37.029427 291 +120.348751 37.047427 225 +120.348751 37.051927 278 +120.348751 37.056427 402 +120.354251 36.048427 127 +120.354251 36.052927 4649 +120.354251 36.057427 2812 +120.354251 36.061927 109 +120.354251 36.066427 102 +120.354251 36.070927 9634 +120.354251 36.075427 13944 +120.354251 36.079927 12192 +120.354251 36.084427 13713 +120.354251 36.088927 8368 +120.354251 36.093427 3354 +120.354251 36.097927 3962 +120.354251 36.102427 11146 +120.354251 36.106927 10540 +120.354251 36.111427 8994 +120.354251 36.115927 5434 +120.354251 36.120427 288 +120.354251 36.124927 91 +120.354251 36.129427 48 +120.354251 36.133927 36 +120.354251 36.138427 200 +120.354251 36.151927 630 +120.354251 36.205927 2 +120.354251 36.228427 11 +120.354251 36.232927 21 +120.354251 36.246427 9 +120.354251 36.250927 26 +120.354251 36.255427 98 +120.354251 36.259927 61 +120.354251 36.286927 7 +120.354251 36.291427 301 +120.354251 36.295927 197 +120.354251 36.300427 4143 +120.354251 36.304927 155 +120.354251 36.322927 4 +120.354251 36.327427 792 +120.354251 36.354427 10 +120.354251 36.363427 1290 +120.354251 36.367927 83 +120.354251 36.385927 841 +120.354251 36.394927 693 +120.354251 36.399427 9 +120.354251 36.403927 857 +120.354251 36.412927 647 +120.354251 36.421927 279 +120.354251 36.430927 3 +120.354251 36.484927 19 +120.354251 36.489427 7 +120.354251 36.529927 1 +120.354251 36.534427 17 +120.354251 36.552427 511 +120.354251 36.610927 3 +120.354251 36.619927 2 +120.354251 36.624427 13 +120.354251 36.741427 619 +120.354251 36.745927 14 +120.354251 36.750427 1681 +120.354251 36.759427 264 +120.354251 36.772927 3 +120.354251 36.795427 4 +120.354251 36.831427 17 +120.354251 36.957427 279 +120.354251 36.966427 692 +120.354251 36.979927 828 +120.354251 36.988927 136 +120.354251 37.002427 178 +120.354251 37.020427 502 +120.354251 37.056427 4 +120.359751 36.043927 339 +120.359751 36.048427 169 +120.359751 36.052927 3161 +120.359751 36.057427 1160 +120.359751 36.061927 527 +120.359751 36.066427 1050 +120.359751 36.070927 7646 +120.359751 36.075427 8460 +120.359751 36.079927 15045 +120.359751 36.084427 8063 +120.359751 36.088927 6546 +120.359751 36.093427 13565 +120.359751 36.097927 8866 +120.359751 36.102427 9692 +120.359751 36.106927 16363 +120.359751 36.111427 8813 +120.359751 36.115927 8263 +120.359751 36.120427 2230 +120.359751 36.124927 2423 +120.359751 36.129427 3836 +120.359751 36.133927 451 +120.359751 36.138427 84 +120.359751 36.214927 1 +120.359751 36.219427 6 +120.359751 36.223927 463 +120.359751 36.228427 3259 +120.359751 36.232927 5 +120.359751 36.246427 3221 +120.359751 36.250927 110 +120.359751 36.255427 2781 +120.359751 36.259927 866 +120.359751 36.268927 26 +120.359751 36.282427 19 +120.359751 36.286927 80 +120.359751 36.291427 451 +120.359751 36.295927 2179 +120.359751 36.300427 126 +120.359751 36.304927 823 +120.359751 36.309427 14 +120.359751 36.313927 3254 +120.359751 36.322927 843 +120.359751 36.327427 53 +120.359751 36.331927 8 +120.359751 36.354427 16 +120.359751 36.358927 3 +120.359751 36.372427 5 +120.359751 36.376927 406 +120.359751 36.403927 2 +120.359751 36.412927 1 +120.359751 36.435427 63 +120.359751 36.439927 825 +120.359751 36.489427 299 +120.359751 36.534427 709 +120.359751 36.610927 2488 +120.359751 36.624427 30 +120.359751 36.646927 206 +120.359751 36.651427 356 +120.359751 36.723427 532 +120.359751 36.727927 19 +120.359751 36.736927 10 +120.359751 36.741427 1686 +120.359751 36.745927 4 +120.359751 36.750427 10 +120.359751 36.754927 4 +120.359751 36.759427 1935 +120.359751 36.763927 25 +120.359751 36.781927 599 +120.359751 36.786427 388 +120.359751 36.799927 1173 +120.359751 36.831427 1 +120.359751 36.889927 374 +120.359751 36.898927 98 +120.359751 36.934927 177 +120.359751 36.939427 4 +120.359751 36.975427 300 +120.359751 36.984427 362 +120.359751 37.011427 2 +120.359751 37.042927 253 +120.359751 37.056427 361 +120.359751 37.065427 1055 +120.359751 37.069927 492 +120.365251 36.048427 551 +120.365251 36.052927 911 +120.365251 36.057427 5833 +120.365251 36.061927 5706 +120.365251 36.066427 13385 +120.365251 36.070927 8507 +120.365251 36.075427 9980 +120.365251 36.079927 7916 +120.365251 36.084427 7548 +120.365251 36.088927 7615 +120.365251 36.093427 6070 +120.365251 36.097927 13615 +120.365251 36.102427 7924 +120.365251 36.106927 8578 +120.365251 36.111427 6409 +120.365251 36.115927 1390 +120.365251 36.120427 1027 +120.365251 36.124927 2776 +120.365251 36.129427 3503 +120.365251 36.133927 2901 +120.365251 36.138427 99 +120.365251 36.147427 101 +120.365251 36.160927 4 +120.365251 36.214927 43 +120.365251 36.219427 93 +120.365251 36.228427 112 +120.365251 36.232927 39 +120.365251 36.237427 12 +120.365251 36.241927 18 +120.365251 36.259927 51 +120.365251 36.264427 610 +120.365251 36.268927 1908 +120.365251 36.282427 1403 +120.365251 36.286927 216 +120.365251 36.295927 38 +120.365251 36.300427 2835 +120.365251 36.304927 860 +120.365251 36.309427 3 +120.365251 36.313927 6 +120.365251 36.318427 312 +120.365251 36.322927 29 +120.365251 36.340927 8 +120.365251 36.354427 2002 +120.365251 36.363427 17 +120.365251 36.367927 45 +120.365251 36.372427 9 +120.365251 36.390427 639 +120.365251 36.444427 427 +120.365251 36.448927 15 +120.365251 36.480427 15 +120.365251 36.484927 3 +120.365251 36.534427 2304 +120.365251 36.538927 979 +120.365251 36.637927 7 +120.365251 36.642427 1382 +120.365251 36.682927 583 +120.365251 36.700927 353 +120.365251 36.727927 5 +120.365251 36.741427 5 +120.365251 36.759427 63 +120.365251 36.763927 751 +120.365251 36.822427 4 +120.365251 36.831427 5 +120.365251 36.858427 111 +120.365251 36.925927 1606 +120.365251 36.930427 3 +120.365251 36.948427 4 +120.365251 36.997927 242 +120.365251 37.002427 4 +120.365251 37.011427 812 +120.365251 37.033927 905 +120.365251 37.056427 5 +120.365251 37.065427 6 +120.370751 36.052927 307 +120.370751 36.057427 2667 +120.370751 36.061927 5720 +120.370751 36.066427 3799 +120.370751 36.070927 9314 +120.370751 36.075427 4641 +120.370751 36.079927 3855 +120.370751 36.084427 5135 +120.370751 36.088927 8321 +120.370751 36.093427 9089 +120.370751 36.097927 1913 +120.370751 36.102427 6609 +120.370751 36.106927 6855 +120.370751 36.111427 513 +120.370751 36.115927 16 +120.370751 36.120427 737 +120.370751 36.124927 5084 +120.370751 36.129427 1671 +120.370751 36.133927 3668 +120.370751 36.138427 2516 +120.370751 36.142927 317 +120.370751 36.147427 9 +120.370751 36.160927 5 +120.370751 36.178927 816 +120.370751 36.183427 990 +120.370751 36.187927 705 +120.370751 36.192427 331 +120.370751 36.196927 7 +120.370751 36.214927 92 +120.370751 36.219427 1674 +120.370751 36.223927 410 +120.370751 36.228427 2177 +120.370751 36.237427 1 +120.370751 36.241927 684 +120.370751 36.246427 835 +120.370751 36.250927 69 +120.370751 36.264427 799 +120.370751 36.268927 47 +120.370751 36.282427 1 +120.370751 36.286927 370 +120.370751 36.291427 14 +120.370751 36.295927 736 +120.370751 36.300427 1223 +120.370751 36.304927 382 +120.370751 36.309427 170 +120.370751 36.318427 615 +120.370751 36.322927 786 +120.370751 36.327427 43 +120.370751 36.331927 1143 +120.370751 36.336427 106 +120.370751 36.340927 1362 +120.370751 36.349927 6 +120.370751 36.354427 313 +120.370751 36.358927 2435 +120.370751 36.363427 17 +120.370751 36.367927 8 +120.370751 36.372427 1990 +120.370751 36.390427 16 +120.370751 36.421927 138 +120.370751 36.448927 2274 +120.370751 36.480427 1555 +120.370751 36.484927 1578 +120.370751 36.489427 10 +120.370751 36.511927 908 +120.370751 36.574927 3 +120.370751 36.588427 33 +120.370751 36.646927 6 +120.370751 36.673927 814 +120.370751 36.687427 111 +120.370751 36.696427 4 +120.370751 36.723427 366 +120.370751 36.727927 5 +120.370751 36.732427 566 +120.370751 36.736927 361 +120.370751 36.741427 306 +120.370751 36.745927 1644 +120.370751 36.750427 74 +120.370751 36.768427 3 +120.370751 36.772927 490 +120.370751 36.786427 17 +120.370751 36.790927 4 +120.370751 36.795427 820 +120.370751 36.808927 1245 +120.370751 36.835927 28 +120.370751 36.867427 365 +120.370751 36.871927 130 +120.370751 36.880927 778 +120.370751 36.898927 5 +120.370751 36.912427 603 +120.370751 36.916927 531 +120.370751 36.943927 3 +120.370751 36.948427 25 +120.370751 36.952927 2621 +120.370751 36.975427 306 +120.370751 36.979927 4 +120.370751 37.020427 477 +120.370751 37.029427 168 +120.370751 37.033927 305 +120.370751 37.042927 733 +120.370751 37.060927 509 +120.370751 37.092427 975 +120.376251 36.057427 1652 +120.376251 36.061927 1155 +120.376251 36.066427 2369 +120.376251 36.070927 4370 +120.376251 36.075427 6233 +120.376251 36.079927 5798 +120.376251 36.084427 4092 +120.376251 36.088927 757 +120.376251 36.093427 6100 +120.376251 36.097927 4609 +120.376251 36.102427 5531 +120.376251 36.106927 2144 +120.376251 36.111427 3699 +120.376251 36.115927 1336 +120.376251 36.120427 2248 +120.376251 36.124927 6247 +120.376251 36.129427 6065 +120.376251 36.133927 5600 +120.376251 36.138427 6644 +120.376251 36.142927 2768 +120.376251 36.151927 585 +120.376251 36.156427 88 +120.376251 36.160927 595 +120.376251 36.165427 922 +120.376251 36.169927 64 +120.376251 36.174427 3878 +120.376251 36.178927 4690 +120.376251 36.183427 2564 +120.376251 36.187927 4823 +120.376251 36.192427 2569 +120.376251 36.196927 50 +120.376251 36.205927 11 +120.376251 36.210427 191 +120.376251 36.214927 29 +120.376251 36.219427 140 +120.376251 36.223927 476 +120.376251 36.228427 204 +120.376251 36.237427 45 +120.376251 36.241927 3351 +120.376251 36.246427 153 +120.376251 36.282427 443 +120.376251 36.286927 669 +120.376251 36.291427 100 +120.376251 36.295927 100 +120.376251 36.300427 360 +120.376251 36.304927 771 +120.376251 36.309427 9 +120.376251 36.313927 12 +120.376251 36.322927 12 +120.376251 36.327427 17 +120.376251 36.345427 6 +120.376251 36.349927 7 +120.376251 36.385927 210 +120.376251 36.390427 584 +120.376251 36.421927 12 +120.376251 36.426427 10 +120.376251 36.475927 713 +120.376251 36.480427 306 +120.376251 36.484927 643 +120.376251 36.525427 1092 +120.376251 36.574927 502 +120.376251 36.583927 3 +120.376251 36.588427 1840 +120.376251 36.619927 505 +120.376251 36.646927 930 +120.376251 36.691927 290 +120.376251 36.696427 22 +120.376251 36.705427 302 +120.376251 36.714427 3 +120.376251 36.718927 1462 +120.376251 36.736927 431 +120.376251 36.754927 5 +120.376251 36.763927 1 +120.376251 36.772927 1001 +120.376251 36.790927 263 +120.376251 36.808927 3 +120.376251 36.835927 4 +120.376251 36.862927 9 +120.376251 36.894427 7 +120.376251 36.912427 2 +120.376251 36.921427 285 +120.376251 36.943927 151 +120.376251 36.948427 1417 +120.376251 36.952927 228 +120.376251 36.957427 1246 +120.376251 36.975427 217 +120.376251 36.979927 22 +120.376251 36.984427 11 +120.376251 36.988927 277 +120.376251 37.006927 1012 +120.376251 37.015927 796 +120.376251 37.020427 5 +120.376251 37.029427 4 +120.376251 37.033927 12 +120.381751 36.057427 128 +120.381751 36.061927 1509 +120.381751 36.066427 5026 +120.381751 36.070927 9280 +120.381751 36.075427 3792 +120.381751 36.079927 5937 +120.381751 36.084427 5642 +120.381751 36.088927 2194 +120.381751 36.093427 2272 +120.381751 36.097927 9518 +120.381751 36.102427 6393 +120.381751 36.106927 3578 +120.381751 36.111427 1065 +120.381751 36.115927 2509 +120.381751 36.120427 214 +120.381751 36.124927 956 +120.381751 36.129427 5300 +120.381751 36.133927 4123 +120.381751 36.138427 9767 +120.381751 36.142927 4350 +120.381751 36.147427 2296 +120.381751 36.151927 175 +120.381751 36.156427 522 +120.381751 36.160927 82 +120.381751 36.165427 1604 +120.381751 36.169927 6067 +120.381751 36.174427 6250 +120.381751 36.178927 4589 +120.381751 36.183427 5177 +120.381751 36.187927 4540 +120.381751 36.192427 1735 +120.381751 36.196927 160 +120.381751 36.201427 6 +120.381751 36.205927 4 +120.381751 36.210427 25 +120.381751 36.228427 102 +120.381751 36.241927 24 +120.381751 36.282427 2585 +120.381751 36.286927 600 +120.381751 36.291427 244 +120.381751 36.295927 1393 +120.381751 36.300427 1735 +120.381751 36.304927 1943 +120.381751 36.309427 437 +120.381751 36.313927 772 +120.381751 36.318427 4003 +120.381751 36.327427 1041 +120.381751 36.331927 64 +120.381751 36.336427 394 +120.381751 36.340927 8 +120.381751 36.349927 371 +120.381751 36.354427 4 +120.381751 36.358927 19 +120.381751 36.363427 18 +120.381751 36.372427 310 +120.381751 36.376927 677 +120.381751 36.381427 1159 +120.381751 36.408427 29 +120.381751 36.426427 17 +120.381751 36.489427 12 +120.381751 36.493927 746 +120.381751 36.574927 18 +120.381751 36.579427 3 +120.381751 36.696427 213 +120.381751 36.736927 1668 +120.381751 36.754927 6 +120.381751 36.759427 1384 +120.381751 36.795427 109 +120.381751 36.840427 8 +120.381751 36.862927 23 +120.381751 36.948427 646 +120.381751 36.952927 382 +120.381751 36.957427 1075 +120.381751 36.970927 452 +120.381751 36.975427 4 +120.381751 36.988927 472 +120.381751 37.011427 15 +120.381751 37.015927 33 +120.381751 37.020427 3 +120.381751 37.056427 260 +120.381751 37.096927 634 +120.387251 36.057427 52 +120.387251 36.061927 1865 +120.387251 36.066427 6022 +120.387251 36.070927 7433 +120.387251 36.075427 8656 +120.387251 36.079927 6159 +120.387251 36.084427 4384 +120.387251 36.088927 1797 +120.387251 36.093427 2145 +120.387251 36.097927 7608 +120.387251 36.102427 7228 +120.387251 36.106927 745 +120.387251 36.111427 1606 +120.387251 36.115927 689 +120.387251 36.120427 23 +120.387251 36.124927 55 +120.387251 36.129427 4083 +120.387251 36.133927 2411 +120.387251 36.138427 7371 +120.387251 36.142927 6448 +120.387251 36.147427 128 +120.387251 36.160927 18 +120.387251 36.165427 1260 +120.387251 36.169927 5024 +120.387251 36.174427 7509 +120.387251 36.178927 5766 +120.387251 36.183427 2777 +120.387251 36.187927 2741 +120.387251 36.192427 5373 +120.387251 36.196927 51 +120.387251 36.201427 36 +120.387251 36.205927 1970 +120.387251 36.210427 86 +120.387251 36.268927 2 +120.387251 36.273427 72 +120.387251 36.277927 34 +120.387251 36.282427 245 +120.387251 36.286927 62 +120.387251 36.291427 8447 +120.387251 36.295927 5209 +120.387251 36.300427 10084 +120.387251 36.304927 1585 +120.387251 36.309427 2397 +120.387251 36.313927 366 +120.387251 36.327427 445 +120.387251 36.331927 1984 +120.387251 36.336427 10 +120.387251 36.340927 14 +120.387251 36.349927 8 +120.387251 36.358927 901 +120.387251 36.376927 5 +120.387251 36.381427 274 +120.387251 36.385927 18 +120.387251 36.390427 8 +120.387251 36.394927 7 +120.387251 36.399427 3 +120.387251 36.412927 642 +120.387251 36.448927 1884 +120.387251 36.466927 32 +120.387251 36.493927 668 +120.387251 36.498427 20 +120.387251 36.543427 984 +120.387251 36.547927 3 +120.387251 36.574927 145 +120.387251 36.579427 1292 +120.387251 36.583927 6 +120.387251 36.628927 717 +120.387251 36.642427 317 +120.387251 36.646927 3 +120.387251 36.651427 876 +120.387251 36.660427 3 +120.387251 36.687427 815 +120.387251 36.741427 376 +120.387251 36.759427 448 +120.387251 36.772927 599 +120.387251 36.781927 2 +120.387251 36.808927 18 +120.387251 36.822427 7 +120.387251 36.885427 270 +120.387251 36.925927 458 +120.387251 36.943927 4 +120.387251 36.948427 421 +120.387251 36.957427 519 +120.387251 36.979927 19 +120.387251 36.984427 1153 +120.387251 37.024927 607 +120.387251 37.038427 1309 +120.387251 37.069927 15 +120.387251 37.074427 689 +120.392751 36.052927 100 +120.392751 36.057427 710 +120.392751 36.061927 1904 +120.392751 36.066427 13064 +120.392751 36.070927 5101 +120.392751 36.075427 4227 +120.392751 36.079927 12450 +120.392751 36.084427 5784 +120.392751 36.088927 2337 +120.392751 36.093427 3623 +120.392751 36.097927 5812 +120.392751 36.102427 5447 +120.392751 36.106927 3514 +120.392751 36.111427 1309 +120.392751 36.115927 3935 +120.392751 36.124927 409 +120.392751 36.129427 142 +120.392751 36.133927 1738 +120.392751 36.138427 3898 +120.392751 36.142927 4847 +120.392751 36.147427 189 +120.392751 36.165427 403 +120.392751 36.169927 4448 +120.392751 36.174427 6327 +120.392751 36.178927 358 +120.392751 36.183427 5661 +120.392751 36.187927 1546 +120.392751 36.192427 1882 +120.392751 36.201427 1329 +120.392751 36.210427 427 +120.392751 36.214927 267 +120.392751 36.219427 3529 +120.392751 36.223927 1558 +120.392751 36.228427 90 +120.392751 36.232927 2 +120.392751 36.237427 2 +120.392751 36.241927 475 +120.392751 36.246427 4281 +120.392751 36.250927 130 +120.392751 36.264427 1292 +120.392751 36.268927 399 +120.392751 36.273427 1936 +120.392751 36.277927 286 +120.392751 36.286927 410 +120.392751 36.291427 2575 +120.392751 36.295927 13 +120.392751 36.300427 61 +120.392751 36.304927 6053 +120.392751 36.309427 2312 +120.392751 36.313927 584 +120.392751 36.318427 540 +120.392751 36.322927 2076 +120.392751 36.331927 80 +120.392751 36.336427 1866 +120.392751 36.340927 290 +120.392751 36.354427 1 +120.392751 36.367927 1433 +120.392751 36.376927 123 +120.392751 36.381427 229 +120.392751 36.385927 1811 +120.392751 36.390427 109 +120.392751 36.394927 175 +120.392751 36.399427 1620 +120.392751 36.403927 5 +120.392751 36.408427 814 +120.392751 36.462427 1413 +120.392751 36.493927 860 +120.392751 36.502927 91 +120.392751 36.529927 216 +120.392751 36.534427 279 +120.392751 36.547927 20 +120.392751 36.606427 1399 +120.392751 36.646927 4 +120.392751 36.660427 928 +120.392751 36.664927 7 +120.392751 36.687427 559 +120.392751 36.700927 1674 +120.392751 36.714427 13 +120.392751 36.718927 514 +120.392751 36.736927 702 +120.392751 36.741427 854 +120.392751 36.777427 11 +120.392751 36.808927 11 +120.392751 36.840427 21 +120.392751 36.844927 12 +120.392751 36.849427 6 +120.392751 36.867427 5 +120.392751 36.930427 575 +120.392751 36.975427 677 +120.392751 36.997927 998 +120.392751 37.006927 6 +120.392751 37.011427 305 +120.392751 37.074427 3 +120.392751 37.078927 504 +120.392751 37.083427 142 +120.392751 37.087927 542 +120.398251 36.052927 4310 +120.398251 36.057427 3483 +120.398251 36.061927 4633 +120.398251 36.066427 6509 +120.398251 36.070927 6288 +120.398251 36.075427 6084 +120.398251 36.079927 4282 +120.398251 36.084427 1248 +120.398251 36.088927 559 +120.398251 36.093427 1120 +120.398251 36.097927 4723 +120.398251 36.102427 2665 +120.398251 36.106927 3465 +120.398251 36.111427 3312 +120.398251 36.115927 1128 +120.398251 36.120427 396 +120.398251 36.124927 894 +120.398251 36.129427 5 +120.398251 36.133927 68 +120.398251 36.138427 3692 +120.398251 36.142927 202 +120.398251 36.147427 32 +120.398251 36.160927 169 +120.398251 36.165427 567 +120.398251 36.169927 3902 +120.398251 36.174427 4255 +120.398251 36.178927 2853 +120.398251 36.183427 1160 +120.398251 36.187927 1479 +120.398251 36.192427 26 +120.398251 36.201427 595 +120.398251 36.205927 1378 +120.398251 36.210427 3729 +120.398251 36.214927 287 +120.398251 36.219427 1678 +120.398251 36.223927 3171 +120.398251 36.237427 8 +120.398251 36.241927 94 +120.398251 36.246427 2107 +120.398251 36.250927 55 +120.398251 36.259927 17 +120.398251 36.264427 311 +120.398251 36.268927 133 +120.398251 36.273427 76 +120.398251 36.277927 2320 +120.398251 36.282427 191 +120.398251 36.286927 473 +120.398251 36.291427 674 +120.398251 36.295927 274 +120.398251 36.300427 300 +120.398251 36.304927 1160 +120.398251 36.309427 1427 +120.398251 36.313927 1080 +120.398251 36.322927 1553 +120.398251 36.327427 520 +120.398251 36.331927 29 +120.398251 36.336427 17 +120.398251 36.340927 67 +120.398251 36.345427 1364 +120.398251 36.372427 14 +120.398251 36.385927 32 +120.398251 36.390427 21 +120.398251 36.394927 655 +120.398251 36.399427 37 +120.398251 36.403927 102 +120.398251 36.408427 29 +120.398251 36.421927 40 +120.398251 36.471427 428 +120.398251 36.498427 19 +120.398251 36.502927 22 +120.398251 36.547927 11 +120.398251 36.565927 1346 +120.398251 36.597427 690 +120.398251 36.664927 357 +120.398251 36.673927 408 +120.398251 36.759427 1307 +120.398251 36.772927 1357 +120.398251 36.777427 4 +120.398251 36.781927 1139 +120.398251 36.826927 4 +120.398251 36.835927 5 +120.398251 36.840427 1643 +120.398251 36.862927 13 +120.398251 36.867427 10 +120.398251 36.894427 7 +120.398251 36.930427 6 +120.398251 36.934927 909 +120.398251 36.943927 594 +120.398251 37.006927 235 +120.398251 37.060927 222 +120.403751 36.052927 676 +120.403751 36.057427 4198 +120.403751 36.061927 4653 +120.403751 36.066427 5917 +120.403751 36.070927 7696 +120.403751 36.075427 8542 +120.403751 36.079927 5411 +120.403751 36.084427 3577 +120.403751 36.093427 1417 +120.403751 36.097927 3787 +120.403751 36.102427 2125 +120.403751 36.106927 1490 +120.403751 36.111427 5170 +120.403751 36.115927 3123 +120.403751 36.120427 355 +120.403751 36.124927 4279 +120.403751 36.129427 1249 +120.403751 36.133927 1258 +120.403751 36.142927 114 +120.403751 36.147427 101 +120.403751 36.151927 820 +120.403751 36.156427 714 +120.403751 36.160927 3535 +120.403751 36.165427 595 +120.403751 36.169927 3419 +120.403751 36.174427 2386 +120.403751 36.178927 2977 +120.403751 36.183427 1766 +120.403751 36.187927 430 +120.403751 36.192427 1205 +120.403751 36.196927 1445 +120.403751 36.201427 1068 +120.403751 36.205927 3810 +120.403751 36.210427 30 +120.403751 36.214927 399 +120.403751 36.219427 500 +120.403751 36.223927 275 +120.403751 36.241927 37 +120.403751 36.250927 4951 +120.403751 36.255427 2598 +120.403751 36.259927 45 +120.403751 36.264427 933 +120.403751 36.268927 2394 +120.403751 36.273427 3 +120.403751 36.277927 6 +120.403751 36.282427 42 +120.403751 36.286927 4322 +120.403751 36.291427 373 +120.403751 36.295927 1646 +120.403751 36.300427 4202 +120.403751 36.304927 1235 +120.403751 36.309427 5092 +120.403751 36.313927 295 +120.403751 36.318427 21 +120.403751 36.322927 8 +120.403751 36.327427 43 +120.403751 36.340927 15 +120.403751 36.345427 19 +120.403751 36.349927 10 +120.403751 36.354427 509 +120.403751 36.372427 31 +120.403751 36.385927 954 +120.403751 36.394927 16 +120.403751 36.399427 1040 +120.403751 36.403927 781 +120.403751 36.421927 36 +120.403751 36.426427 840 +120.403751 36.439927 20 +120.403751 36.457927 1055 +120.403751 36.462427 1 +120.403751 36.466927 21 +120.403751 36.498427 1 +120.403751 36.502927 7 +120.403751 36.507427 731 +120.403751 36.538927 237 +120.403751 36.565927 6 +120.403751 36.570427 257 +120.403751 36.592927 906 +120.403751 36.601927 1061 +120.403751 36.646927 460 +120.403751 36.669427 228 +120.403751 36.709927 11 +120.403751 36.714427 685 +120.403751 36.741427 474 +120.403751 36.759427 410 +120.403751 36.786427 945 +120.403751 36.822427 9 +120.403751 36.840427 1707 +120.403751 36.844927 25194 +120.403751 36.871927 11 +120.403751 36.876427 3 +120.403751 36.903427 4 +120.403751 36.907927 942 +120.403751 36.930427 337 +120.403751 36.934927 6 +120.403751 36.939427 46 +120.403751 37.042927 476 +120.403751 37.069927 378 +120.403751 37.078927 168 +120.409251 36.057427 678 +120.409251 36.061927 2145 +120.409251 36.066427 6855 +120.409251 36.070927 7060 +120.409251 36.075427 1963 +120.409251 36.079927 2921 +120.409251 36.084427 2748 +120.409251 36.093427 204 +120.409251 36.097927 2174 +120.409251 36.102427 3929 +120.409251 36.106927 5538 +120.409251 36.111427 1315 +120.409251 36.115927 1865 +120.409251 36.120427 395 +120.409251 36.124927 172 +120.409251 36.129427 904 +120.409251 36.133927 315 +120.409251 36.138427 1236 +120.409251 36.142927 3325 +120.409251 36.147427 2974 +120.409251 36.151927 4440 +120.409251 36.156427 5694 +120.409251 36.160927 1395 +120.409251 36.165427 1056 +120.409251 36.169927 2149 +120.409251 36.174427 603 +120.409251 36.178927 1086 +120.409251 36.183427 52 +120.409251 36.187927 1618 +120.409251 36.201427 47 +120.409251 36.205927 490 +120.409251 36.210427 568 +120.409251 36.214927 3 +120.409251 36.219427 393 +120.409251 36.223927 2917 +120.409251 36.237427 18 +120.409251 36.241927 206 +120.409251 36.250927 704 +120.409251 36.255427 1020 +120.409251 36.259927 131 +120.409251 36.264427 1037 +120.409251 36.268927 2948 +120.409251 36.277927 94 +120.409251 36.282427 91 +120.409251 36.286927 616 +120.409251 36.291427 911 +120.409251 36.295927 408 +120.409251 36.300427 2038 +120.409251 36.304927 1010 +120.409251 36.309427 4276 +120.409251 36.313927 1419 +120.409251 36.322927 130 +120.409251 36.327427 1101 +120.409251 36.331927 225 +120.409251 36.336427 1022 +120.409251 36.340927 5 +120.409251 36.345427 3947 +120.409251 36.349927 19 +120.409251 36.354427 5 +120.409251 36.363427 30 +120.409251 36.367927 35 +120.409251 36.372427 3 +120.409251 36.381427 8 +120.409251 36.385927 1026 +120.409251 36.390427 1502 +120.409251 36.394927 13 +120.409251 36.399427 3 +120.409251 36.426427 24 +120.409251 36.430927 17 +120.409251 36.435427 27 +120.409251 36.444427 19 +120.409251 36.448927 1737 +120.409251 36.453427 10 +120.409251 36.498427 41 +120.409251 36.507427 16 +120.409251 36.529927 1002 +120.409251 36.565927 415 +120.409251 36.574927 843 +120.409251 36.691927 1519 +120.409251 36.718927 31 +120.409251 36.723427 665 +120.409251 36.763927 1494 +120.409251 36.786427 13 +120.409251 36.790927 724 +120.409251 36.849427 7 +120.409251 36.921427 407 +120.409251 36.930427 3 +120.409251 36.934927 1088 +120.409251 36.979927 661 +120.409251 36.988927 395 +120.409251 37.002427 49 +120.409251 37.020427 516 +120.409251 37.024927 210 +120.409251 37.033927 365 +120.409251 37.042927 61 +120.409251 37.060927 145 +120.414751 36.057427 1617 +120.414751 36.061927 5592 +120.414751 36.066427 4335 +120.414751 36.070927 1009 +120.414751 36.075427 1738 +120.414751 36.079927 122 +120.414751 36.084427 4 +120.414751 36.088927 326 +120.414751 36.093427 1575 +120.414751 36.097927 3034 +120.414751 36.102427 8685 +120.414751 36.106927 4903 +120.414751 36.111427 1747 +120.414751 36.115927 74 +120.414751 36.124927 7 +120.414751 36.133927 679 +120.414751 36.138427 439 +120.414751 36.142927 1493 +120.414751 36.147427 1090 +120.414751 36.151927 3835 +120.414751 36.156427 6133 +120.414751 36.160927 4238 +120.414751 36.165427 4534 +120.414751 36.169927 2504 +120.414751 36.174427 810 +120.414751 36.178927 357 +120.414751 36.205927 48 +120.414751 36.210427 267 +120.414751 36.214927 598 +120.414751 36.223927 47 +120.414751 36.228427 1369 +120.414751 36.232927 296 +120.414751 36.237427 3 +120.414751 36.241927 17 +120.414751 36.250927 382 +120.414751 36.255427 4439 +120.414751 36.264427 12 +120.414751 36.268927 385 +120.414751 36.273427 6 +120.414751 36.277927 63 +120.414751 36.282427 14 +120.414751 36.286927 3017 +120.414751 36.291427 3127 +120.414751 36.295927 3134 +120.414751 36.300427 1848 +120.414751 36.304927 743 +120.414751 36.309427 568 +120.414751 36.313927 418 +120.414751 36.318427 16 +120.414751 36.322927 25 +120.414751 36.327427 136 +120.414751 36.331927 357 +120.414751 36.336427 850 +120.414751 36.345427 4 +120.414751 36.349927 1615 +120.414751 36.354427 1066 +120.414751 36.358927 62 +120.414751 36.363427 1153 +120.414751 36.367927 36 +120.414751 36.372427 5268 +120.414751 36.376927 7 +120.414751 36.381427 646 +120.414751 36.385927 3351 +120.414751 36.390427 3 +120.414751 36.394927 994 +120.414751 36.399427 13 +120.414751 36.408427 4 +120.414751 36.421927 7 +120.414751 36.439927 85 +120.414751 36.444427 48 +120.414751 36.448927 4 +120.414751 36.453427 33 +120.414751 36.457927 4 +120.414751 36.462427 42 +120.414751 36.516427 6 +120.414751 36.547927 17 +120.414751 36.552427 40 +120.414751 36.570427 361 +120.414751 36.592927 562 +120.414751 36.664927 853 +120.414751 36.669427 397 +120.414751 36.727927 725 +120.414751 36.745927 380 +120.414751 36.763927 537 +120.414751 36.768427 384 +120.414751 36.790927 1044 +120.414751 36.799927 4 +120.414751 36.808927 15 +120.414751 36.840427 3 +120.414751 36.849427 65 +120.414751 36.889927 7 +120.414751 36.979927 317 +120.414751 36.993427 259 +120.414751 37.011427 519 +120.414751 37.024927 219 +120.414751 37.047427 294 +120.414751 37.078927 23 +120.414751 37.083427 511 +120.414751 37.101427 4 +120.414751 37.105927 452 +120.420251 36.057427 2290 +120.420251 36.061927 9315 +120.420251 36.066427 412 +120.420251 36.070927 963 +120.420251 36.075427 421 +120.420251 36.093427 3611 +120.420251 36.097927 7139 +120.420251 36.102427 1069 +120.420251 36.106927 2870 +120.420251 36.111427 1026 +120.420251 36.115927 433 +120.420251 36.120427 1647 +120.420251 36.124927 1668 +120.420251 36.138427 1617 +120.420251 36.142927 1946 +120.420251 36.147427 913 +120.420251 36.151927 3238 +120.420251 36.156427 1758 +120.420251 36.160927 6321 +120.420251 36.165427 1476 +120.420251 36.169927 3536 +120.420251 36.174427 3969 +120.420251 36.178927 951 +120.420251 36.183427 843 +120.420251 36.192427 1345 +120.420251 36.219427 2127 +120.420251 36.223927 191 +120.420251 36.228427 1253 +120.420251 36.232927 1085 +120.420251 36.237427 3370 +120.420251 36.241927 3 +120.420251 36.250927 126 +120.420251 36.255427 96 +120.420251 36.264427 1 +120.420251 36.268927 2 +120.420251 36.273427 343 +120.420251 36.282427 4 +120.420251 36.286927 378 +120.420251 36.295927 2658 +120.420251 36.300427 1818 +120.420251 36.304927 1155 +120.420251 36.313927 5 +120.420251 36.322927 1 +120.420251 36.331927 4 +120.420251 36.336427 203 +120.420251 36.349927 140 +120.420251 36.358927 3044 +120.420251 36.363427 675 +120.420251 36.367927 36 +120.420251 36.372427 20 +120.420251 36.376927 192 +120.420251 36.381427 289 +120.420251 36.385927 2069 +120.420251 36.390427 19154 +120.420251 36.394927 449 +120.420251 36.399427 1082 +120.420251 36.403927 4 +120.420251 36.412927 3 +120.420251 36.426427 3 +120.420251 36.444427 9 +120.420251 36.457927 40 +120.420251 36.489427 803 +120.420251 36.493927 1038 +120.420251 36.498427 565 +120.420251 36.511927 3 +120.420251 36.516427 866 +120.420251 36.534427 1624 +120.420251 36.547927 1359 +120.420251 36.552427 34 +120.420251 36.579427 244 +120.420251 36.664927 200 +120.420251 36.673927 4 +120.420251 36.714427 2 +120.420251 36.727927 4 +120.420251 36.732427 4 +120.420251 36.754927 264 +120.420251 36.790927 774 +120.420251 36.804427 1219 +120.420251 36.817927 4 +120.420251 36.822427 4 +120.420251 36.826927 28 +120.420251 36.907927 5 +120.420251 36.930427 273 +120.420251 36.975427 2 +120.420251 36.984427 692 +120.420251 36.988927 329 +120.420251 37.020427 585 +120.420251 37.047427 2 +120.420251 37.060927 378 +120.420251 37.087927 829 +120.420251 37.101427 424 +120.425751 36.057427 45 +120.425751 36.061927 1114 +120.425751 36.066427 2437 +120.425751 36.070927 4021 +120.425751 36.075427 730 +120.425751 36.093427 1774 +120.425751 36.097927 2751 +120.425751 36.102427 1509 +120.425751 36.106927 605 +120.425751 36.111427 3308 +120.425751 36.115927 2883 +120.425751 36.120427 3364 +120.425751 36.124927 17 +120.425751 36.129427 81 +120.425751 36.133927 3525 +120.425751 36.138427 20 +120.425751 36.142927 2583 +120.425751 36.147427 2954 +120.425751 36.151927 2924 +120.425751 36.156427 2349 +120.425751 36.160927 5129 +120.425751 36.165427 8050 +120.425751 36.169927 2072 +120.425751 36.174427 797 +120.425751 36.178927 6915 +120.425751 36.183427 6187 +120.425751 36.187927 748 +120.425751 36.192427 1123 +120.425751 36.196927 3 +120.425751 36.205927 178 +120.425751 36.210427 25 +120.425751 36.223927 11 +120.425751 36.228427 3563 +120.425751 36.232927 253 +120.425751 36.237427 465 +120.425751 36.241927 191 +120.425751 36.246427 5 +120.425751 36.273427 675 +120.425751 36.277927 517 +120.425751 36.282427 532 +120.425751 36.295927 112 +120.425751 36.300427 20 +120.425751 36.304927 51 +120.425751 36.309427 668 +120.425751 36.318427 424 +120.425751 36.322927 32 +120.425751 36.327427 5708 +120.425751 36.336427 2094 +120.425751 36.345427 101 +120.425751 36.349927 283 +120.425751 36.358927 68 +120.425751 36.363427 4 +120.425751 36.367927 595 +120.425751 36.372427 4671 +120.425751 36.376927 3616 +120.425751 36.381427 909 +120.425751 36.385927 5708 +120.425751 36.390427 2371 +120.425751 36.394927 1343 +120.425751 36.399427 78 +120.425751 36.403927 465 +120.425751 36.408427 6 +120.425751 36.412927 5 +120.425751 36.417427 24 +120.425751 36.426427 8 +120.425751 36.430927 27 +120.425751 36.435427 164 +120.425751 36.561427 1 +120.425751 36.615427 282 +120.425751 36.619927 1 +120.425751 36.628927 9 +120.425751 36.633427 303 +120.425751 36.646927 5 +120.425751 36.673927 762 +120.425751 36.687427 1126 +120.425751 36.691927 1031 +120.425751 36.696427 1040 +120.425751 36.709927 15 +120.425751 36.714427 1250 +120.425751 36.727927 305 +120.425751 36.732427 350 +120.425751 36.745927 306 +120.425751 36.790927 5 +120.425751 36.804427 850 +120.425751 36.853927 3 +120.425751 36.858427 4 +120.425751 36.867427 378 +120.425751 36.871927 9 +120.425751 36.903427 64 +120.425751 36.930427 4 +120.425751 36.934927 744 +120.425751 36.984427 267 +120.425751 36.988927 216 +120.425751 36.993427 458 +120.425751 36.997927 692 +120.425751 37.002427 196 +120.425751 37.006927 523 +120.425751 37.020427 27 +120.431251 36.061927 51 +120.431251 36.066427 144 +120.431251 36.070927 1091 +120.431251 36.075427 2521 +120.431251 36.097927 4220 +120.431251 36.102427 914 +120.431251 36.106927 3469 +120.431251 36.111427 2121 +120.431251 36.115927 2859 +120.431251 36.120427 241 +120.431251 36.124927 264 +120.431251 36.129427 1305 +120.431251 36.133927 13 +120.431251 36.142927 454 +120.431251 36.147427 3706 +120.431251 36.151927 2211 +120.431251 36.156427 1164 +120.431251 36.160927 3512 +120.431251 36.165427 3033 +120.431251 36.169927 527 +120.431251 36.174427 3419 +120.431251 36.178927 3298 +120.431251 36.183427 2504 +120.431251 36.187927 35 +120.431251 36.196927 943 +120.431251 36.201427 6 +120.431251 36.205927 579 +120.431251 36.210427 109 +120.431251 36.214927 1 +120.431251 36.228427 13 +120.431251 36.232927 25 +120.431251 36.237427 1525 +120.431251 36.259927 1082 +120.431251 36.264427 10 +120.431251 36.268927 36 +120.431251 36.273427 1448 +120.431251 36.277927 1960 +120.431251 36.300427 1313 +120.431251 36.304927 981 +120.431251 36.309427 1572 +120.431251 36.313927 82 +120.431251 36.318427 74 +120.431251 36.322927 13 +120.431251 36.327427 66 +120.431251 36.336427 16 +120.431251 36.340927 120 +120.431251 36.345427 113 +120.431251 36.349927 1702 +120.431251 36.363427 1 +120.431251 36.367927 830 +120.431251 36.372427 1487 +120.431251 36.376927 1218 +120.431251 36.381427 1266 +120.431251 36.385927 5908 +120.431251 36.390427 2422 +120.431251 36.394927 563 +120.431251 36.399427 1835 +120.431251 36.403927 128 +120.431251 36.408427 3257 +120.431251 36.412927 5 +120.431251 36.417427 181 +120.431251 36.421927 133 +120.431251 36.426427 50 +120.431251 36.430927 89 +120.431251 36.637927 60 +120.431251 36.646927 4 +120.431251 36.651427 4 +120.431251 36.669427 6 +120.431251 36.673927 773 +120.431251 36.687427 722 +120.431251 36.691927 1388 +120.431251 36.714427 4 +120.431251 36.736927 124 +120.431251 36.741427 242 +120.431251 36.750427 3 +120.431251 36.754927 303 +120.431251 36.772927 4 +120.431251 36.777427 1429 +120.431251 36.790927 869 +120.431251 36.880927 12 +120.431251 36.997927 351 +120.431251 37.002427 408 +120.431251 37.006927 3 +120.431251 37.020427 749 +120.431251 37.024927 715 +120.431251 37.047427 512 +120.431251 37.051927 107 +120.431251 37.056427 5 +120.431251 37.065427 4 +120.431251 37.069927 274 +120.436751 36.061927 13 +120.436751 36.066427 180 +120.436751 36.070927 3017 +120.436751 36.075427 1105 +120.436751 36.079927 243 +120.436751 36.097927 1256 +120.436751 36.102427 1074 +120.436751 36.106927 3342 +120.436751 36.111427 3185 +120.436751 36.115927 1751 +120.436751 36.120427 4 +120.436751 36.124927 2260 +120.436751 36.129427 84 +120.436751 36.133927 15 +120.436751 36.142927 3828 +120.436751 36.147427 1667 +120.436751 36.151927 1169 +120.436751 36.156427 704 +120.436751 36.160927 2691 +120.436751 36.165427 24 +120.436751 36.169927 6 +120.436751 36.174427 1088 +120.436751 36.178927 889 +120.436751 36.183427 843 +120.436751 36.187927 388 +120.436751 36.210427 628 +120.436751 36.214927 9 +120.436751 36.219427 1571 +120.436751 36.228427 118 +120.436751 36.232927 1527 +120.436751 36.237427 1379 +120.436751 36.241927 5 +120.436751 36.259927 1432 +120.436751 36.264427 9 +120.436751 36.268927 13 +120.436751 36.273427 457 +120.436751 36.277927 1471 +120.436751 36.282427 24 +120.436751 36.291427 5 +120.436751 36.295927 2 +120.436751 36.300427 206 +120.436751 36.304927 1423 +120.436751 36.309427 1693 +120.436751 36.313927 19 +120.436751 36.322927 4 +120.436751 36.327427 2 +120.436751 36.340927 1652 +120.436751 36.345427 33 +120.436751 36.349927 3098 +120.436751 36.354427 41 +120.436751 36.358927 1992 +120.436751 36.363427 697 +120.436751 36.367927 921 +120.436751 36.372427 1850 +120.436751 36.376927 1844 +120.436751 36.381427 3772 +120.436751 36.385927 2714 +120.436751 36.390427 3453 +120.436751 36.394927 1269 +120.436751 36.399427 1429 +120.436751 36.403927 4028 +120.436751 36.408427 1616 +120.436751 36.412927 933 +120.436751 36.417427 68 +120.436751 36.426427 243 +120.436751 36.430927 214 +120.436751 36.525427 909 +120.436751 36.552427 421 +120.436751 36.556927 658 +120.436751 36.597427 1267 +120.436751 36.624427 17 +120.436751 36.628927 786 +120.436751 36.655927 186 +120.436751 36.660427 4 +120.436751 36.673927 4 +120.436751 36.691927 1180 +120.436751 36.759427 347 +120.436751 36.768427 2 +120.436751 36.772927 10 +120.436751 36.777427 1775 +120.436751 36.781927 11 +120.436751 36.804427 1402 +120.436751 36.844927 1 +120.436751 36.867427 434 +120.436751 36.925927 961 +120.436751 36.930427 11 +120.436751 37.029427 857 +120.436751 37.033927 1 +120.436751 37.038427 1108 +120.436751 37.060927 799 +120.436751 37.065427 289 +120.436751 37.087927 477 +120.436751 37.105927 4 +120.436751 37.110427 805 +120.442251 36.066427 3 +120.442251 36.070927 727 +120.442251 36.075427 2120 +120.442251 36.079927 1168 +120.442251 36.084427 27 +120.442251 36.102427 79 +120.442251 36.106927 2008 +120.442251 36.111427 2086 +120.442251 36.120427 1630 +120.442251 36.129427 19 +120.442251 36.133927 34 +120.442251 36.147427 233 +120.442251 36.151927 424 +120.442251 36.156427 40 +120.442251 36.160927 4209 +120.442251 36.165427 2511 +120.442251 36.169927 50 +120.442251 36.174427 1204 +120.442251 36.178927 370 +120.442251 36.183427 23 +120.442251 36.210427 53 +120.442251 36.214927 724 +120.442251 36.223927 2102 +120.442251 36.228427 175 +120.442251 36.232927 2122 +120.442251 36.237427 22 +120.442251 36.241927 5 +120.442251 36.255427 208 +120.442251 36.259927 1429 +120.442251 36.273427 146 +120.442251 36.277927 30 +120.442251 36.286927 5 +120.442251 36.291427 8 +120.442251 36.295927 4 +120.442251 36.304927 101 +120.442251 36.309427 880 +120.442251 36.336427 1 +120.442251 36.349927 271 +120.442251 36.354427 498 +120.442251 36.358927 1825 +120.442251 36.363427 215 +120.442251 36.367927 3971 +120.442251 36.372427 132 +120.442251 36.376927 1121 +120.442251 36.381427 7282 +120.442251 36.385927 7450 +120.442251 36.390427 3582 +120.442251 36.394927 2087 +120.442251 36.399427 4281 +120.442251 36.403927 5355 +120.442251 36.408427 1620 +120.442251 36.412927 1075 +120.442251 36.417427 223 +120.442251 36.421927 829 +120.442251 36.426427 250 +120.442251 36.462427 13 +120.442251 36.475927 41 +120.442251 36.489427 12 +120.442251 36.498427 698 +120.442251 36.507427 1 +120.442251 36.525427 4 +120.442251 36.538927 19 +120.442251 36.574927 576 +120.442251 36.588427 13 +120.442251 36.592927 1041 +120.442251 36.615427 6 +120.442251 36.624427 13 +120.442251 36.651427 535 +120.442251 36.673927 5 +120.442251 36.723427 410 +120.442251 36.736927 407 +120.442251 36.781927 1677 +120.442251 36.786427 4 +120.442251 36.817927 32 +120.442251 36.831427 4 +120.442251 36.835927 6 +120.442251 36.840427 356 +120.442251 36.844927 14 +120.442251 36.849427 5 +120.442251 36.876427 507 +120.442251 36.912427 11 +120.442251 36.921427 39 +120.442251 37.060927 402 +120.442251 37.096927 307 +120.447751 36.075427 2202 +120.447751 36.079927 913 +120.447751 36.084427 1218 +120.447751 36.088927 187 +120.447751 36.097927 513 +120.447751 36.102427 91 +120.447751 36.106927 3048 +120.447751 36.111427 211 +120.447751 36.120427 814 +120.447751 36.124927 4 +120.447751 36.129427 54 +120.447751 36.133927 155 +120.447751 36.147427 1 +120.447751 36.156427 186 +120.447751 36.160927 161 +120.447751 36.165427 497 +120.447751 36.169927 1594 +120.447751 36.174427 342 +120.447751 36.178927 173 +120.447751 36.214927 244 +120.447751 36.228427 179 +120.447751 36.232927 4 +120.447751 36.241927 16 +120.447751 36.246427 569 +120.447751 36.250927 20 +120.447751 36.255427 898 +120.447751 36.259927 157 +120.447751 36.273427 757 +120.447751 36.277927 598 +120.447751 36.286927 1758 +120.447751 36.291427 79 +120.447751 36.300427 302 +120.447751 36.309427 21 +120.447751 36.318427 23 +120.447751 36.327427 3 +120.447751 36.345427 6 +120.447751 36.349927 2 +120.447751 36.354427 39 +120.447751 36.358927 54 +120.447751 36.363427 2439 +120.447751 36.367927 8470 +120.447751 36.372427 836 +120.447751 36.376927 1358 +120.447751 36.381427 564 +120.447751 36.385927 632 +120.447751 36.390427 1143 +120.447751 36.394927 1847 +120.447751 36.399427 1286 +120.447751 36.403927 3056 +120.447751 36.408427 364 +120.447751 36.412927 165 +120.447751 36.417427 1314 +120.447751 36.426427 621 +120.447751 36.430927 81 +120.447751 36.448927 10 +120.447751 36.484927 18 +120.447751 36.493927 870 +120.447751 36.529927 19 +120.447751 36.534427 105 +120.447751 36.538927 8 +120.447751 36.565927 245 +120.447751 36.615427 362 +120.447751 36.651427 4 +120.447751 36.660427 668 +120.447751 36.709927 4 +120.447751 36.714427 1035 +120.447751 36.759427 675 +120.447751 36.763927 17 +120.447751 36.790927 9 +120.447751 36.795427 1117 +120.447751 36.813427 9 +120.447751 36.817927 17 +120.447751 36.831427 32 +120.447751 36.835927 29 +120.447751 36.840427 4 +120.447751 36.844927 289 +120.447751 36.849427 18 +120.447751 36.853927 3 +120.447751 36.858427 10 +120.447751 36.880927 3 +120.447751 36.894427 3 +120.447751 36.898927 1599 +120.447751 36.916927 34 +120.447751 36.921427 292 +120.447751 37.069927 8 +120.447751 37.074427 538 +120.447751 37.096927 4 +120.447751 37.105927 93 +120.453251 36.079927 373 +120.453251 36.084427 1390 +120.453251 36.088927 1115 +120.453251 36.093427 1114 +120.453251 36.097927 551 +120.453251 36.102427 802 +120.453251 36.106927 591 +120.453251 36.111427 4138 +120.453251 36.115927 2226 +120.453251 36.120427 192 +120.453251 36.124927 1302 +120.453251 36.129427 1274 +120.453251 36.151927 524 +120.453251 36.156427 431 +120.453251 36.160927 4541 +120.453251 36.165427 1106 +120.453251 36.174427 5 +120.453251 36.178927 1442 +120.453251 36.210427 4 +120.453251 36.214927 190 +120.453251 36.219427 426 +120.453251 36.228427 71 +120.453251 36.232927 2452 +120.453251 36.241927 8 +120.453251 36.246427 9 +120.453251 36.250927 290 +120.453251 36.255427 1451 +120.453251 36.259927 2221 +120.453251 36.264427 100 +120.453251 36.273427 109 +120.453251 36.277927 3033 +120.453251 36.286927 204 +120.453251 36.291427 4 +120.453251 36.313927 1485 +120.453251 36.322927 2181 +120.453251 36.327427 1696 +120.453251 36.349927 8 +120.453251 36.358927 1155 +120.453251 36.363427 57 +120.453251 36.367927 337 +120.453251 36.372427 2442 +120.453251 36.376927 2135 +120.453251 36.381427 1012 +120.453251 36.385927 907 +120.453251 36.390427 823 +120.453251 36.394927 1001 +120.453251 36.399427 1651 +120.453251 36.403927 709 +120.453251 36.408427 35 +120.453251 36.412927 526 +120.453251 36.417427 347 +120.453251 36.421927 3 +120.453251 36.426427 1975 +120.453251 36.430927 21 +120.453251 36.435427 846 +120.453251 36.484927 4 +120.453251 36.493927 25 +120.453251 36.529927 1031 +120.453251 36.534427 3723 +120.453251 36.538927 8 +120.453251 36.543427 1489 +120.453251 36.574927 5 +120.453251 36.579427 534 +120.453251 36.651427 382 +120.453251 36.727927 534 +120.453251 36.741427 246 +120.453251 36.790927 622 +120.453251 36.795427 7 +120.453251 36.822427 3 +120.453251 36.826927 1282 +120.453251 36.849427 4 +120.453251 36.880927 3 +120.453251 37.002427 4 +120.453251 37.074427 5 +120.453251 37.101427 4 +120.458751 36.084427 689 +120.458751 36.088927 1865 +120.458751 36.093427 713 +120.458751 36.097927 2275 +120.458751 36.102427 487 +120.458751 36.106927 3343 +120.458751 36.111427 510 +120.458751 36.115927 2179 +120.458751 36.120427 734 +120.458751 36.124927 19 +120.458751 36.129427 2089 +120.458751 36.133927 63 +120.458751 36.138427 310 +120.458751 36.147427 6 +120.458751 36.156427 1 +120.458751 36.160927 823 +120.458751 36.165427 14 +120.458751 36.169927 207 +120.458751 36.174427 254 +120.458751 36.178927 155 +120.458751 36.187927 23 +120.458751 36.228427 2 +120.458751 36.255427 3580 +120.458751 36.259927 4805 +120.458751 36.277927 1754 +120.458751 36.286927 2640 +120.458751 36.327427 3 +120.458751 36.349927 23 +120.458751 36.358927 52 +120.458751 36.363427 99 +120.458751 36.367927 10 +120.458751 36.372427 4169 +120.458751 36.376927 1276 +120.458751 36.381427 2441 +120.458751 36.385927 1957 +120.458751 36.390427 1158 +120.458751 36.394927 1559 +120.458751 36.399427 1399 +120.458751 36.403927 832 +120.458751 36.408427 1024 +120.458751 36.426427 7 +120.458751 36.430927 315 +120.458751 36.435427 348 +120.458751 36.444427 2 +120.458751 36.448927 161 +120.458751 36.502927 241 +120.458751 36.507427 9 +120.458751 36.529927 41 +120.458751 36.534427 4 +120.458751 36.538927 7 +120.458751 36.579427 995 +120.458751 36.646927 893 +120.458751 36.660427 185 +120.458751 36.705427 4 +120.458751 36.759427 352 +120.458751 36.772927 626 +120.458751 36.790927 8 +120.458751 36.795427 7 +120.458751 36.840427 4 +120.458751 36.858427 6 +120.458751 36.862927 11 +120.458751 36.867427 34 +120.458751 36.871927 6 +120.458751 36.970927 693 +120.458751 36.975427 6 +120.458751 37.002427 167 +120.458751 37.006927 7 +120.458751 37.020427 236 +120.458751 37.042927 548 +120.458751 37.051927 6 +120.458751 37.056427 1240 +120.458751 37.060927 10 +120.458751 37.074427 27 +120.458751 37.101427 459 +120.464251 36.088927 335 +120.464251 36.093427 81 +120.464251 36.097927 317 +120.464251 36.102427 5466 +120.464251 36.106927 2972 +120.464251 36.124927 441 +120.464251 36.129427 1868 +120.464251 36.133927 38 +120.464251 36.138427 101 +120.464251 36.147427 3 +120.464251 36.160927 502 +120.464251 36.165427 1159 +120.464251 36.169927 206 +120.464251 36.174427 14 +120.464251 36.187927 12 +120.464251 36.255427 45 +120.464251 36.259927 239 +120.464251 36.273427 264 +120.464251 36.277927 1159 +120.464251 36.282427 97 +120.464251 36.295927 6 +120.464251 36.300427 31 +120.464251 36.304927 664 +120.464251 36.309427 30 +120.464251 36.313927 4 +120.464251 36.349927 435 +120.464251 36.372427 278 +120.464251 36.376927 545 +120.464251 36.381427 641 +120.464251 36.385927 677 +120.464251 36.390427 1733 +120.464251 36.394927 3126 +120.464251 36.399427 904 +120.464251 36.403927 87 +120.464251 36.408427 1895 +120.464251 36.412927 102 +120.464251 36.417427 971 +120.464251 36.435427 216 +120.464251 36.448927 52 +120.464251 36.453427 353 +120.464251 36.462427 23 +120.464251 36.471427 15 +120.464251 36.480427 12 +120.464251 36.489427 294 +120.464251 36.502927 5 +120.464251 36.507427 942 +120.464251 36.511927 2 +120.464251 36.520927 665 +120.464251 36.529927 9 +120.464251 36.646927 340 +120.464251 36.651427 4 +120.464251 36.660427 7 +120.464251 36.700927 8 +120.464251 36.705427 746 +120.464251 36.768427 355 +120.464251 36.790927 941 +120.464251 36.795427 16 +120.464251 36.799927 1444 +120.464251 36.804427 1 +120.464251 36.840427 54 +120.464251 36.844927 1765 +120.464251 36.849427 9 +120.464251 36.858427 1269 +120.464251 36.862927 4 +120.464251 36.867427 1768 +120.464251 36.871927 3 +120.464251 36.889927 48 +120.464251 36.970927 319 +120.464251 36.993427 8 +120.464251 37.002427 16 +120.464251 37.006927 1468 +120.464251 37.015927 1280 +120.464251 37.033927 547 +120.464251 37.051927 5 +120.464251 37.056427 31 +120.464251 37.074427 4587 +120.464251 37.087927 29 +120.469751 36.093427 344 +120.469751 36.097927 38 +120.469751 36.102427 183 +120.469751 36.106927 224 +120.469751 36.115927 4 +120.469751 36.124927 2 +120.469751 36.129427 1329 +120.469751 36.133927 251 +120.469751 36.138427 902 +120.469751 36.142927 9 +120.469751 36.147427 3 +120.469751 36.160927 178 +120.469751 36.169927 1309 +120.469751 36.174427 75 +120.469751 36.178927 3085 +120.469751 36.183427 33 +120.469751 36.187927 3 +120.469751 36.192427 1 +120.469751 36.264427 4 +120.469751 36.268927 811 +120.469751 36.273427 442 +120.469751 36.277927 17 +120.469751 36.282427 1245 +120.469751 36.286927 990 +120.469751 36.291427 26 +120.469751 36.295927 43 +120.469751 36.300427 1691 +120.469751 36.304927 1655 +120.469751 36.309427 132 +120.469751 36.313927 785 +120.469751 36.327427 3 +120.469751 36.345427 9 +120.469751 36.349927 783 +120.469751 36.367927 935 +120.469751 36.372427 2 +120.469751 36.376927 1492 +120.469751 36.381427 103 +120.469751 36.385927 791 +120.469751 36.390427 4869 +120.469751 36.394927 594 +120.469751 36.399427 2082 +120.469751 36.403927 166 +120.469751 36.408427 250 +120.469751 36.412927 578 +120.469751 36.426427 2 +120.469751 36.435427 26609 +120.469751 36.484927 43 +120.469751 36.489427 89 +120.469751 36.534427 959 +120.469751 36.538927 579 +120.469751 36.574927 571 +120.469751 36.624427 17 +120.469751 36.628927 359 +120.469751 36.660427 467 +120.469751 36.664927 264 +120.469751 36.678427 981 +120.469751 36.714427 1369 +120.469751 36.741427 1167 +120.469751 36.754927 3 +120.469751 36.759427 9 +120.469751 36.799927 2 +120.469751 36.804427 5 +120.469751 36.840427 7 +120.469751 36.844927 17 +120.469751 36.898927 8 +120.469751 36.925927 6 +120.469751 36.952927 7 +120.469751 36.957427 6 +120.469751 36.970927 10 +120.469751 36.975427 1272 +120.469751 36.993427 1058 +120.469751 36.997927 536 +120.469751 37.056427 935 +120.469751 37.065427 4 +120.469751 37.074427 160 +120.469751 37.087927 744 +120.469751 37.110427 1094 +120.475251 36.093427 11 +120.475251 36.097927 1037 +120.475251 36.102427 1666 +120.475251 36.106927 2205 +120.475251 36.111427 2485 +120.475251 36.115927 9 +120.475251 36.124927 5 +120.475251 36.129427 27 +120.475251 36.133927 328 +120.475251 36.138427 5944 +120.475251 36.142927 132 +120.475251 36.160927 618 +120.475251 36.165427 1016 +120.475251 36.169927 2721 +120.475251 36.174427 266 +120.475251 36.178927 65 +120.475251 36.183427 896 +120.475251 36.187927 187 +120.475251 36.192427 25 +120.475251 36.196927 1018 +120.475251 36.201427 127 +120.475251 36.264427 2 +120.475251 36.268927 1309 +120.475251 36.282427 756 +120.475251 36.286927 1092 +120.475251 36.291427 1420 +120.475251 36.295927 144 +120.475251 36.300427 50 +120.475251 36.304927 3993 +120.475251 36.309427 2689 +120.475251 36.318427 1 +120.475251 36.327427 81 +120.475251 36.331927 1850 +120.475251 36.345427 441 +120.475251 36.358927 628 +120.475251 36.363427 815 +120.475251 36.372427 846 +120.475251 36.376927 484 +120.475251 36.381427 650 +120.475251 36.385927 1331 +120.475251 36.390427 2447 +120.475251 36.394927 1994 +120.475251 36.399427 328 +120.475251 36.403927 1503 +120.475251 36.408427 354 +120.475251 36.412927 233 +120.475251 36.417427 9 +120.475251 36.421927 8 +120.475251 36.426427 99 +120.475251 36.430927 13 +120.475251 36.435427 827 +120.475251 36.489427 25 +120.475251 36.516427 4 +120.475251 36.534427 1677 +120.475251 36.538927 4 +120.475251 36.556927 7 +120.475251 36.561427 1109 +120.475251 36.588427 14 +120.475251 36.597427 4 +120.475251 36.619927 2 +120.475251 36.624427 1163 +120.475251 36.628927 30 +120.475251 36.660427 2 +120.475251 36.678427 8 +120.475251 36.759427 5 +120.475251 36.804427 4 +120.475251 36.808927 55 +120.475251 36.880927 9 +120.475251 36.885427 4 +120.475251 36.898927 317 +120.475251 36.903427 7 +120.475251 36.921427 53 +120.475251 36.925927 18 +120.475251 36.984427 391 +120.475251 36.997927 14 +120.475251 37.015927 10 +120.475251 37.038427 722 +120.475251 37.060927 37 +120.480751 36.093427 165 +120.480751 36.097927 766 +120.480751 36.102427 1570 +120.480751 36.106927 1101 +120.480751 36.111427 107 +120.480751 36.124927 253 +120.480751 36.133927 68 +120.480751 36.138427 465 +120.480751 36.142927 43 +120.480751 36.169927 19 +120.480751 36.174427 152 +120.480751 36.178927 2237 +120.480751 36.183427 15 +120.480751 36.187927 7 +120.480751 36.268927 65 +120.480751 36.291427 7 +120.480751 36.300427 451 +120.480751 36.304927 2313 +120.480751 36.309427 1149 +120.480751 36.313927 12 +120.480751 36.327427 98 +120.480751 36.336427 2 +120.480751 36.340927 1095 +120.480751 36.345427 14 +120.480751 36.349927 39 +120.480751 36.358927 21 +120.480751 36.367927 4 +120.480751 36.372427 261 +120.480751 36.376927 42 +120.480751 36.381427 748 +120.480751 36.385927 26 +120.480751 36.390427 3164 +120.480751 36.394927 1770 +120.480751 36.399427 388 +120.480751 36.403927 511 +120.480751 36.408427 198 +120.480751 36.412927 57 +120.480751 36.417427 39 +120.480751 36.435427 81 +120.480751 36.439927 490 +120.480751 36.484927 28 +120.480751 36.489427 2 +120.480751 36.511927 456 +120.480751 36.525427 590 +120.480751 36.556927 3 +120.480751 36.592927 991 +120.480751 36.624427 1387 +120.480751 36.628927 8 +120.480751 36.678427 835 +120.480751 36.714427 311 +120.480751 36.732427 7 +120.480751 36.772927 926 +120.480751 36.808927 1686 +120.480751 36.813427 2 +120.480751 36.822427 518 +120.480751 36.858427 1110 +120.480751 36.862927 16 +120.480751 36.867427 36 +120.480751 36.871927 10 +120.480751 36.880927 1181 +120.480751 36.885427 6 +120.480751 36.903427 6 +120.480751 36.916927 8 +120.480751 36.925927 14828 +120.480751 36.939427 589 +120.480751 36.984427 5 +120.480751 37.047427 776 +120.480751 37.078927 3 +120.480751 37.114927 4 +120.486251 36.093427 234 +120.486251 36.097927 309 +120.486251 36.102427 440 +120.486251 36.115927 3481 +120.486251 36.138427 8 +120.486251 36.142927 3486 +120.486251 36.147427 51 +120.486251 36.151927 324 +120.486251 36.169927 255 +120.486251 36.174427 1443 +120.486251 36.178927 1189 +120.486251 36.183427 702 +120.486251 36.187927 1214 +120.486251 36.192427 251 +120.486251 36.259927 4 +120.486251 36.277927 13 +120.486251 36.282427 3 +120.486251 36.286927 600 +120.486251 36.291427 3443 +120.486251 36.304927 378 +120.486251 36.309427 2164 +120.486251 36.336427 18 +120.486251 36.340927 910 +120.486251 36.345427 1520 +120.486251 36.349927 840 +120.486251 36.372427 1400 +120.486251 36.376927 132 +120.486251 36.381427 229 +120.486251 36.385927 2257 +120.486251 36.390427 1098 +120.486251 36.394927 1989 +120.486251 36.399427 3093 +120.486251 36.403927 64 +120.486251 36.408427 803 +120.486251 36.417427 836 +120.486251 36.421927 9 +120.486251 36.435427 23 +120.486251 36.439927 22 +120.486251 36.489427 15 +120.486251 36.498427 8 +120.486251 36.502927 838 +120.486251 36.525427 6 +120.486251 36.529927 887 +120.486251 36.534427 4 +120.486251 36.574927 380 +120.486251 36.597427 628 +120.486251 36.642427 565 +120.486251 36.718927 1219 +120.486251 36.723427 6 +120.486251 36.741427 6 +120.486251 36.745927 5 +120.486251 36.763927 13 +120.486251 36.790927 11 +120.486251 36.817927 10 +120.486251 36.831427 19 +120.486251 36.835927 881 +120.486251 36.853927 4 +120.486251 36.858427 19 +120.486251 36.862927 1150 +120.486251 36.867427 2 +120.486251 36.912427 13 +120.486251 36.916927 10 +120.486251 36.921427 16 +120.486251 36.952927 23 +120.486251 36.966427 118 +120.486251 36.979927 440 +120.486251 37.011427 4 +120.486251 37.069927 33 +120.486251 37.074427 1198 +120.486251 37.078927 606 +120.486251 37.105927 649 +120.491751 36.093427 385 +120.491751 36.097927 799 +120.491751 36.142927 35 +120.491751 36.165427 134 +120.491751 36.178927 420 +120.491751 36.183427 123 +120.491751 36.273427 258 +120.491751 36.295927 222 +120.491751 36.300427 321 +120.491751 36.309427 29 +120.491751 36.313927 1552 +120.491751 36.318427 12 +120.491751 36.331927 798 +120.491751 36.340927 23 +120.491751 36.345427 14 +120.491751 36.354427 6 +120.491751 36.358927 22 +120.491751 36.372427 6 +120.491751 36.376927 4 +120.491751 36.385927 315 +120.491751 36.390427 2500 +120.491751 36.394927 1744 +120.491751 36.399427 1305 +120.491751 36.408427 430 +120.491751 36.412927 89 +120.491751 36.430927 8 +120.491751 36.453427 988 +120.491751 36.457927 18 +120.491751 36.462427 19 +120.491751 36.520927 556 +120.491751 36.561427 945 +120.491751 36.664927 445 +120.491751 36.709927 533 +120.491751 36.718927 20 +120.491751 36.723427 9 +120.491751 36.741427 1325 +120.491751 36.745927 2 +120.491751 36.795427 55 +120.491751 36.817927 2286 +120.491751 36.831427 9 +120.491751 36.835927 700 +120.491751 36.840427 112 +120.491751 36.844927 41 +120.491751 36.876427 6 +120.491751 36.880927 1920 +120.491751 36.894427 238 +120.491751 36.912427 3 +120.491751 36.943927 59 +120.491751 37.011427 436 +120.491751 37.024927 126 +120.491751 37.092427 938 +120.497251 36.093427 4785 +120.497251 36.097927 56 +120.497251 36.129427 615 +120.497251 36.138427 199 +120.497251 36.142927 2 +120.497251 36.151927 25 +120.497251 36.165427 1 +120.497251 36.174427 28 +120.497251 36.187927 2258 +120.497251 36.300427 4 +120.497251 36.309427 684 +120.497251 36.327427 518 +120.497251 36.331927 1432 +120.497251 36.358927 1306 +120.497251 36.363427 28 +120.497251 36.367927 554 +120.497251 36.372427 37 +120.497251 36.376927 4 +120.497251 36.381427 2 +120.497251 36.385927 39 +120.497251 36.390427 279 +120.497251 36.394927 701 +120.497251 36.399427 9 +120.497251 36.403927 6 +120.497251 36.412927 6 +120.497251 36.421927 4 +120.497251 36.430927 1164 +120.497251 36.448927 182 +120.497251 36.457927 8 +120.497251 36.471427 5 +120.497251 36.507427 14 +120.497251 36.511927 454 +120.497251 36.520927 3 +120.497251 36.529927 4 +120.497251 36.606427 257 +120.497251 36.610927 6 +120.497251 36.732427 5 +120.497251 36.763927 3 +120.497251 36.822427 4 +120.497251 36.826927 11 +120.497251 36.831427 3 +120.497251 36.840427 2064 +120.497251 36.853927 1091 +120.497251 36.858427 576 +120.497251 36.867427 2094 +120.497251 36.871927 2 +120.497251 36.912427 11 +120.497251 36.943927 168 +120.497251 36.966427 6 +120.497251 36.984427 102 +120.497251 37.002427 580 +120.497251 37.015927 488 +120.497251 37.029427 3 +120.497251 37.042927 435 +120.497251 37.047427 420 +120.497251 37.056427 1 +120.497251 37.069927 3 +120.497251 37.114927 427 +120.502751 36.111427 12 +120.502751 36.151927 1536 +120.502751 36.160927 258 +120.502751 36.165427 91 +120.502751 36.174427 49 +120.502751 36.192427 277 +120.502751 36.196927 9 +120.502751 36.201427 10 +120.502751 36.223927 11 +120.502751 36.277927 949 +120.502751 36.300427 484 +120.502751 36.309427 12 +120.502751 36.313927 11 +120.502751 36.327427 8 +120.502751 36.358927 35 +120.502751 36.367927 6 +120.502751 36.372427 71 +120.502751 36.376927 2303 +120.502751 36.381427 2 +120.502751 36.385927 192 +120.502751 36.390427 1157 +120.502751 36.394927 474 +120.502751 36.399427 363 +120.502751 36.403927 10 +120.502751 36.408427 2120 +120.502751 36.412927 464 +120.502751 36.417427 33 +120.502751 36.426427 4 +120.502751 36.430927 834 +120.502751 36.444427 3 +120.502751 36.471427 3 +120.502751 36.484927 7 +120.502751 36.507427 698 +120.502751 36.547927 655 +120.502751 36.552427 10 +120.502751 36.610927 1158 +120.502751 36.642427 793 +120.502751 36.754927 13 +120.502751 36.763927 29 +120.502751 36.808927 226 +120.502751 36.813427 34 +120.502751 36.826927 5 +120.502751 36.831427 6 +120.502751 36.840427 9 +120.502751 36.844927 4 +120.502751 36.853927 796 +120.502751 36.858427 2411 +120.502751 36.862927 59 +120.502751 36.867427 214 +120.502751 36.880927 1 +120.502751 36.885427 39 +120.502751 36.894427 42 +120.502751 36.903427 1134 +120.502751 36.921427 2542 +120.502751 36.925927 30 +120.502751 36.979927 333 +120.502751 37.024927 382 +120.502751 37.042927 406 +120.502751 37.051927 581 +120.502751 37.069927 943 +120.502751 37.105927 714 +120.502751 37.123927 54 +120.502751 37.128427 334 +120.508251 36.093427 59 +120.508251 36.129427 1734 +120.508251 36.156427 20 +120.508251 36.160927 1503 +120.508251 36.165427 2291 +120.508251 36.174427 2600 +120.508251 36.178927 39 +120.508251 36.183427 471 +120.508251 36.187927 6 +120.508251 36.192427 338 +120.508251 36.219427 1001 +120.508251 36.228427 3 +120.508251 36.232927 6 +120.508251 36.300427 946 +120.508251 36.304927 378 +120.508251 36.309427 426 +120.508251 36.313927 186 +120.508251 36.318427 795 +120.508251 36.349927 768 +120.508251 36.358927 1127 +120.508251 36.363427 173 +120.508251 36.367927 12 +120.508251 36.372427 22 +120.508251 36.381427 292 +120.508251 36.385927 996 +120.508251 36.399427 47 +120.508251 36.408427 277 +120.508251 36.412927 47 +120.508251 36.417427 13 +120.508251 36.421927 12 +120.508251 36.426427 7 +120.508251 36.430927 4 +120.508251 36.448927 4 +120.508251 36.466927 12 +120.508251 36.471427 1383 +120.508251 36.529927 9 +120.508251 36.552427 885 +120.508251 36.574927 628 +120.508251 36.579427 605 +120.508251 36.606427 336 +120.508251 36.610927 744 +120.508251 36.646927 2142 +120.508251 36.705427 751 +120.508251 36.736927 6 +120.508251 36.754927 1703 +120.508251 36.759427 4 +120.508251 36.777427 14 +120.508251 36.790927 18 +120.508251 36.799927 46 +120.508251 36.804427 198 +120.508251 36.808927 3059 +120.508251 36.813427 633 +120.508251 36.849427 65 +120.508251 36.853927 1134 +120.508251 36.858427 2463 +120.508251 36.862927 490 +120.508251 36.867427 2325 +120.508251 36.871927 211 +120.508251 36.876427 254 +120.508251 36.880927 1234 +120.508251 36.885427 1919 +120.508251 36.889927 9 +120.508251 36.894427 196 +120.508251 36.903427 1528 +120.508251 36.921427 5 +120.508251 36.934927 15 +120.508251 36.961927 271 +120.508251 36.970927 387 +120.508251 36.993427 13 +120.508251 36.997927 882 +120.508251 37.006927 606 +120.508251 37.047427 300 +120.508251 37.069927 1093 +120.508251 37.074427 8 +120.508251 37.114927 106 +120.508251 37.119427 4 +120.508251 37.123927 8 +120.508251 37.128427 25 +120.508251 37.132927 258 +120.513751 36.093427 71 +120.513751 36.097927 62 +120.513751 36.106927 1761 +120.513751 36.129427 4 +120.513751 36.160927 1959 +120.513751 36.178927 50 +120.513751 36.187927 25 +120.513751 36.192427 3 +120.513751 36.223927 737 +120.513751 36.232927 514 +120.513751 36.255427 673 +120.513751 36.286927 760 +120.513751 36.309427 3236 +120.513751 36.313927 453 +120.513751 36.318427 77 +120.513751 36.322927 514 +120.513751 36.331927 13 +120.513751 36.336427 387 +120.513751 36.345427 893 +120.513751 36.349927 1263 +120.513751 36.354427 4 +120.513751 36.358927 61 +120.513751 36.363427 27 +120.513751 36.367927 4 +120.513751 36.372427 4 +120.513751 36.376927 17 +120.513751 36.381427 96 +120.513751 36.385927 2369 +120.513751 36.390427 65 +120.513751 36.394927 16 +120.513751 36.412927 34 +120.513751 36.417427 3286 +120.513751 36.421927 1023 +120.513751 36.426427 32 +120.513751 36.448927 1262 +120.513751 36.471427 7 +120.513751 36.475927 713 +120.513751 36.493927 5 +120.513751 36.498427 1108 +120.513751 36.502927 4 +120.513751 36.516427 348 +120.513751 36.529927 1512 +120.513751 36.534427 1747 +120.513751 36.583927 11 +120.513751 36.588427 2414 +120.513751 36.606427 923 +120.513751 36.660427 323 +120.513751 36.673927 1974 +120.513751 36.714427 627 +120.513751 36.727927 3 +120.513751 36.736927 1162 +120.513751 36.741427 6 +120.513751 36.754927 11 +120.513751 36.786427 36 +120.513751 36.790927 2299 +120.513751 36.795427 5 +120.513751 36.804427 19 +120.513751 36.808927 3071 +120.513751 36.813427 10337 +120.513751 36.817927 352 +120.513751 36.826927 4 +120.513751 36.831427 12 +120.513751 36.835927 130 +120.513751 36.840427 688 +120.513751 36.844927 1148 +120.513751 36.849427 429 +120.513751 36.853927 10773 +120.513751 36.858427 2482 +120.513751 36.862927 3086 +120.513751 36.867427 1121 +120.513751 36.871927 2585 +120.513751 36.876427 1013 +120.513751 36.880927 200 +120.513751 36.885427 1188 +120.513751 36.889927 390 +120.513751 36.894427 366 +120.513751 36.903427 5 +120.513751 36.952927 242 +120.513751 36.966427 5 +120.513751 36.984427 8 +120.513751 36.988927 947 +120.513751 37.006927 3 +120.513751 37.011427 1 +120.513751 37.020427 273 +120.513751 37.033927 313 +120.513751 37.038427 114 +120.513751 37.051927 963 +120.513751 37.087927 719 +120.513751 37.114927 1129 +120.513751 37.119427 378 +120.513751 37.141927 455 +120.519251 36.097927 262 +120.519251 36.102427 119 +120.519251 36.106927 318 +120.519251 36.129427 1154 +120.519251 36.133927 2 +120.519251 36.138427 1018 +120.519251 36.142927 81 +120.519251 36.178927 2167 +120.519251 36.183427 3 +120.519251 36.187927 1834 +120.519251 36.192427 8 +120.519251 36.223927 774 +120.519251 36.228427 377 +120.519251 36.232927 439 +120.519251 36.237427 469 +120.519251 36.309427 130 +120.519251 36.313927 1718 +120.519251 36.318427 1754 +120.519251 36.322927 194 +120.519251 36.340927 2 +120.519251 36.345427 821 +120.519251 36.349927 1074 +120.519251 36.367927 2188 +120.519251 36.372427 3 +120.519251 36.376927 925 +120.519251 36.381427 45 +120.519251 36.385927 13464 +120.519251 36.390427 8 +120.519251 36.394927 11 +120.519251 36.412927 19 +120.519251 36.421927 4 +120.519251 36.448927 749 +120.519251 36.453427 1061 +120.519251 36.457927 8 +120.519251 36.466927 330 +120.519251 36.480427 582 +120.519251 36.529927 1368 +120.519251 36.588427 2594 +120.519251 36.628927 718 +120.519251 36.669427 7 +120.519251 36.673927 3211 +120.519251 36.678427 56 +120.519251 36.714427 899 +120.519251 36.723427 19 +120.519251 36.727927 1680 +120.519251 36.736927 6 +120.519251 36.754927 908 +120.519251 36.759427 4 +120.519251 36.772927 5 +120.519251 36.777427 8 +120.519251 36.781927 2 +120.519251 36.790927 1041 +120.519251 36.795427 6 +120.519251 36.799927 4 +120.519251 36.808927 14 +120.519251 36.813427 105 +120.519251 36.826927 421 +120.519251 36.831427 1809 +120.519251 36.835927 12 +120.519251 36.840427 54 +120.519251 36.844927 2291 +120.519251 36.849427 929 +120.519251 36.853927 2021 +120.519251 36.858427 2485 +120.519251 36.862927 1959 +120.519251 36.867427 2308 +120.519251 36.871927 3149 +120.519251 36.876427 161 +120.519251 36.880927 982 +120.519251 36.885427 1280 +120.519251 36.889927 526 +120.519251 36.894427 177 +120.519251 36.898927 552 +120.519251 36.903427 167 +120.519251 36.975427 125 +120.519251 36.984427 6 +120.519251 37.015927 292 +120.519251 37.024927 305 +120.519251 37.033927 16 +120.519251 37.042927 77 +120.519251 37.087927 15 +120.519251 37.092427 557 +120.524751 36.097927 2005 +120.524751 36.102427 2641 +120.524751 36.106927 1911 +120.524751 36.120427 391 +120.524751 36.124927 7 +120.524751 36.129427 2504 +120.524751 36.151927 25 +120.524751 36.156427 19 +120.524751 36.183427 5 +120.524751 36.192427 34 +120.524751 36.196927 1450 +120.524751 36.205927 82 +120.524751 36.210427 11 +120.524751 36.219427 49 +120.524751 36.223927 629 +120.524751 36.232927 52 +120.524751 36.237427 32 +120.524751 36.268927 1 +120.524751 36.309427 22 +120.524751 36.313927 30 +120.524751 36.318427 99 +120.524751 36.322927 1203 +120.524751 36.345427 4 +120.524751 36.349927 3 +120.524751 36.381427 75 +120.524751 36.385927 168 +120.524751 36.390427 531 +120.524751 36.444427 854 +120.524751 36.448927 351 +120.524751 36.453427 2943 +120.524751 36.457927 810 +120.524751 36.462427 17 +120.524751 36.489427 1405 +120.524751 36.516427 10 +120.524751 36.520927 3 +120.524751 36.574927 36 +120.524751 36.588427 26 +120.524751 36.592927 21 +120.524751 36.624427 8 +120.524751 36.628927 3 +120.524751 36.664927 689 +120.524751 36.669427 575 +120.524751 36.673927 4 +120.524751 36.678427 8 +120.524751 36.714427 493 +120.524751 36.736927 1274 +120.524751 36.741427 6 +120.524751 36.745927 830 +120.524751 36.750427 6 +120.524751 36.772927 560 +120.524751 36.786427 3 +120.524751 36.795427 80 +120.524751 36.799927 29 +120.524751 36.804427 4 +120.524751 36.808927 316 +120.524751 36.813427 431 +120.524751 36.826927 1241 +120.524751 36.831427 17 +120.524751 36.835927 645 +120.524751 36.840427 3172 +120.524751 36.844927 1800 +120.524751 36.849427 990 +120.524751 36.853927 1442 +120.524751 36.858427 681 +120.524751 36.862927 2077 +120.524751 36.867427 658 +120.524751 36.871927 527 +120.524751 36.876427 247 +120.524751 36.880927 1379 +120.524751 36.889927 988 +120.524751 36.984427 3 +120.524751 36.988927 2263 +120.524751 37.033927 182 +120.524751 37.083427 300 +120.524751 37.092427 12 +120.524751 37.096927 4 +120.524751 37.110427 1016 +120.524751 37.114927 19 +120.524751 37.119427 385 +120.530251 36.097927 24 +120.530251 36.102427 380 +120.530251 36.106927 92 +120.530251 36.115927 1426 +120.530251 36.120427 778 +120.530251 36.124927 9 +120.530251 36.129427 3 +120.530251 36.142927 4 +120.530251 36.151927 13 +120.530251 36.156427 2568 +120.530251 36.192427 4 +120.530251 36.210427 950 +120.530251 36.214927 1175 +120.530251 36.219427 8 +120.530251 36.232927 1966 +120.530251 36.237427 23 +120.530251 36.259927 772 +120.530251 36.273427 686 +120.530251 36.291427 1650 +120.530251 36.295927 3 +120.530251 36.322927 39 +120.530251 36.331927 354 +120.530251 36.349927 3 +120.530251 36.354427 5 +120.530251 36.381427 53 +120.530251 36.390427 3 +120.530251 36.394927 2142 +120.530251 36.403927 24 +120.530251 36.430927 247 +120.530251 36.448927 742 +120.530251 36.453427 75 +120.530251 36.471427 13 +120.530251 36.493927 902 +120.530251 36.502927 419 +120.530251 36.516427 2368 +120.530251 36.520927 5 +120.530251 36.547927 9 +120.530251 36.633427 9 +120.530251 36.637927 620 +120.530251 36.651427 3 +120.530251 36.655927 9 +120.530251 36.664927 5 +120.530251 36.669427 1233 +120.530251 36.673927 583 +120.530251 36.745927 5 +120.530251 36.754927 83 +120.530251 36.763927 7 +120.530251 36.786427 14 +120.530251 36.790927 36 +120.530251 36.795427 3 +120.530251 36.808927 27 +120.530251 36.831427 1233 +120.530251 36.835927 113 +120.530251 36.840427 330 +120.530251 36.844927 560 +120.530251 36.849427 2235 +120.530251 36.853927 775 +120.530251 36.858427 1676 +120.530251 36.862927 5818 +120.530251 36.867427 1416 +120.530251 36.871927 949 +120.530251 36.876427 1915 +120.530251 36.880927 15 +120.530251 36.885427 464 +120.530251 36.889927 241 +120.530251 36.898927 3 +120.530251 36.939427 548 +120.530251 36.975427 759 +120.530251 37.033927 1241 +120.530251 37.038427 111 +120.530251 37.042927 170 +120.530251 37.065427 518 +120.530251 37.092427 599 +120.530251 37.110427 30 +120.530251 37.123927 5 +120.535751 36.102427 127 +120.535751 36.106927 235 +120.535751 36.111427 202 +120.535751 36.115927 15 +120.535751 36.124927 543 +120.535751 36.129427 12 +120.535751 36.138427 921 +120.535751 36.169927 2822 +120.535751 36.210427 1749 +120.535751 36.214927 4 +120.535751 36.246427 1165 +120.535751 36.264427 304 +120.535751 36.322927 4 +120.535751 36.336427 13 +120.535751 36.354427 6 +120.535751 36.381427 2402 +120.535751 36.385927 42 +120.535751 36.403927 3 +120.535751 36.430927 3 +120.535751 36.471427 1170 +120.535751 36.516427 11 +120.535751 36.520927 3 +120.535751 36.543427 405 +120.535751 36.547927 2019 +120.535751 36.565927 2 +120.535751 36.570427 1614 +120.535751 36.574927 28 +120.535751 36.637927 6 +120.535751 36.646927 8 +120.535751 36.651427 1299 +120.535751 36.655927 2613 +120.535751 36.682927 86 +120.535751 36.700927 328 +120.535751 36.727927 8 +120.535751 36.759427 316 +120.535751 36.772927 5 +120.535751 36.786427 7 +120.535751 36.790927 3 +120.535751 36.795427 725 +120.535751 36.831427 55 +120.535751 36.840427 76 +120.535751 36.844927 2032 +120.535751 36.849427 529 +120.535751 36.853927 459 +120.535751 36.858427 1971 +120.535751 36.862927 584 +120.535751 36.867427 3631 +120.535751 36.871927 1976 +120.535751 36.876427 440 +120.535751 36.880927 78 +120.535751 36.885427 2316 +120.535751 36.889927 1567 +120.535751 36.894427 1512 +120.535751 36.898927 17 +120.535751 36.921427 5 +120.535751 36.975427 269 +120.535751 36.979927 536 +120.535751 37.015927 534 +120.535751 37.123927 383 +120.541251 36.111427 718 +120.541251 36.115927 1793 +120.541251 36.120427 23 +120.541251 36.124927 3126 +120.541251 36.129427 2774 +120.541251 36.169927 334 +120.541251 36.201427 843 +120.541251 36.210427 5 +120.541251 36.237427 661 +120.541251 36.250927 386 +120.541251 36.318427 41 +120.541251 36.327427 8 +120.541251 36.345427 939 +120.541251 36.358927 13 +120.541251 36.381427 4 +120.541251 36.385927 14 +120.541251 36.390427 13 +120.541251 36.394927 47 +120.541251 36.430927 2267 +120.541251 36.439927 1452 +120.541251 36.462427 445 +120.541251 36.466927 3 +120.541251 36.475927 258 +120.541251 36.493927 1459 +120.541251 36.538927 4 +120.541251 36.543427 4 +120.541251 36.610927 8 +120.541251 36.615427 899 +120.541251 36.651427 13 +120.541251 36.655927 25 +120.541251 36.660427 1 +120.541251 36.669427 13 +120.541251 36.673927 4 +120.541251 36.691927 7 +120.541251 36.718927 635 +120.541251 36.727927 24 +120.541251 36.754927 144 +120.541251 36.768427 449 +120.541251 36.795427 1646 +120.541251 36.817927 29 +120.541251 36.826927 3 +120.541251 36.831427 2 +120.541251 36.844927 4 +120.541251 36.849427 1049 +120.541251 36.853927 712 +120.541251 36.858427 331 +120.541251 36.862927 1210 +120.541251 36.867427 708 +120.541251 36.871927 504 +120.541251 36.876427 57 +120.541251 36.880927 1920 +120.541251 36.885427 46 +120.541251 36.889927 59 +120.541251 36.898927 15 +120.541251 36.907927 3 +120.541251 36.912427 225 +120.541251 36.925927 5 +120.541251 36.943927 681 +120.541251 36.948427 233 +120.541251 36.952927 518 +120.541251 36.957427 2 +120.541251 36.979927 4 +120.541251 36.988927 7 +120.541251 37.002427 223 +120.541251 37.006927 23 +120.541251 37.011427 941 +120.541251 37.024927 6 +120.541251 37.029427 1255 +120.546751 36.115927 716 +120.546751 36.120427 23 +120.546751 36.196927 416 +120.546751 36.228427 7 +120.546751 36.237427 38 +120.546751 36.241927 1448 +120.546751 36.268927 788 +120.546751 36.295927 1055 +120.546751 36.327427 421 +120.546751 36.358927 464 +120.546751 36.363427 101 +120.546751 36.385927 64 +120.546751 36.394927 927 +120.546751 36.466927 557 +120.546751 36.475927 4 +120.546751 36.498427 515 +120.546751 36.507427 793 +120.546751 36.511927 773 +120.546751 36.516427 2 +120.546751 36.520927 841 +120.546751 36.543427 6 +120.546751 36.547927 1285 +120.546751 36.561427 11 +120.546751 36.565927 979 +120.546751 36.579427 1035 +120.546751 36.619927 1030 +120.546751 36.669427 19 +120.546751 36.691927 2 +120.546751 36.696427 982 +120.546751 36.736927 820 +120.546751 36.777427 800 +120.546751 36.795427 64 +120.546751 36.817927 1271 +120.546751 36.835927 7 +120.546751 36.849427 4 +120.546751 36.853927 52 +120.546751 36.858427 5 +120.546751 36.862927 1496 +120.546751 36.867427 125 +120.546751 36.871927 32 +120.546751 36.876427 68 +120.546751 36.889927 17 +120.546751 36.898927 11 +120.546751 36.907927 613 +120.546751 36.912427 4 +120.546751 36.916927 25 +120.546751 36.921427 33 +120.546751 36.925927 10 +120.546751 36.930427 4 +120.546751 36.948427 24 +120.546751 36.952927 1448 +120.546751 36.957427 400 +120.546751 36.961927 10 +120.546751 36.966427 1427 +120.546751 36.988927 777 +120.546751 37.006927 244 +120.546751 37.029427 4 +120.552251 36.115927 2109 +120.552251 36.120427 5 +120.552251 36.174427 473 +120.552251 36.178927 2 +120.552251 36.223927 74 +120.552251 36.228427 135 +120.552251 36.232927 24 +120.552251 36.291427 19 +120.552251 36.313927 574 +120.552251 36.318427 19 +120.552251 36.345427 640 +120.552251 36.354427 7 +120.552251 36.358927 21 +120.552251 36.376927 823 +120.552251 36.394927 2 +120.552251 36.430927 830 +120.552251 36.471427 6 +120.552251 36.475927 2190 +120.552251 36.493927 9 +120.552251 36.507427 14 +120.552251 36.511927 578 +120.552251 36.520927 1895 +120.552251 36.547927 2002 +120.552251 36.552427 917 +120.552251 36.637927 482 +120.552251 36.669427 580 +120.552251 36.687427 419 +120.552251 36.813427 4 +120.552251 36.817927 1155 +120.552251 36.835927 725 +120.552251 36.858427 12 +120.552251 36.876427 9 +120.552251 36.880927 2 +120.552251 36.889927 10 +120.552251 36.898927 5 +120.552251 36.916927 12 +120.552251 36.921427 35 +120.552251 36.925927 8 +120.552251 36.939427 2 +120.552251 36.966427 35 +120.552251 36.979927 917 +120.552251 37.020427 520 +120.552251 37.024927 15 +120.552251 37.033927 328 +120.557751 36.124927 738 +120.557751 36.196927 256 +120.557751 36.228427 640 +120.557751 36.232927 519 +120.557751 36.237427 952 +120.557751 36.241927 26 +120.557751 36.322927 9 +120.557751 36.327427 4 +120.557751 36.331927 10 +120.557751 36.336427 1045 +120.557751 36.390427 1824 +120.557751 36.417427 1887 +120.557751 36.426427 903 +120.557751 36.475927 2 +120.557751 36.511927 3 +120.557751 36.520927 3 +120.557751 36.579427 1057 +120.557751 36.583927 3 +120.557751 36.669427 6 +120.557751 36.673927 16 +120.557751 36.678427 1196 +120.557751 36.831427 9 +120.557751 36.849427 3 +120.557751 36.858427 1930 +120.557751 36.871927 36 +120.557751 36.876427 15 +120.557751 36.880927 5 +120.557751 36.885427 20 +120.557751 36.889927 152 +120.557751 36.925927 6 +120.557751 36.979927 3 +120.557751 37.015927 1230 +120.557751 37.029427 2 +120.563251 36.129427 10 +120.563251 36.133927 1050 +120.563251 36.219427 255 +120.563251 36.237427 5 +120.563251 36.241927 139 +120.563251 36.322927 3 +120.563251 36.331927 380 +120.563251 36.340927 3 +120.563251 36.385927 4 +120.563251 36.394927 811 +120.563251 36.417427 2385 +120.563251 36.583927 1482 +120.563251 36.615427 502 +120.563251 36.655927 15 +120.563251 36.660427 1194 +120.563251 36.709927 837 +120.563251 36.714427 7 +120.563251 36.826927 772 +120.563251 36.849427 2677 +120.563251 36.858427 4 +120.563251 36.885427 3 +120.563251 36.889927 35 +120.563251 36.898927 1 +120.563251 36.988927 11 +120.563251 36.993427 1637 +120.563251 36.997927 60 +120.563251 37.015927 7 +120.568751 36.111427 1063 +120.568751 36.115927 2672 +120.568751 36.129427 2 +120.568751 36.133927 1740 +120.568751 36.138427 3 +120.568751 36.237427 26 +120.568751 36.241927 7 +120.568751 36.246427 423 +120.568751 36.376927 344 +120.568751 36.381427 34 +120.568751 36.390427 18 +120.568751 36.448927 593 +120.568751 36.453427 809 +120.568751 36.534427 1187 +120.568751 36.538927 5 +120.568751 36.561427 1138 +120.568751 36.660427 19 +120.568751 36.691927 9 +120.568751 36.709927 1353 +120.568751 36.714427 1235 +120.568751 36.718927 10 +120.568751 36.723427 7 +120.568751 36.826927 360 +120.568751 36.880927 105 +120.568751 36.885427 34 +120.568751 36.889927 16 +120.568751 37.002427 456 +120.568751 37.033927 590 +120.574251 36.133927 216 +120.574251 36.138427 4458 +120.574251 36.142927 3 +120.574251 36.192427 727 +120.574251 36.232927 3 +120.574251 36.237427 16 +120.574251 36.318427 656 +120.574251 36.399427 287 +120.574251 36.439927 4 +120.574251 36.453427 284 +120.574251 36.457927 554 +120.574251 36.480427 1585 +120.574251 36.538927 4 +120.574251 36.565927 640 +120.574251 36.601927 826 +120.574251 36.619927 590 +120.574251 36.637927 1773 +120.574251 36.646927 4 +120.574251 36.691927 1478 +120.574251 36.714427 850 +120.574251 36.813427 31 +120.574251 36.826927 3 +120.574251 36.835927 21 +120.574251 36.840427 1025 +120.574251 36.849427 1771 +120.574251 36.885427 4 +120.574251 36.889927 4 +120.574251 37.006927 627 +120.574251 37.011427 15 +120.574251 37.015927 374 +120.574251 37.020427 23 +120.574251 37.024927 3 +120.574251 37.029427 4 +120.579751 36.133927 2202 +120.579751 36.138427 23 +120.579751 36.232927 423 +120.579751 36.237427 725 +120.579751 36.345427 5 +120.579751 36.349927 162 +120.579751 36.430927 949 +120.579751 36.439927 4 +120.579751 36.444427 9 +120.579751 36.448927 322 +120.579751 36.453427 365 +120.579751 36.462427 749 +120.579751 36.493927 404 +120.579751 36.498427 595 +120.579751 36.502927 619 +120.579751 36.556927 7 +120.579751 36.637927 6 +120.579751 36.651427 1 +120.579751 36.655927 239 +120.579751 36.660427 225 +120.579751 36.678427 661 +120.579751 36.709927 4 +120.579751 36.714427 1977 +120.579751 36.813427 269 +120.579751 36.817927 28 +120.579751 36.826927 4 +120.579751 36.835927 7 +120.579751 37.006927 1651 +120.579751 37.011427 13 +120.579751 37.015927 26 +120.579751 37.020427 20 +120.579751 37.024927 1603 +120.579751 37.029427 469 +120.579751 37.038427 674 +120.579751 37.047427 674 +120.585251 36.129427 7 +120.585251 36.133927 396 +120.585251 36.138427 2333 +120.585251 36.201427 8 +120.585251 36.205927 474 +120.585251 36.232927 8 +120.585251 36.318427 5 +120.585251 36.336427 273 +120.585251 36.394927 1436 +120.585251 36.426427 459 +120.585251 36.435427 503 +120.585251 36.439927 329 +120.585251 36.444427 1088 +120.585251 36.448927 635 +120.585251 36.489427 493 +120.585251 36.552427 1227 +120.585251 36.565927 767 +120.585251 36.660427 2113 +120.585251 36.664927 3 +120.585251 36.669427 1491 +120.585251 36.673927 2 +120.585251 36.678427 1024 +120.585251 36.826927 921 +120.585251 36.831427 7 +120.585251 36.907927 5 +120.585251 37.029427 24 +120.585251 37.033927 12 +120.590751 36.115927 2 +120.590751 36.124927 32 +120.590751 36.142927 5 +120.590751 36.205927 3 +120.590751 36.268927 578 +120.590751 36.331927 8 +120.590751 36.345427 101 +120.590751 36.358927 1124 +120.590751 36.363427 7 +120.590751 36.385927 137 +120.590751 36.399427 13 +120.590751 36.439927 627 +120.590751 36.574927 322 +120.590751 36.610927 878 +120.590751 36.655927 5 +120.590751 36.660427 1287 +120.590751 36.669427 703 +120.590751 36.813427 358 +120.590751 36.831427 312 +120.590751 37.002427 1008 +120.596251 36.115927 1316 +120.596251 36.120427 2 +120.596251 36.129427 384 +120.596251 36.210427 6 +120.596251 36.273427 482 +120.596251 36.313927 809 +120.596251 36.331927 12 +120.596251 36.336427 324 +120.596251 36.358927 1134 +120.596251 36.367927 11 +120.596251 36.372427 2253 +120.596251 36.430927 698 +120.596251 36.475927 584 +120.596251 36.534427 753 +120.596251 36.538927 10 +120.596251 36.552427 894 +120.596251 36.579427 1532 +120.596251 36.588427 1050 +120.596251 36.637927 899 +120.596251 36.687427 357 +120.596251 36.889927 1325 +120.596251 36.903427 5 +120.596251 37.002427 750 +120.596251 37.020427 778 +120.601751 36.120427 6 +120.601751 36.205927 176 +120.601751 36.223927 1330 +120.601751 36.237427 391 +120.601751 36.273427 7 +120.601751 36.277927 1408 +120.601751 36.282427 630 +120.601751 36.318427 7 +120.601751 36.331927 609 +120.601751 36.336427 9 +120.601751 36.354427 25 +120.601751 36.367927 5 +120.601751 36.372427 8 +120.601751 36.376927 677 +120.601751 36.408427 696 +120.601751 36.439927 4 +120.601751 36.453427 1849 +120.601751 36.480427 791 +120.601751 36.502927 703 +120.601751 36.529927 2259 +120.601751 36.570427 866 +120.601751 36.624427 1342 +120.601751 36.637927 2 +120.601751 36.655927 517 +120.601751 36.903427 12 +120.607251 36.120427 40 +120.607251 36.124927 551 +120.607251 36.138427 457 +120.607251 36.277927 2 +120.607251 36.282427 3 +120.607251 36.291427 871 +120.607251 36.313927 2588 +120.607251 36.322927 726 +120.607251 36.331927 5 +120.607251 36.372427 14 +120.607251 36.376927 627 +120.607251 36.390427 963 +120.607251 36.408427 1349 +120.607251 36.421927 1217 +120.607251 36.453427 2 +120.607251 36.462427 268 +120.607251 36.489427 446 +120.607251 36.570427 119 +120.607251 36.588427 49 +120.607251 36.592927 5 +120.607251 36.610927 2125 +120.607251 36.633427 1196 +120.607251 36.687427 277 +120.607251 36.903427 4 +120.612751 36.124927 453 +120.612751 36.133927 172 +120.612751 36.142927 408 +120.612751 36.277927 1259 +120.612751 36.282427 1237 +120.612751 36.291427 73 +120.612751 36.327427 496 +120.612751 36.331927 8 +120.612751 36.336427 1801 +120.612751 36.516427 9 +120.612751 36.646927 907 +120.612751 36.651427 965 +120.618251 36.277927 998 +120.618251 36.282427 4 +120.618251 36.286927 1918 +120.618251 36.300427 440 +120.618251 36.367927 4 +120.618251 36.462427 321 +120.618251 36.493927 735 +120.618251 36.498427 481 +120.618251 36.556927 2 +120.618251 36.561427 289 +120.618251 36.570427 226 +120.618251 36.651427 743 +120.618251 36.669427 817 +120.623751 36.259927 19 +120.623751 36.264427 17 +120.623751 36.282427 6 +120.623751 36.286927 8 +120.623751 36.291427 4 +120.623751 36.318427 1122 +120.623751 36.372427 1800 +120.623751 36.376927 4 +120.623751 36.439927 1278 +120.623751 36.462427 331 +120.623751 36.480427 1450 +120.623751 36.493927 959 +120.623751 36.547927 697 +120.623751 36.552427 659 +120.623751 36.556927 954 +120.623751 36.574927 1134 +120.623751 36.597427 18 +120.623751 36.601927 7 +120.623751 36.619927 5 +120.623751 36.669427 268 +120.629251 36.259927 260 +120.629251 36.264427 823 +120.629251 36.277927 26 +120.629251 36.282427 520 +120.629251 36.304927 3 +120.629251 36.313927 2616 +120.629251 36.349927 307 +120.629251 36.372427 22 +120.629251 36.399427 2301 +120.629251 36.484927 214 +120.629251 36.489427 26 +120.629251 36.498427 745 +120.629251 36.525427 596 +120.629251 36.615427 1617 +120.634751 36.259927 1468 +120.634751 36.264427 17 +120.634751 36.268927 1772 +120.634751 36.286927 1282 +120.634751 36.304927 2993 +120.634751 36.327427 1106 +120.634751 36.345427 657 +120.634751 36.376927 8 +120.634751 36.381427 757 +120.634751 36.390427 87 +120.634751 36.394927 3 +120.634751 36.399427 5 +120.634751 36.538927 5 +120.640251 36.264427 34 +120.640251 36.268927 891 +120.640251 36.300427 189 +120.640251 36.340927 583 +120.640251 36.345427 2 +120.640251 36.358927 44 +120.640251 36.367927 5 +120.640251 36.376927 5 +120.640251 36.421927 6 +120.640251 36.435427 2195 +120.640251 36.448927 1062 +120.640251 36.493927 706 +120.640251 36.516427 646 +120.640251 36.538927 1111 +120.640251 36.565927 27 +120.640251 36.642427 1989 +120.640251 36.660427 19 +120.645751 36.264427 12 +120.645751 36.268927 121 +120.645751 36.295927 6 +120.645751 36.354427 5 +120.645751 36.363427 872 +120.645751 36.367927 1022 +120.645751 36.372427 6 +120.645751 36.385927 36 +120.645751 36.390427 1852 +120.645751 36.421927 806 +120.645751 36.435427 9 +120.645751 36.448927 33 +120.645751 36.471427 6 +120.645751 36.475927 791 +120.645751 36.480427 1233 +120.645751 36.498427 332 +120.645751 36.520927 381 +120.645751 36.538927 11 +120.645751 36.543427 726 +120.645751 36.637927 5 +120.645751 36.642427 1090 +120.651251 36.250927 4 +120.651251 36.255427 2967 +120.651251 36.295927 1769 +120.651251 36.340927 42 +120.651251 36.354427 285 +120.651251 36.385927 29 +120.651251 36.390427 4 +120.651251 36.439927 33 +120.651251 36.444427 733 +120.651251 36.448927 1543 +120.651251 36.453427 12 +120.651251 36.502927 1127 +120.651251 36.507427 1039 +120.651251 36.552427 867 +120.651251 36.561427 399 +120.656751 36.246427 3 +120.656751 36.250927 6 +120.656751 36.255427 6 +120.656751 36.295927 3 +120.656751 36.345427 2312 +120.656751 36.354427 827 +120.656751 36.367927 19 +120.656751 36.394927 748 +120.656751 36.417427 4 +120.656751 36.426427 6 +120.656751 36.430927 603 +120.656751 36.439927 6 +120.656751 36.444427 52 +120.656751 36.448927 266 +120.656751 36.480427 433 +120.656751 36.507427 997 +120.656751 36.565927 328 +120.662251 36.237427 6 +120.662251 36.241927 1803 +120.662251 36.259927 1690 +120.662251 36.354427 479 +120.662251 36.358927 322 +120.662251 36.363427 918 +120.662251 36.367927 7 +120.662251 36.385927 5 +120.662251 36.394927 997 +120.662251 36.399427 33 +120.662251 36.403927 8 +120.662251 36.417427 869 +120.662251 36.426427 9 +120.662251 36.430927 77 +120.662251 36.435427 17 +120.662251 36.439927 1535 +120.662251 36.444427 53 +120.662251 36.484927 4 +120.662251 36.511927 575 +120.662251 36.516427 4 +120.662251 36.520927 17 +120.662251 36.543427 373 +120.662251 36.547927 908 +120.667751 36.246427 4 +120.667751 36.250927 964 +120.667751 36.259927 3 +120.667751 36.264427 3 +120.667751 36.354427 41 +120.667751 36.358927 20 +120.667751 36.363427 1636 +120.667751 36.367927 48 +120.667751 36.372427 1665 +120.667751 36.381427 49 +120.667751 36.385927 755 +120.667751 36.394927 32 +120.667751 36.399427 1174 +120.667751 36.412927 604 +120.667751 36.421927 974 +120.667751 36.430927 28 +120.667751 36.435427 57 +120.667751 36.475927 880 +120.667751 36.480427 2217 +120.667751 36.516427 697 +120.667751 36.534427 18 +120.667751 36.538927 944 +120.667751 36.543427 393 +120.667751 36.547927 851 +120.667751 36.556927 989 +120.673251 36.259927 919 +120.673251 36.264427 3 +120.673251 36.336427 760 +120.673251 36.354427 641 +120.673251 36.358927 45 +120.673251 36.363427 4258 +120.673251 36.367927 1086 +120.673251 36.372427 3 +120.673251 36.426427 7 +120.673251 36.430927 1111 +120.673251 36.448927 5 +120.673251 36.453427 6 +120.673251 36.457927 563 +120.673251 36.471427 34 +120.673251 36.475927 1360 +120.673251 36.480427 27 +120.673251 36.520927 4 +120.673251 36.543427 202 +120.673251 36.556927 777 +120.673251 36.565927 1243 +120.673251 36.574927 1275 +120.678751 36.210427 1 +120.678751 36.214927 1403 +120.678751 36.336427 1521 +120.678751 36.340927 890 +120.678751 36.345427 544 +120.678751 36.354427 602 +120.678751 36.358927 26 +120.678751 36.363427 805 +120.678751 36.367927 69 +120.678751 36.381427 1234 +120.678751 36.385927 36 +120.678751 36.403927 65 +120.678751 36.408427 2547 +120.678751 36.412927 9 +120.678751 36.426427 5 +120.678751 36.448927 1393 +120.678751 36.453427 10 +120.678751 36.457927 47 +120.678751 36.471427 1251 +120.678751 36.520927 1131 +120.678751 36.534427 8 +120.678751 36.538927 46 +120.678751 36.543427 4442 +120.678751 36.547927 25 +120.684251 36.151927 123 +120.684251 36.156427 2515 +120.684251 36.174427 26 +120.684251 36.178927 1023 +120.684251 36.201427 1065 +120.684251 36.205927 111 +120.684251 36.210427 5 +120.684251 36.214927 12 +120.684251 36.336427 12 +120.684251 36.340927 10 +120.684251 36.349927 5 +120.684251 36.408427 13 +120.684251 36.412927 396 +120.684251 36.421927 1278 +120.684251 36.426427 32 +120.684251 36.462427 625 +120.684251 36.471427 5 +120.684251 36.493927 482 +120.684251 36.507427 1278 +120.684251 36.538927 211 +120.684251 36.552427 29 +120.684251 36.561427 516 +120.689751 36.151927 3 +120.689751 36.160927 281 +120.689751 36.165427 1110 +120.689751 36.340927 339 +120.689751 36.349927 1266 +120.689751 36.354427 4 +120.689751 36.358927 516 +120.689751 36.399427 617 +120.689751 36.412927 423 +120.689751 36.457927 4 +120.689751 36.462427 486 +120.689751 36.466927 1071 +120.689751 36.471427 14 +120.689751 36.489427 1114 +120.689751 36.547927 343 +120.689751 36.570427 808 +120.695251 36.349927 2 +120.695251 36.358927 28 +120.695251 36.421927 170 +120.695251 36.439927 5 +120.695251 36.444427 1965 +120.695251 36.462427 19 +120.695251 36.511927 10 +120.695251 36.525427 1162 +120.695251 36.529927 488 +120.695251 36.534427 6 +120.695251 36.543427 109 +120.695251 36.579427 1379 +120.695251 36.583927 3 +120.700751 36.331927 16 +120.700751 36.336427 945 +120.700751 36.358927 263 +120.700751 36.408427 8 +120.700751 36.412927 1204 +120.700751 36.421927 824 +120.700751 36.426427 699 +120.700751 36.439927 2036 +120.700751 36.444427 20 +120.700751 36.453427 4 +120.700751 36.466927 5 +120.700751 36.471427 1579 +120.700751 36.511927 543 +120.700751 36.525427 204 +120.700751 36.534427 13 +120.700751 36.543427 1689 +120.700751 36.565927 24 +120.706251 36.336427 29 +120.706251 36.453427 649 +120.706251 36.466927 13 +120.706251 36.471427 185 +120.706251 36.475927 720 +120.706251 36.493927 1004 +120.706251 36.502927 1384 +120.706251 36.534427 11 +120.706251 36.543427 1799 +120.706251 36.547927 4 +120.706251 36.565927 760 +120.706251 36.588427 299 +120.711751 36.331927 25 +120.711751 36.336427 5 +120.711751 36.340927 287 +120.711751 36.345427 499 +120.711751 36.354427 7 +120.711751 36.453427 5 +120.711751 36.466927 1293 +120.711751 36.516427 769 +120.711751 36.525427 25 +120.711751 36.529927 5 +120.711751 36.534427 3890 +120.711751 36.543427 541 +120.711751 36.547927 1067 +120.711751 36.606427 910 +120.717251 36.340927 6 +120.717251 36.349927 15 +120.717251 36.354427 2379 +120.717251 36.448927 9 +120.717251 36.489427 142 +120.717251 36.529927 16 +120.717251 36.534427 1794 +120.717251 36.565927 734 +120.717251 36.570427 842 +120.717251 36.610927 560 +120.717251 36.615427 598 +120.722751 36.444427 1318 +120.722751 36.448927 1199 +120.722751 36.516427 4 +120.722751 36.565927 876 +120.722751 36.570427 930 +120.728251 36.331927 5 +120.728251 36.340927 1194 +120.728251 36.466927 4 +120.728251 36.471427 10 +120.728251 36.507427 5 +120.728251 36.511927 2231 +120.728251 36.516427 8 +120.733751 36.466927 4 +120.733751 36.471427 2475 +120.733751 36.511927 5 +120.733751 36.574927 692 +120.733751 36.579427 1424 +120.733751 36.592927 12 +120.733751 36.597427 970 +120.739251 36.457927 1458 +120.739251 36.597427 1344 +120.744751 36.475927 782 +120.744751 36.484927 1470 +120.744751 36.529927 1342 +120.744751 36.583927 1909 +120.744751 36.588427 682 +120.744751 36.597427 828 +120.750251 36.484927 1852 +120.750251 36.489427 4 +120.750251 36.525427 48 +120.755751 36.525427 9 +120.755751 36.592927 1700 +120.755751 36.597427 2098 +120.761251 36.502927 3383 +120.766751 36.507427 30 +120.766751 36.516427 1429 +120.772251 36.228427 67 +120.772251 36.489427 113 +120.777751 36.493927 24 +120.783251 36.525427 1621 +120.788751 36.543427 443 +120.794251 36.525427 1090 +120.794251 36.547927 990 +120.799751 36.525427 6 +120.799751 36.534427 1643 +120.799751 36.543427 301 +120.805251 36.520927 296 +120.805251 36.534427 5 +120.810751 36.543427 534 +120.810751 36.565927 1763 +120.810751 36.579427 4 +120.816251 36.493927 46 +120.816251 36.507427 971 +120.816251 36.520927 2081 +120.816251 36.529927 4 +120.816251 36.534427 1156 +120.816251 36.556927 26 +120.816251 36.574927 1604 +120.821751 36.475927 1460 +120.821751 36.498427 1804 +120.821751 36.502927 2899 +120.821751 36.529927 927 +120.821751 36.556927 2177 +120.821751 36.561427 9 +120.821751 36.574927 633 +120.821751 36.583927 4 +120.827251 36.516427 999 +120.827251 36.547927 1111 +120.827251 36.583927 2338 +120.832751 36.475927 1712 +120.832751 36.480427 4 +120.832751 36.556927 1349 +120.832751 36.561427 26 +120.838251 36.466927 833 +120.838251 36.489427 773 +120.838251 36.516427 1313 +120.838251 36.520927 1229 +120.838251 36.525427 182 +120.838251 36.529927 3 +120.838251 36.534427 708 +120.838251 36.597427 1687 +120.843751 36.439927 684 +120.843751 36.498427 6 +120.843751 36.502927 8 +120.843751 36.507427 4 +120.843751 36.516427 7 +120.843751 36.565927 5 +120.843751 36.570427 1282 +120.843751 36.574927 21 +120.849251 36.453427 1137 +120.849251 36.466927 1112 +120.849251 36.489427 281 +120.849251 36.493927 421 +120.849251 36.502927 55 +120.849251 36.507427 132 +120.849251 36.511927 2869 +120.849251 36.565927 273 +120.849251 36.570427 4 +120.849251 36.574927 821 +120.849251 36.579427 10 +120.849251 36.588427 1042 +120.849251 36.597427 1190 +120.854751 36.367927 526 +120.854751 36.390427 5 +120.854751 36.394927 930 +120.854751 36.399427 5 +120.854751 36.430927 156 +120.854751 36.502927 7910 +120.854751 36.507427 6 +120.854751 36.543427 755 +120.854751 36.547927 1118 +120.860251 36.394927 2 +120.860251 36.408427 1315 +120.860251 36.426427 4 +120.860251 36.430927 745 +120.860251 36.448927 1091 +120.860251 36.453427 2 +120.860251 36.475927 3 +120.860251 36.538927 10 +120.860251 36.543427 5 +120.860251 36.561427 691 +120.865751 36.385927 1878 +120.865751 36.403927 3 +120.865751 36.412927 426 +120.865751 36.417427 11 +120.865751 36.435427 6 +120.865751 36.448927 316 +120.865751 36.475927 554 +120.865751 36.538927 1185 +120.865751 36.543427 2929 +120.865751 36.556927 817 +120.865751 36.579427 120 +120.865751 36.583927 2809 +120.871251 36.381427 1040 +120.871251 36.426427 10 +120.871251 36.435427 1120 +120.871251 36.462427 2330 +120.871251 36.471427 20 +120.871251 36.543427 48 +120.871251 36.552427 3 +120.871251 36.570427 1330 +120.876751 36.417427 555 +120.876751 36.426427 907 +120.876751 36.439927 5 +120.876751 36.462427 444 +120.876751 36.466927 313 +120.876751 36.471427 799 +120.876751 36.547927 2074 +120.876751 36.552427 41 +120.882251 36.390427 329 +120.882251 36.417427 17 +120.882251 36.444427 880 +120.882251 36.448927 649 +120.882251 36.453427 3 +120.882251 36.457927 6 +120.882251 36.462427 1 +120.882251 36.466927 5 +120.882251 36.471427 1767 +120.882251 36.529927 9 +120.882251 36.534427 1623 +120.887751 36.403927 1077 +120.887751 36.417427 400 +120.887751 36.439927 7 +120.887751 36.444427 1721 +120.887751 36.462427 1139 +120.887751 36.475927 808 +120.887751 36.480427 16 +120.887751 36.507427 428 +120.893251 36.403927 6 +120.893251 36.412927 386 +120.893251 36.417427 731 +120.893251 36.444427 45 +120.893251 36.529927 1310 +120.898751 36.466927 8 +120.898751 36.507427 195 +120.898751 36.525427 600 +120.904251 36.466927 5 +120.904251 36.552427 42 +120.909751 36.417427 6 +120.909751 36.421927 1710 +120.909751 36.426427 49 +120.909751 36.471427 5 +120.909751 36.475927 2724 +120.909751 36.480427 31 +120.909751 36.543427 1953 +120.909751 36.547927 9 +120.909751 36.552427 2060 +120.915251 36.421927 7 +120.915251 36.475927 3 +120.915251 36.520927 1208 +120.915251 36.529927 1469 +120.915251 36.543427 1517 +120.915251 36.552427 3 +120.920751 36.471427 7 +120.920751 36.480427 14 +120.920751 36.484927 178 +120.920751 36.489427 15 +120.920751 36.516427 10 +120.920751 36.538927 8 +120.926251 36.484927 4 +120.926251 36.547927 93 +120.931751 36.489427 1292 +120.931751 36.516427 986 +120.931751 36.520927 6 +120.931751 36.525427 1240 +120.937251 36.462427 90 +120.937251 36.507427 1184 +120.937251 36.520927 575 +120.937251 36.529927 1228 +120.942751 36.466927 2676 +120.942751 36.480427 1549 +120.942751 36.484927 2589 +120.942751 36.489427 2 +120.942751 36.538927 4 +120.948251 36.480427 4 +120.948251 36.484927 4 +120.948251 36.538927 1337 +120.953751 36.471427 6 +120.959251 36.475927 79 +120.964751 36.417427 1265 +120.964751 36.538927 1442 diff --git a/positions/src/main/assets/trailData.dat b/positions/src/main/assets/trailData.dat new file mode 100644 index 0000000..7b65f24 --- /dev/null +++ b/positions/src/main/assets/trailData.dat @@ -0,0 +1,2 @@ +39.792151 116.397607 14 ,39.791717 116.39763 29 ,39.791823 116.398773 43 ,39.791861 116.399422 58 ,39.792784 116.399336 72 ,39.792812 116.3991 87 ,39.792866 116.398933 101 ,39.792965 116.398788 116 ,39.795026 116.398553 130 ,39.795739 116.398461 145 ,39.795966 116.398392 159 ,39.796077 116.398231 174 ,39.796526 116.397539 188 ,39.796568 116.397405 203 ,39.796575 116.397249 217 ,39.796563 116.397035 232 ,39.796473 116.39579 246 ,39.796518 116.395683 261 ,39.796629 116.395656 275 ,39.79834 116.395575 290 ,39.799584 116.39549 304 ,39.801167 116.395426 319 ,39.80221 116.395404 334 ,39.802362 116.395367 348 ,39.802469 116.395404 363 ,39.802874 116.39541 377 ,39.802865 116.394508 392 ,39.802956 116.393526 406 ,39.803014 116.392636 421 ,39.803121 116.391617 435 ,39.803327 116.390238 450 ,39.803392 116.389653 464 ,39.803467 116.388827 479 ,39.803492 116.388349 493 ,39.803529 116.387894 508 ,39.803541 116.387438 522 ,39.803512 116.3868 537 ,39.803471 116.386054 551 ,39.803409 116.385587 566 ,39.803339 116.384943 580 ,39.803186 116.383768 595 ,39.803178 116.383328 609 ,39.803203 116.38239 624 ,39.803401 116.381226 638 ,39.803582 116.380523 653 ,39.803735 116.380034 668 ,39.804312 116.378898 682 ,39.804777 116.377862 697 ,39.80556 116.37599 711 ,39.806545 116.374783 726 ,39.808053 116.372884 740 ,39.809216 116.37143 755 ,39.811177 116.369 769 ,39.812516 116.367337 784 ,39.81315 116.36657 798 ,39.812448 116.365553 813 ,39.814342 116.365272 827 ,39.816748 116.364901 842 ,39.817636 116.36484 856 ,39.81852 116.364943 871 ,39.820271 116.365499 885 ,39.829452 116.369101 900 ,39.832224 116.370234 914 ,39.833302 116.370604 929 ,39.833853 116.370704 943 ,39.834287 116.370728 958 ,39.836081 116.37083 972 ,39.838078 116.370851 987 ,39.844762 116.371139 1002 ,39.845922 116.371139 1016 ,39.846654 116.371139 1031 ,39.853208 116.371387 1045 ,39.85635 116.371449 1060 ,39.856721 116.371484 1074 ,39.85716 116.37151 1089 ,39.857609 116.371591 1103 ,39.857737 116.371612 1118 ,39.858006 116.37173 1132 ,39.858334 116.371872 1147 ,39.859241 116.372642 1161 ,39.862652 116.37713 1176 ,39.863913 116.379106 1190 ,39.864282 116.379242 1205 ,39.864523 116.37923 1219 ,39.864896 116.378924 1234 ,39.865272 116.378635 1248 ,39.865967 116.378285 1263 ,39.86624 116.378077 1277 ,39.866361 116.377913 1292 ,39.866688 116.377168 1306 ,39.867137 116.376636 1321 ,39.867186 116.376589 1336 ,39.867844 116.375952 1350 ,39.868875 116.375112 1365 ,39.869486 116.374655 1379 ,39.869818 116.374432 1394 ,39.870171 116.374369 1408 ,39.873507 116.37433 1423 ,39.87855 116.374412 1437 ,39.878589 116.374412 1452 ,39.880156 116.374406 1466 ,39.887794 116.374412 1481 ,39.888197 116.374434 1495 ,39.88931 116.374453 1510 ,39.894649 116.374486 1524 ,39.898271 116.374351 1539 ,39.89978 116.374371 1553 ,39.902204 116.374289 1568 ,39.906253 116.374292 1582 ,39.907181 116.374289 1597 ,39.908187 116.374302 1611 ,39.915272 116.373772 1626 ,39.916091 116.373752 1641 ,39.916652 116.373724 1655 ,39.918046 116.373664 1670 ,39.923061 116.373445 1684 ,39.924087 116.373444 1699 ,39.924932 116.37344 1713 ,39.926599 116.373281 1728 ,39.931333 116.373116 1742 ,39.932549 116.372906 1757 ,39.933123 116.372883 1771 ,39.933906 116.372883 1786 ,39.934586 116.372886 1800 ,39.938263 116.372823 1815 ,39.94051 116.372696 1829 ,39.940577 116.372662 1844 ,39.940618 116.372601 1858 ,39.940639 116.372498 1873 ,39.940612 116.368546 1887 ,39.940597 116.36767 1902 ,39.940557 116.36377 1916 ,39.940453 116.361731 1931 ,39.940434 116.359216 1945 ,39.94033 116.357264 1960 ,39.940289 116.356708 1975 ,39.940287 116.355555 1989 ,39.941806 116.353243 2004 ,39.942539 116.352963 2018 ,39.944425 116.3523 2033 ,39.946786 116.351458 2047 ,39.947638 116.351438 2062 ,39.950767 116.351705 2076 ,39.952579 116.35088 2091 ,39.954061 116.349997 2105 ,39.958066 116.347707 2120 ,39.961631 116.345707 2134 ,39.96225 116.345404 2149 ,39.963028 116.345181 2163 ,39.964247 116.345093 2178 ,39.965136 116.345302 2192 ,39.965809 116.345283 2207 ,39.966701 116.345119 2221 ,39.967833 116.344967 2236 ,39.968822 116.34478 2250 ,39.970198 116.344068 2265 ,39.9709 116.343553 2279 ,39.971909 116.342627 2294 ,39.973201 116.341331 2309 ,39.974331 116.340565 2323 ,39.974998 116.340336 2338 ,39.975593 116.340257 2352 ,39.976454 116.340034 2367 ,39.977385 116.339786 2381 ,39.988316 116.337911 2396 ,39.992887 116.337747 2410 ,39.998009 116.337601 2425 ,40.001779 116.337316 2439 ,40.004982 116.337314 2454 ,40.007729 116.337231 2468 ,40.007791 116.337213 2483 ,40.008075 116.337069 2497 ,40.008348 116.336945 2512 ,40.009225 116.336411 2526 ,40.011122 116.334413 2541 ,40.012176 116.333199 2555 ,40.013547 116.331669 2570 ,40.015506 116.329102 2584 ,40.01619 116.32832 2599 ,40.019546 116.325704 2613 ,40.021131 116.324882 2628 ,40.023932 116.323729 2643 ,40.028789 116.321896 2657 ,40.030057 116.321361 2672 ,40.031836 116.32064 2686 ,40.032981 116.320205 2701 ,40.033874 116.319838 2715 ,40.036213 116.318561 2730 ,40.036468 116.31843 2744 ,40.037017 116.31813 2759 ,40.037559 116.317779 2773 ,40.040765 116.314502 2788 ,40.042128 116.313677 2802 ,40.045561 116.311369 2817 ,40.049347 116.308413 2831 ,40.053064 116.306243 2846 , +39.792151 116.397607 10 ,39.791717 116.39763 20 ,39.791823 116.398773 30 ,39.791861 116.399422 40 ,39.792784 116.399336 50 ,39.792812 116.3991 61 ,39.792866 116.398933 71 ,39.792965 116.398788 81 ,39.795026 116.398553 91 ,39.795739 116.398461 101 ,39.795966 116.398392 112 ,39.796077 116.398231 122 ,39.796526 116.397539 132 ,39.796568 116.397405 142 ,39.796575 116.397249 152 ,39.796563 116.397035 162 ,39.796473 116.39579 173 ,39.796518 116.395683 183 ,39.796629 116.395656 193 ,39.79834 116.395575 203 ,39.799584 116.39549 213 ,39.801167 116.395426 224 ,39.80221 116.395404 234 ,39.802362 116.395367 244 ,39.802469 116.395404 254 ,39.802874 116.39541 264 ,39.802865 116.394508 274 ,39.802956 116.393526 285 ,39.803014 116.392636 295 ,39.803121 116.391617 305 ,39.803327 116.390238 315 ,39.803392 116.389653 325 ,39.803467 116.388827 336 ,39.803492 116.388349 346 ,39.803529 116.387894 356 ,39.803541 116.387438 366 ,39.803512 116.3868 376 ,39.803471 116.386054 386 ,39.803409 116.385587 397 ,39.803339 116.384943 407 ,39.803186 116.383768 417 ,39.803178 116.383328 427 ,39.803203 116.38239 437 ,39.803401 116.381226 448 ,39.803582 116.380523 458 ,39.803735 116.380034 468 ,39.804312 116.378898 478 ,39.804777 116.377862 488 ,39.80556 116.37599 498 ,39.806545 116.374783 509 ,39.808053 116.372884 519 ,39.809216 116.37143 529 ,39.811177 116.369 539 ,39.812516 116.367337 549 ,39.81315 116.36657 560 ,39.814058 116.365449 570 ,39.815928 116.365119 580 ,39.817059 116.364939 590 ,39.817799 116.364959 600 ,39.818198 116.365008 611 ,39.818619 116.365108 621 ,39.820719 116.365909 631 ,39.822728 116.366629 641 ,39.824299 116.367309 651 ,39.826379 116.368098 661 ,39.828519 116.368849 672 ,39.829618 116.369268 682 ,39.830688 116.369698 692 ,39.830998 116.369839 702 ,39.831509 116.370008 712 ,39.831689 116.370089 723 ,39.832469 116.370378 733 ,39.833328 116.370639 743 ,39.833638 116.370719 753 ,39.833948 116.370768 763 ,39.835996 116.370884 773 ,39.836779 116.370929 784 ,39.839369 116.370989 794 ,39.840169 116.371038 804 ,39.840479 116.371038 814 ,39.842869 116.371138 824 ,39.844522 116.37119 835 ,39.845922 116.371141 845 ,39.845922 116.370027 855 ,39.845831 116.353517 865 ,39.845809 116.351458 875 ,39.845798 116.350387 885 ,39.845748 116.349584 896 ,39.845674 116.348556 906 ,39.845242 116.343343 916 ,39.845016 116.340437 926 ,39.8445 116.335249 936 ,39.844492 116.333084 947 ,39.84445 116.331196 957 ,39.844493 116.320087 967 ,39.844603 116.311007 977 ,39.844645 116.310221 987 ,39.844686 116.309478 997 ,39.844822 116.308537 1008 ,39.845077 116.307974 1018 ,39.845427 116.307363 1028 ,39.846086 116.306798 1038 ,39.847116 116.305984 1048 ,39.848165 116.305366 1059 ,39.849883 116.304987 1069 ,39.852179 116.304619 1079 ,39.8543 116.304413 1089 ,39.856255 116.304213 1099 ,39.858793 116.30424 1109 ,39.862164 116.304165 1120 ,39.864551 116.303982 1130 ,39.865108 116.303945 1140 ,39.865907 116.303856 1150 ,39.866856 116.303717 1160 ,39.868504 116.303445 1171 ,39.878676 116.303039 1181 ,39.879035 116.303051 1191 ,39.880198 116.303036 1201 ,39.881046 116.303056 1211 ,39.881432 116.30302 1222 ,39.889585 116.302854 1232 ,39.89084 116.303122 1242 ,39.892096 116.30378 1252 ,39.892769 116.304842 1262 ,39.893387 116.306642 1272 ,39.894545 116.309319 1283 ,39.894688 116.30954 1293 ,39.89539 116.309974 1303 ,39.896029 116.310245 1313 ,39.896894 116.310307 1323 ,39.897811 116.310308 1334 ,39.898577 116.310303 1344 ,39.905284 116.309868 1354 ,39.906275 116.30987 1364 ,39.907603 116.309871 1374 ,39.908689 116.309857 1384 ,39.911386 116.309957 1395 ,39.912106 116.309936 1405 ,39.914206 116.30983 1415 ,39.914885 116.309504 1425 ,39.915332 116.308845 1435 ,39.91612 116.30724 1446 ,39.918686 116.300179 1456 ,39.919332 116.299128 1466 ,39.920191 116.298567 1476 ,39.921163 116.29805 1486 ,39.922235 116.297831 1496 ,39.922585 116.297844 1507 ,39.923401 116.297819 1517 ,39.924355 116.297783 1527 ,39.925116 116.297461 1537 ,39.925508 116.297103 1547 ,39.926737 116.296635 1558 ,39.928617 116.295791 1568 ,39.930654 116.295537 1578 ,39.931614 116.295399 1588 ,39.932117 116.29542 1598 ,39.932404 116.29542 1608 ,39.933192 116.29542 1619 ,39.933926 116.295421 1629 ,39.934272 116.295378 1639 ,39.935669 116.295151 1649 ,39.946095 116.293858 1659 ,39.947206 116.293879 1670 ,39.948603 116.293868 1680 ,39.95575 116.294699 1690 ,39.95723 116.294558 1700 ,39.957965 116.29435 1710 ,39.958302 116.294187 1720 ,39.958672 116.294 1731 ,39.960793 116.292904 1741 ,39.96521 116.28972 1751 ,39.965984 116.289073 1761 ,39.966701 116.288464 1771 ,39.967772 116.287735 1782 ,39.96913 116.286563 1792 ,39.970077 116.286118 1802 ,39.970819 116.286262 1812 ,39.971777 116.286852 1822 ,39.97265 116.287509 1833 ,39.973289 116.288238 1843 ,39.973844 116.289757 1853 ,39.973925 116.290647 1863 ,39.974002 116.291697 1873 ,39.974057 116.29309 1883 ,39.974119 116.294033 1894 ,39.974119 116.294033 1904 ,39.974186 116.294961 1914 ,39.974292 116.297152 1924 ,39.974474 116.300981 1934 ,39.974565 116.301475 1945 ,39.974668 116.301738 1955 ,39.974771 116.302011 1965 ,39.975197 116.30304 1975 ,39.975401 116.303574 1985 ,39.97545 116.30378 1995 ,39.975508 116.304029 2006 ,39.975552 116.304389 2016 ,39.975567 116.304666 2026 ,39.975573 116.306264 2036 ,39.975588 116.308207 2046 ,39.9758 116.311542 2057 ,39.9759 116.314876 2067 ,39.975944 116.316709 2077 ,39.975946 116.317612 2087 ,39.975945 116.318598 2097 ,39.976109 116.321711 2107 ,39.976295 116.326893 2118 ,39.976295 116.328994 2128 ,39.976312 116.330502 2138 ,39.9765 116.33396 2148 ,39.976397 116.339972 2158 ,39.976407 116.341974 2169 ,39.976454 116.340034 2179 ,39.977385 116.339786 2189 ,39.988316 116.337911 2199 ,39.992887 116.337747 2209 ,39.998009 116.337601 2219 ,40.001779 116.337316 2230 ,40.004982 116.337314 2240 ,40.007729 116.337231 2250 ,40.007791 116.337213 2260 ,40.008075 116.337069 2270 ,40.008348 116.336945 2281 ,40.009225 116.336411 2291 ,40.011122 116.334413 2301 ,40.012176 116.333199 2311 ,40.013547 116.331669 2321 ,40.015506 116.329102 2331 ,40.01619 116.32832 2342 ,40.019546 116.325704 2352 ,40.021131 116.324882 2362 ,40.023932 116.323729 2372 ,40.028789 116.321896 2382 ,40.030057 116.321361 2393 ,40.031836 116.32064 2403 ,40.032981 116.320205 2413 ,40.033874 116.319838 2423 ,40.036213 116.318561 2433 ,40.036468 116.31843 2444 ,40.037017 116.31813 2454 ,40.037559 116.317779 2464 ,40.040765 116.314502 2474 ,40.042128 116.313677 2484 ,40.045561 116.311369 2494 ,40.049347 116.308413 2505 ,40.053064 116.306243 2515 , diff --git a/positions/src/main/java/.DS_Store b/positions/src/main/java/.DS_Store new file mode 100644 index 0000000..35a54bf Binary files /dev/null and b/positions/src/main/java/.DS_Store differ diff --git a/positions/src/main/java/cc/winboll/studio/positions/App.java b/positions/src/main/java/cc/winboll/studio/positions/App.java new file mode 100644 index 0000000..506b8eb --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/App.java @@ -0,0 +1,29 @@ +package cc.winboll.studio.positions; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/12/08 15:10:51 + * @Describe 全局应用类 + */ +import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libapputils.app.WinBollActivityManager; + +public class App extends GlobalApplication { + + public static final String TAG = "App"; + + @Override + public void onCreate() { + // 必须在调用基类前设置应用调试标志, + // 这样可以预先设置日志与数据的存储根目录。 + setIsDebuging(this, BuildConfig.DEBUG); + super.onCreate(); + // 设置 WinBoll 应用 UI 类型 + WinBollActivityManager.getInstance(this).setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Aplication); + + + LogUtils.d(TAG, "onCreate"); + } + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java b/positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java new file mode 100644 index 0000000..fbecf27 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java @@ -0,0 +1,394 @@ +package cc.winboll.studio.positions; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.telecom.TelecomManager; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.viewpager.widget.ViewPager; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.LogView; +import cc.winboll.studio.libapputils.app.IWinBollActivity; +import cc.winboll.studio.libapputils.app.WinBollActivityManager; +import cc.winboll.studio.libapputils.bean.APPInfo; +import cc.winboll.studio.libapputils.view.YesNoAlertDialog; +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.DemoMainActivity; +import cc.winboll.studio.positions.activities.SettingsActivity; +import cc.winboll.studio.positions.adapters.MyPagerAdapter; +import cc.winboll.studio.positions.beans.MainServiceBean; +import cc.winboll.studio.positions.services.MainService; +import com.google.android.material.tabs.TabLayout; +import java.util.ArrayList; +import java.util.List; +import com.tencent.map.vector.demo.AbsListActivity; +import com.tencent.map.vector.demo.AbsActivity; + +final public class MainSimpleActivity extends AbsActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { + + public static final String TAG = "MainActivity"; + + public static final int REQUEST_HOME_ACTIVITY = 0; + public static final int REQUEST_ABOUT_ACTIVITY = 1; + + public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS"; + + LogView mLogView; + Toolbar mToolbar; + CheckBox cbMainService; + MainServiceBean mMainServiceBean; + ViewPager viewPager; + private List views; //用来存放放进ViewPager里面的布局 + //实例化存储imageView(导航原点)的集合 + ImageView[] imageViews; + //MyPagerAdapter adapter;//适配器 + MyPagerAdapter pagerAdapter; + LinearLayout linearLayout;//下标所在在LinearLayout布局里 + int currentPoint = 0;//当前被选中中页面的下标 + + private static final int DIALER_REQUEST_CODE = 1; + + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public APPInfo getAppInfo() { +// String szBranchName = "contacts"; +// +// APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo(); +// appInfo.setAppName("Contacts"); +// appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll); +// appInfo.setAppDescription("Contacts Description"); +// appInfo.setAppGitName("APP"); +// appInfo.setAppGitOwner("Studio"); +// appInfo.setAppGitAPPBranch(szBranchName); +// appInfo.setAppGitAPPSubProjectFolder(szBranchName); +// appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Contacts"); +// appInfo.setAppAPKName("Contacts"); +// appInfo.setAppAPKFolderName("Contacts"); +// return appInfo; + return null; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回 + //if (prosessIntents(getIntent())) return; + // 以下正常创建主窗口 + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + // 初始化工具栏 + mToolbar = findViewById(R.id.activitymainToolbar1); + setSupportActionBar(mToolbar); + if (isEnableDisplayHomeAsUp()) { + // 显示后退按钮 + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + getSupportActionBar().setSubtitle(getTag()); + + initData(); + initView(); + //initPoint();//调用初始化导航原点的方法 + viewPager.addOnPageChangeListener(this);//滑动事件 + + ViewPager viewPager = findViewById(R.id.activitymainViewPager1); + MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); + viewPager.setAdapter(pagerAdapter); + TabLayout tabLayout = findViewById(R.id.activitymainTabLayout1); + tabLayout.setupWithViewPager(viewPager); + +// mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); +// if (mMainServiceBean == null) { +// mMainServiceBean = new MainServiceBean(); +// } +// cbMainService = findViewById(R.id.activitymainCheckBox1); +// cbMainService.setChecked(mMainServiceBean.isEnable()); +// cbMainService.setOnClickListener(new View.OnClickListener(){ +// @Override +// public void onClick(View view) { +// if (cbMainService.isChecked()) { +// MainService.startMainService(MainActivity.this); +// } else { +// MainService.stopMainService(MainActivity.this); +// } +// } +// }); + MainService.startMainService(Main2Activity.this); + } + + //初始化view,即显示的图片 + void initView() { + viewPager = findViewById(R.id.activitymainViewPager1); + pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); + viewPager.setAdapter(pagerAdapter); + //adapter = new MyPagerAdapter(views); + //viewPager = findViewById(R.id.activitymainViewPager1); + //viewPager.setAdapter(adapter); + //linearLayout = findViewById(R.id.activitymainLinearLayout1); + //initPoint();//初始化页面下方的点 + viewPager.setOnPageChangeListener(this); + + } + + //初始化所要显示的布局 + void initData() { + ViewPager viewPager = findViewById(R.id.activitymainViewPager1); + LayoutInflater inflater = LayoutInflater.from(getActivity()); + View view1 = inflater.inflate(R.layout.fragment_gms, viewPager, false); + View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false); + View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false); + + views = new ArrayList<>(); + views.add(view1); + views.add(view2); + views.add(view3); + } + +// void initPoint() { +// imageViews = new ImageView[5];//实例化5个图片 +// for (int i = 0; i < linearLayout.getChildCount(); i++) { +// imageViews[i] = (ImageView) linearLayout.getChildAt(i); +// imageViews[i].setImageResource(R.drawable.ic_launcher); +// imageViews[i].setOnClickListener(this);//点击导航点,即可跳转 +// imageViews[i].setTag(i);//重复利用实例化的对象 +// } +// currentPoint = 0;//默认第一个坐标 +// imageViews[currentPoint].setImageResource(R.drawable.ic_launcher); +// } + + //OnPageChangeListener接口要实现的三个方法 + /* onPageScrollStateChanged(int state) + 此方法是在状态改变的时候调用,其中state这个参数有三种状态: + SCROLL_STATE_DRAGGING(1)表示用户手指“按在屏幕上并且开始拖动”的状态 + (手指按下但是还没有拖动的时候还不是这个状态,只有按下并且手指开始拖动后log才打出。) + SCROLL_STATE_IDLE(0)滑动动画做完的状态。 + SCROLL_STATE_SETTLING(2)在“手指离开屏幕”的状态。*/ + @Override + public void onPageScrollStateChanged(int state) { + + } + /* onPageScrolled(int position, float positionOffset, int positionOffsetPixels) + 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为: + + position :当前页面,即你点击滑动的页面(从A滑B,则是A页面的position。 + positionOffset:当前页面偏移的百分比 + positionOffsetPixels:当前页面偏移的像素位置*/ + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + /* onPageSelected(int position) + 此方法是页面滑动完后得到调用,position是你当前选中的页面的Position(位置编号) + (从A滑动到B,就是B的position)*/ + public void onPageSelected(int position) { + +// ImageView preView = imageViews[currentPoint]; +// preView.setImageResource(R.drawable.ic_launcher); +// ImageView currView = imageViews[position]; +// currView.setImageResource(R.drawable.ic_launcher); +// currentPoint = position; + } + + //小圆点点击事件 + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + //通过getTag(),可以判断是哪个控件 +// int i = (Integer) v.getTag(); +// viewPager.setCurrentItem(i);//直接跳转到某一个页面的情况 + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + //setSubTitle(""); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + LogUtils.d(TAG, "onDestroy() SOS"); + } + + + + // + // 处理传入的 Intent 数据 + // +// boolean prosessIntents(Intent intent) { +// if (intent == null +// || intent.getAction() == null +// || intent.getAction().equals("")) +// return false; +// +// if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) { +// try { +// WinBollActivity clazzActivity = UnitTestActivity.class.newInstance(); +// String tag = clazzActivity.getTag(); +// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag); +// Intent subIntent = new Intent(this, UnitTestActivity.class); +// subIntent.setAction(intent.getAction()); +// File file = new File(getCacheDir(), UUID.randomUUID().toString()); +// //取出文件uri +// Uri uri = intent.getData(); +// if (uri == null) { +// uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); +// } +// //获取文件真实地址 +// String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri); +// if (TextUtils.isEmpty(szSrcPath)) { +// return false; +// } +// +// Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath())); +// //startWinBollActivity(subIntent, tag); +// WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class); +// } catch (IllegalAccessException | InstantiationException | IOException e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// // 函数处理异常返回失败 +// return false; +// } +// } else { +// LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet"); +// return false; +// } +// return true; +// } + + @Override + public String getTag() { + return TAG; + } + + @Override + public Toolbar initToolBar() { + return findViewById(R.id.activitymainToolbar1); + } + + @Override + public boolean isAddWinBollToolBar() { + return true; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + public void onBackPressed() { + exit(); + } + + void exit() { + YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ + + @Override + public void onYes() { + WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); + } + + @Override + public void onNo() { + } + }; + YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); + return super.onCreateOptionsMenu(menu); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_settings) { + Intent intent = new Intent(this, SettingsActivity.class); + startActivity(intent); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } else if (item.getItemId() == R.id.item_demomain) { + Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class); + startActivity(intent); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } +// } else +// if (item.getItemId() == R.id.item_exit) { +// exit(); +// return true; +// } + return super.onOptionsItemSelected(item); + } + + + @Override + protected void onResume() { + super.onResume(); + } + + /** + * Android M 及以上检查是否是系统默认电话应用 + */ + public boolean isDefaultPhoneCallApp() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + TelecomManager manger = (TelecomManager) getSystemService(TELECOM_SERVICE); + if (manger != null && manger.getDefaultDialerPackage() != null) { + return manger.getDefaultDialerPackage().equals(getPackageName()); + } + } + return false; + } + + public boolean isServiceRunning(Class serviceClass) { + ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + if (manager == null) return false; + + for (ActivityManager.RunningServiceInfo service : manager.getRunningServices( + Integer.MAX_VALUE)) { + if (serviceClass.getName().equals(service.service.getClassName())) { + return true; + } + } + + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { +// switch (resultCode) { +// case REQUEST_HOME_ACTIVITY : { +// LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY"); +// break; +// } +// case REQUEST_ABOUT_ACTIVITY : { +// LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY"); +// break; +// } +// default : { +// super.onActivityResult(requestCode, resultCode, data); +// } +// } + if (requestCode == DIALER_REQUEST_CODE) { + if (resultCode == Activity.RESULT_OK) { + Toast.makeText(Main2Activity.this, getString(R.string.app_name) + " 已成为默认电话应用", + Toast.LENGTH_SHORT).show(); + } + } + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java new file mode 100644 index 0000000..140aae9 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java @@ -0,0 +1,470 @@ +package cc.winboll.studio.positions; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/24 11:05:49 + */ +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.location.Location; +import android.os.Bundle; +import android.os.Looper; +import android.os.SystemClock; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import cc.winboll.studio.libappbase.LogView; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.positions.activities.SettingsActivity; +import cc.winboll.studio.positions.activities.TestMapViewActivity; +import cc.winboll.studio.positions.utils.LocationFileStorage; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; +import com.tencent.map.geolocation.TencentLocation; +import com.tencent.map.geolocation.TencentLocationListener; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.map.geolocation.TencentLocationRequest; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapInitializer; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; +import java.util.ArrayList; +import java.util.List; +import pub.devrel.easypermissions.EasyPermissions; +import cc.winboll.studio.positions.beans.LocationJson; + +public class MainSimpleActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { + + public static final String TAG ="MainSimpleActivity"; + + private static final int PERMISSION_REQUEST_CODE = 1; + + Toolbar mToolbar; + private TextureMapView mapView; + protected TencentMap tencentMap; + TextView mtvInfo; + private LocationSource.OnLocationChangedListener locationChangedListener; + + private TencentLocationManager locationManager; + private TencentLocationRequest locationRequest; + private MyLocationStyle locationStyle; + ArrayList locationJsonList; + LogView mLogView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main_simple); + + locationJsonList = new ArrayList(); + + // 初始化工具栏 + mToolbar = findViewById(R.id.activitymainToolbar1); + setSupportActionBar(mToolbar); + getSupportActionBar().setSubtitle(TAG); + + mLogView = findViewById(R.id.logview); + mLogView.start(); + + TencentMapInitializer.setAgreePrivacy(this, true); + TencentMapInitializer.start(this); + TencentLocationManager.setUserAgreePrivacy(true); + + + mapView = findViewById(R.id.mapview); + mapView.setOpaque(false); + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + tencentMap = mapView.getMap(); + + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show(); + } + }); + + mtvInfo = findViewById(R.id.tv_info); + + checkLocationPermission(); + + //设置显示定位的图标 + TencentLocationManager.setUserAgreePrivacy(true); + //建立定位 + //initLocation(); + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(22.984066, 116.307548), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + + // 设置地图点击监听 + tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener(){ + + @Override + public void onMapClick(com.tencent.tencentmap.mapsdk.maps.model.LatLng latLng) { + //创建Marker对象之前,设置属性 + //LatLng position = new LatLng(40.011313,116.391907); + BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker); + Location location = createLocationFromLatLng(latLng); + addLocationJson(location); + Marker mCustomMarker = tencentMap.addMarker(new MarkerOptions(latLng)); + + //创建Marker对象之后,修改属性 +// Animation animation = new AlphaAnimation(0.7f, 0f); +// animation.setDuration(2000); +// mCustomMarker.setAnimation(animation); +// mCustomMarker.startAnimation(); + } + }); + + + } + + void loadLocations() { + // 存储位置数据 +// Location location = new Location("gps"); +// location.setLatitude(22.984066); +// location.setLongitude(116.307548); +// location.setTime(System.currentTimeMillis()); +// +// // 方式1:保存到文件 +// List locations = new ArrayList<>(); +// locations.add(location); +// LocationFileStorage.saveToFile(this, locations); + + // 读取数据 + locationJsonList = LocationFileStorage.loadFromFile(this); + + for (LocationJson lj : locationJsonList) { + tencentMap.addMarker(new MarkerOptions(toTencentLatLng(lj.toLocation()))); + //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); + } + } + + void addLocationJson(Location location) { + // 存储位置数据 +// Location location = new Location("gps"); +// location.setLatitude(22.984066); +// location.setLongitude(116.307548); +// location.setTime(System.currentTimeMillis()); + + // 方式1:保存到文件 + //List locations = new ArrayList<>(); + locationJsonList.add(new LocationJson(location)); + LocationFileStorage.saveToFile(this, locationJsonList); + + // 读取数据 +// List loaded = LocationFileStorage.loadFromFile(this); +// for (Location loc : loaded) { +// tencentMap.addMarker(new MarkerOptions(toTencentLatLng(loc))); +// //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); +// } + } + + + +// 创建Location对象方法 + private Location createLocationFromLatLng(LatLng latLng) { + Location location = new Location("tencent_map_manual"); + + // 设置基础坐标 + location.setLatitude(latLng.getLatitude()); + location.setLongitude(latLng.getLongitude()); + + // 设置必要元数据 + location.setTime(System.currentTimeMillis()); + location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); + location.setAccuracy(5.0f); // 手动点击精度设为5米 + + return location; + } + + + public LatLng toTencentLatLng(Location location) { + return new LatLng( + location.getLatitude(), + location.getLongitude() + ); + } + + + // 添加标记方法 + private void addMarker(LatLng latLng) { + tencentMap.clearAllOverlays(); + MarkerOptions options = new MarkerOptions(latLng) + .icon(BitmapDescriptorFactory.defaultMarker()) + .title("点击保存"); + tencentMap.addMarker(options); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); +// LatLng center = new LatLng(39.904556, 116.427242); +// tencentMap.moveCamera( +// CameraUpdateFactory.newLatLngZoom(center, 13f) // 注意 13 → 13f +// ); + loadLocations(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_settings) { + Intent intent = new Intent(this, SettingsActivity.class); + startActivity(intent); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } else if (item.getItemId() == R.id.item_demomain) { + Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class); + startActivity(intent); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } else if (item.getItemId() == R.id.item_testmapview) { + Intent intent = new Intent(this, TestMapViewActivity.class); + startActivity(intent); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } +// } else +// if (item.getItemId() == R.id.item_exit) { +// exit(); +// return true; +// } + return super.onOptionsItemSelected(item); + } + + /** + * mapview的生命周期管理 + */ + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onRestart() { + super.onRestart(); + mapView.onRestart(); + } + + + + /** + * 设置定位图标样式 + */ + private void setLocMarkerStyle() { + locationStyle = new MyLocationStyle(); + //创建图标 + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + locationStyle.icon(bitmapDescriptor); + //设置定位圆形区域的边框宽度 + locationStyle.strokeWidth(3); + //设置圆区域的颜色 + locationStyle.fillColor(R.color.style); + + tencentMap.setMyLocationStyle(locationStyle); + } + + + + private Bitmap getBitMap(int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 55; + int newHeight = 55; + float widthScale = ((float)newWidth) / width; + float heightScale = ((float)newHeight) / height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); + return bitmap; + } + + + + /** + * 定位的一些初始化设置 + */ + private void initLocation() { + //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + locationManager = TencentLocationManager.getInstance(this); + //设置坐标系 + locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); + //创建定位请求 + locationRequest = TencentLocationRequest.create(); + //设置定位周期(位置监听器回调周期)为3s + locationRequest.setInterval(3000); + + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + setLocMarkerStyle(); +// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); + tencentMap.setMyLocationStyle(locationStyle); + } + /** + * 实现位置监听 + * @param tencentLocation + * @param i + * @param s + */ + @Override + public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { + + if (i == TencentLocation.ERROR_OK && locationChangedListener != null) { + final Location location = new Location(tencentLocation.getProvider()); + //设置经纬度以及精度 + location.setLatitude(tencentLocation.getLatitude()); + location.setLongitude(tencentLocation.getLongitude()); + location.setAccuracy(tencentLocation.getAccuracy()); + locationChangedListener.onLocationChanged(location); + + //显示回调的实时位置信息 + runOnUiThread(new Runnable() { + @Override + public void run() { +// Rules.getEffectInfo(location); +// double distance = DistanceUtils.getDistance( +// locationA.getLatitude(), +// locationA.getLongitude(), +// locationB.getLatitude(), +// locationB.getLongitude() +// ); + mtvInfo.setText(String.format("\n%f %f", location.getLatitude(), location.getLongitude())); + //打印tencentLocation的json字符串 +// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); + } + }); + } + } + + @Override + public void onStatusUpdate(String s, int i, String s1) { + //GPS, WiFi, Radio 等状态发生变化 + Log.v("State changed", s + "===" + s1); + } + + + @Override + public void activate(OnLocationChangedListener onLocationChangedListener) { + locationChangedListener = onLocationChangedListener; + + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + switch (err) { + case 1: + Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); + break; + case 2: + Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show(); + break; + case 3: + Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show(); + break; + + default: + break; + } + } + + @Override + public void deactivate() { + locationManager.removeUpdates(this); + locationManager = null; + locationRequest = null; + locationChangedListener = null; + } + + @Override + public void onPermissionsGranted(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "success"); + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "failed"); + } + + private void checkLocationPermission() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, + PERMISSION_REQUEST_CODE); + } else { + // 权限已授予,可进行定位操作 + //startLocationUpdates(); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == PERMISSION_REQUEST_CODE) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //startLocationUpdates(); + } else { + // 用户拒绝了权限请求 + Toast.makeText(this, "请授予定位权限", Toast.LENGTH_SHORT).show(); + } + } + } + + + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java new file mode 100644 index 0000000..704d2d9 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java @@ -0,0 +1,40 @@ +package cc.winboll.studio.positions.activities; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/22 02:01:44 + */ +import android.graphics.Color; +import android.os.Bundle; +import android.widget.Button; +import android.widget.FrameLayout; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.positions.views.GridMapView; +import android.view.View.OnClickListener; +import android.view.View; + +public class GridMapActivity extends AppCompatActivity { + + GridMapView gridMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gridmap); + + // 初始化视图 + GridMapView mapView = (GridMapView) findViewById(R.id.map_view); + + // 设置网格参数 + mapView.setGridParameters(10000f, 10000f, 10f); + + // 初始化显示区域(中心点400,300,显示范围2000x200) + mapView.initViewport(5000f, 5000f, 1000f, 1000f); + + // 绘制图形 + mapView.drawPoint(5000f, 5000f, Color.RED, 8f); + mapView.drawCircle(5000f, 5000f, 50f, Color.BLUE, 8f); + mapView.drawLine(4975f, 4975f, 5025f, 5025f, Color.GREEN, 2f); + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java new file mode 100644 index 0000000..5639791 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java @@ -0,0 +1,138 @@ +package cc.winboll.studio.positions.activities; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/21 05:37:42 + */ +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; +import android.view.View; +import android.view.WindowManager; +import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.positions.R; +import com.hjq.toast.ToastUtils; +import java.lang.reflect.Field; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libappbase.IWinBollActivity; +import cc.winboll.studio.libappbase.bean.APPInfo; + +public class SettingsActivity extends AppCompatActivity implements IWinBollActivity { + + public static final String TAG = "SettingsActivity"; + + Toolbar mToolbar; + + @Override + public APPInfo getAppInfo() { + return null; + } + + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } + + @Override + public Toolbar initToolBar() { + return findViewById(R.id.activitymainToolbar1); + } + + @Override + public boolean isAddWinBollToolBar() { + return true; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + + // 初始化工具栏 + mToolbar = findViewById(R.id.activitymainToolbar1); + setSupportActionBar(mToolbar); + if (isEnableDisplayHomeAsUp()) { + // 显示后退按钮 + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + getSupportActionBar().setSubtitle(getTag()); + + } + + public void onDefaultPhone(View view) { + Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS); + startActivity(intent); + } + public void onCanDrawOverlays(View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && !Settings.canDrawOverlays(this)) { + // 请求 悬浮框 权限 + askForDrawOverlay(); + } else { + ToastUtils.show("悬浮窗已开启"); + } + } + + private void askForDrawOverlay() { + AlertDialog alertDialog = new AlertDialog.Builder(this) + .setTitle("允许显示悬浮框") + .setMessage("为了使电话监听服务正常工作,请允许这项权限") + .setPositiveButton("去设置", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which) { + openDrawOverlaySettings(); + dialog.dismiss(); + } + }) + .setNegativeButton("稍后再说", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .create(); + + //noinspection ConstantConditions + alertDialog.getWindow().setFlags( + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); + alertDialog.show(); + } + + /** + * 跳转悬浮窗管理设置界面 + */ + private void openDrawOverlaySettings() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // Android M 以上引导用户去系统设置中打开允许悬浮窗 + // 使用反射是为了用尽可能少的代码保证在大部分机型上都可用 + try { + Context context = this; + Class clazz = Settings.class; + Field field = clazz.getDeclaredField("ACTION_MANAGE_OVERLAY_PERMISSION"); + Intent intent = new Intent(field.get(null).toString()); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setData(Uri.parse("package:" + context.getPackageName())); + context.startActivity(intent); + } catch (Exception e) { + Toast.makeText(this, "请在悬浮窗管理中打开权限", Toast.LENGTH_LONG).show(); + } + } + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java new file mode 100644 index 0000000..22c8a63 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java @@ -0,0 +1,85 @@ +package cc.winboll.studio.positions.activities; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/24 12:14:04 + */ +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.heatoverlay.ScatterPlotOverlayActivity; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class TestMapViewActivity extends AppCompatActivity { + + public static final String TAG = "TestMapViewActivity"; + + /** + * 由于SDK并没有提供用于MapView管理地图生命周期的Activity + * 因此需要用户继承Activity后管理地图的生命周期,防止内存泄露 + */ + + private TextureMapView mapView; + protected TencentMap tencentMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_testmapview); + + mapView = findViewById(R.id.mapview); + mapView.setOpaque(false); + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + tencentMap = mapView.getMap(); + + } + + + /** + * mapview的生命周期管理 + */ + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onRestart() { + super.onRestart(); + mapView.onRestart(); + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java b/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java new file mode 100644 index 0000000..e550d46 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java @@ -0,0 +1,42 @@ +package cc.winboll.studio.positions.adapters; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 13:33:04 + * @Describe MyPagerAdapter + */ +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import cc.winboll.studio.positions.fragments.GmsFragment; +import cc.winboll.studio.positions.fragments.ContactsFragment; +import cc.winboll.studio.positions.fragments.LogFragment; + +public class MyPagerAdapter extends FragmentPagerAdapter { + public static final String TAG = "MyPagerAdapter"; + + private static final int PAGE_COUNT = 3; + + public MyPagerAdapter(@NonNull FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(int position) { + if(position == 1) { + return ContactsFragment.newInstance(position); + } else if(position == 2) { + return LogFragment.newInstance(position); + } else { + return GmsFragment.newInstance(position); + } + } + + @Override + public int getCount() { + return PAGE_COUNT; + } +} + diff --git a/positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java b/positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java new file mode 100644 index 0000000..92a38b1 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java @@ -0,0 +1,141 @@ +package cc.winboll.studio.positions.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/25 02:58:33 + * @Describe LocationJson + */ + +import android.util.JsonReader; +import android.util.JsonWriter; +import cc.winboll.studio.libappbase.BaseBean; +import java.io.IOException; +import android.location.Location; + +public class LocationJson extends BaseBean { + + public static final String TAG = "LocationJson"; + + private double latitude; + private double longitude; + private long timestamp; + private double accuracy; + private String provider; + + public LocationJson() { + this.latitude = 0.0f; + this.longitude = 0.0f; + this.timestamp = 0L; + this.accuracy = 0.0f; + this.provider = ""; + } + + public LocationJson(Location location) { + this.latitude = location.getLatitude(); + this.longitude = location.getLongitude(); + this.timestamp = location.getTime(); + this.accuracy = location.getAccuracy(); + this.provider = location.getProvider(); + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLatitude() { + return latitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public double getLongitude() { + return longitude; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public long getTimestamp() { + return timestamp; + } + + public void setAccuracy(double accuracy) { + this.accuracy = accuracy; + } + + public double getAccuracy() { + return accuracy; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getProvider() { + return provider; + } + + + @Override + public String getName() { + return LocationJson.class.getName(); + } + + @Override + public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { + super.writeThisToJsonWriter(jsonWriter); + jsonWriter.name("latitude").value(getLatitude()); + jsonWriter.name("longitude").value(getLongitude()); + jsonWriter.name("timestamp").value(getTimestamp()); + jsonWriter.name("accuracy").value(getAccuracy()); + jsonWriter.name("provider").value(getProvider()); + + } + + @Override + public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { + if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { + if (name.equals("latitude")) { + setLatitude(jsonReader.nextDouble()); + } else if (name.equals("longitude")) { + setLongitude(jsonReader.nextDouble()); + } else if (name.equals("timestamp")) { + setTimestamp(jsonReader.nextLong()); + } else if (name.equals("accuracy")) { + setAccuracy(jsonReader.nextDouble()); + } else if (name.equals("provider")) { + setProvider(jsonReader.nextString()); + } else { + return false; + } + } + return true; + } + + @Override + public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException { + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + String name = jsonReader.nextName(); + if (!initObjectsFromJsonReader(jsonReader, name)) { + jsonReader.skipValue(); + } + } + // 结束 JSON 对象 + jsonReader.endObject(); + return this; + } + + public Location toLocation() { + Location location = new Location(getProvider()); + location.setLatitude(getLatitude()); + location.setLongitude(getLongitude()); + location.setTime(getTimestamp()); + location.setAccuracy((float)getAccuracy()); + return location; + } + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/beans/MainServiceBean.java b/positions/src/main/java/cc/winboll/studio/positions/beans/MainServiceBean.java new file mode 100644 index 0000000..7c40d6f --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/beans/MainServiceBean.java @@ -0,0 +1,68 @@ +package cc.winboll.studio.positions.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 07:06:13 + */ +import android.util.JsonReader; +import android.util.JsonWriter; +import cc.winboll.studio.libappbase.BaseBean; +import java.io.IOException; + +public class MainServiceBean extends BaseBean { + + public static final String TAG = "MainServiceBean"; + + boolean isEnable; + + public MainServiceBean() { + this.isEnable = false; + } + + public void setIsEnable(boolean isEnable) { + this.isEnable = isEnable; + } + + public boolean isEnable() { + return isEnable; + } + + @Override + public String getName() { + return MainServiceBean.class.getName(); + } + + @Override + public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { + super.writeThisToJsonWriter(jsonWriter); + MainServiceBean bean = this; + jsonWriter.name("isEnable").value(bean.isEnable()); + + } + + @Override + public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { + if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { + if (name.equals("isEnable")) { + setIsEnable(jsonReader.nextBoolean()); + } else { + return false; + } + } + return true; + } + + @Override + public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException { + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + String name = jsonReader.nextName(); + if (!initObjectsFromJsonReader(jsonReader, name)) { + jsonReader.skipValue(); + } + } + // 结束 JSON 对象 + jsonReader.endObject(); + return this; + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/beans/RulsBean.java b/positions/src/main/java/cc/winboll/studio/positions/beans/RulsBean.java new file mode 100644 index 0000000..77df4b0 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/beans/RulsBean.java @@ -0,0 +1,15 @@ +package cc.winboll.studio.positions.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/25 01:21:17 + * @Describe 定位信息类 + */ +public class RulsBean { + + public static final String TAG = "LocationBean"; + + float latitude; + float longitude; + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java new file mode 100644 index 0000000..16b3880 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java @@ -0,0 +1,50 @@ +package cc.winboll.studio.positions.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:50 + * @Describe 联系人 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.positions.R; + +public class ContactsFragment extends Fragment { + + public static final String TAG = "ContactsFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static ContactsFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + ContactsFragment fragment = new ContactsFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_contacts, container, false); + TextView textView = view.findViewById(R.id.page_text); + textView.setText("这是第 " + mPage + " 页"); + return view; + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java new file mode 100644 index 0000000..a1157e6 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java @@ -0,0 +1,111 @@ +package cc.winboll.studio.positions.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:00 + * @Describe 拨号 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.libappbase.LogView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import android.graphics.Color; +import android.widget.TextView; +import cc.winboll.studio.positions.views.GridMapView; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; + +public class GmsFragment extends Fragment { + + public static final String TAG = "GmsFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + private TextureMapView mapView; + protected TencentMap tencentMap; + + public static GmsFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + GmsFragment fragment = new GmsFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_gms, container, false); + +// // 初始化视图 +// GridMapView mapView = (GridMapView) view.findViewById(R.id.map_view); +// +// // 设置网格参数 +// mapView.setGridParameters(10000f, 10000f, 10f); +// +// // 初始化显示区域(中心点400,300,显示范围2000x200) +// mapView.initViewport(5000f, 5000f, 1000f, 1000f); +// +// // 绘制图形 +// mapView.drawPoint(5000f, 5000f, Color.RED, 8f); +// mapView.drawCircle(5000f, 5000f, 50f, Color.BLUE, 8f); +// mapView.drawLine(4975f, 4975f, 5025f, 5025f, Color.GREEN, 2f); + + // 初始化地图视图 + mapView = view.findViewById(R.id.mapView); + mapView.setOpaque(false); + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + tencentMap = mapView.getMap(); + + return view; + } + + + /** + * mapview的生命周期管理 + */ + @Override + public void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + public void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java new file mode 100644 index 0000000..491cc40 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java @@ -0,0 +1,50 @@ +package cc.winboll.studio.positions.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:58:15 + * @Describe 应用日志 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.libappbase.LogView; + +public class LogFragment extends Fragment { + + public static final String TAG = "LogFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static LogFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + LogFragment fragment = new LogFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_log, container, false); + LogView logView = view.findViewById(R.id.logview); + logView.start(); + return view; + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java new file mode 100644 index 0000000..38b65d5 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -0,0 +1,461 @@ +package cc.winboll.studio.positions.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/25 12:44:39 + * @Describe 腾讯地图服务视图 + */ +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.location.Location; +import android.os.Bundle; +import android.os.Looper; +import android.os.SystemClock; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import cc.winboll.studio.libappbase.LogView; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.positions.activities.SettingsActivity; +import cc.winboll.studio.positions.activities.TestMapViewActivity; +import cc.winboll.studio.positions.utils.LocationFileStorage; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; +import com.tencent.map.geolocation.TencentLocation; +import com.tencent.map.geolocation.TencentLocationListener; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.map.geolocation.TencentLocationRequest; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapInitializer; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; +import java.util.ArrayList; +import java.util.List; +import pub.devrel.easypermissions.EasyPermissions; +import cc.winboll.studio.positions.beans.LocationJson; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.libappbase.LogView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import android.graphics.Color; +import android.widget.TextView; +import cc.winboll.studio.positions.views.GridMapView; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; + +public class TXMSFragment extends Fragment implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { + + public static final String TAG = "TXMSFragment"; + + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + private TextureMapView mapView; + protected TencentMap tencentMap; + TextView mtvInfo; + private LocationSource.OnLocationChangedListener locationChangedListener; + + private TencentLocationManager locationManager; + private TencentLocationRequest locationRequest; + private MyLocationStyle locationStyle; + ArrayList locationJsonList; + + public static TXMSFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + TXMSFragment fragment = new GmsFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View viewRoot = inflater.inflate(R.layout.fragment_gms, container, false); + locationJsonList = new ArrayList(); + + mLogView = viewRoot.findViewById(R.id.logview); + mLogView.start(); + + TencentMapInitializer.setAgreePrivacy(this, true); + TencentMapInitializer.start(this); + TencentLocationManager.setUserAgreePrivacy(true); + + + mapView = viewRoot.findViewById(R.id.mapview); + mapView.setOpaque(false); + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + tencentMap = mapView.getMap(); + + FloatingActionButton fab = viewRoot.findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show(); + } + }); + + mtvInfo = viewRoot.findViewById(R.id.tv_info); + + checkLocationPermission(); + + //设置显示定位的图标 + TencentLocationManager.setUserAgreePrivacy(true); + //建立定位 + //initLocation(); + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(22.984066, 116.307548), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + + // 设置地图点击监听 + tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener(){ + + @Override + public void onMapClick(com.tencent.tencentmap.mapsdk.maps.model.LatLng latLng) { + //创建Marker对象之前,设置属性 + //LatLng position = new LatLng(40.011313,116.391907); + BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker); + Location location = createLocationFromLatLng(latLng); + addLocationJson(location); + Marker mCustomMarker = tencentMap.addMarker(new MarkerOptions(latLng)); + + //创建Marker对象之后,修改属性 +// Animation animation = new AlphaAnimation(0.7f, 0f); +// animation.setDuration(2000); +// mCustomMarker.setAnimation(animation); +// mCustomMarker.startAnimation(); + } + }); + + + return viewRoot; + } + + void loadLocations() { + // 存储位置数据 +// Location location = new Location("gps"); +// location.setLatitude(22.984066); +// location.setLongitude(116.307548); +// location.setTime(System.currentTimeMillis()); +// +// // 方式1:保存到文件 +// List locations = new ArrayList<>(); +// locations.add(location); +// LocationFileStorage.saveToFile(this, locations); + + // 读取数据 + locationJsonList = LocationFileStorage.loadFromFile(this); + + for (LocationJson lj : locationJsonList) { + tencentMap.addMarker(new MarkerOptions(toTencentLatLng(lj.toLocation()))); + //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); + } + } + + void addLocationJson(Location location) { + // 存储位置数据 +// Location location = new Location("gps"); +// location.setLatitude(22.984066); +// location.setLongitude(116.307548); +// location.setTime(System.currentTimeMillis()); + + // 方式1:保存到文件 + //List locations = new ArrayList<>(); + locationJsonList.add(new LocationJson(location)); + LocationFileStorage.saveToFile(this, locationJsonList); + + // 读取数据 +// List loaded = LocationFileStorage.loadFromFile(this); +// for (Location loc : loaded) { +// tencentMap.addMarker(new MarkerOptions(toTencentLatLng(loc))); +// //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); +// } + } + + + +// 创建Location对象方法 + private Location createLocationFromLatLng(LatLng latLng) { + Location location = new Location("tencent_map_manual"); + + // 设置基础坐标 + location.setLatitude(latLng.getLatitude()); + location.setLongitude(latLng.getLongitude()); + + // 设置必要元数据 + location.setTime(System.currentTimeMillis()); + location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); + location.setAccuracy(5.0f); // 手动点击精度设为5米 + + return location; + } + + + public LatLng toTencentLatLng(Location location) { + return new LatLng( + location.getLatitude(), + location.getLongitude() + ); + } + + + // 添加标记方法 + private void addMarker(LatLng latLng) { + tencentMap.clearAllOverlays(); + MarkerOptions options = new MarkerOptions(latLng) + .icon(BitmapDescriptorFactory.defaultMarker()) + .title("点击保存"); + tencentMap.addMarker(options); + } + + /** + * mapview的生命周期管理 + */ + @Override + public void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + public void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); +// LatLng center = new LatLng(39.904556, 116.427242); +// tencentMap.moveCamera( +// CameraUpdateFactory.newLatLngZoom(center, 13f) // 注意 13 → 13f +// ); + loadLocations(); + } + + + /** + * 设置定位图标样式 + */ + private void setLocMarkerStyle() { + locationStyle = new MyLocationStyle(); + //创建图标 + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + locationStyle.icon(bitmapDescriptor); + //设置定位圆形区域的边框宽度 + locationStyle.strokeWidth(3); + //设置圆区域的颜色 + locationStyle.fillColor(R.color.style); + + tencentMap.setMyLocationStyle(locationStyle); + } + + + + private Bitmap getBitMap(int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 55; + int newHeight = 55; + float widthScale = ((float)newWidth) / width; + float heightScale = ((float)newHeight) / height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); + return bitmap; + } + + + + /** + * 定位的一些初始化设置 + */ + private void initLocation() { + //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + locationManager = TencentLocationManager.getInstance(this); + //设置坐标系 + locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); + //创建定位请求 + locationRequest = TencentLocationRequest.create(); + //设置定位周期(位置监听器回调周期)为3s + locationRequest.setInterval(3000); + + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + setLocMarkerStyle(); +// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); + tencentMap.setMyLocationStyle(locationStyle); + } + /** + * 实现位置监听 + * @param tencentLocation + * @param i + * @param s + */ + @Override + public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { + + if (i == TencentLocation.ERROR_OK && locationChangedListener != null) { + final Location location = new Location(tencentLocation.getProvider()); + //设置经纬度以及精度 + location.setLatitude(tencentLocation.getLatitude()); + location.setLongitude(tencentLocation.getLongitude()); + location.setAccuracy(tencentLocation.getAccuracy()); + locationChangedListener.onLocationChanged(location); + + //显示回调的实时位置信息 + runOnUiThread(new Runnable() { + @Override + public void run() { +// Rules.getEffectInfo(location); +// double distance = DistanceUtils.getDistance( +// locationA.getLatitude(), +// locationA.getLongitude(), +// locationB.getLatitude(), +// locationB.getLongitude() +// ); + mtvInfo.setText(String.format("\n%f %f", location.getLatitude(), location.getLongitude())); + //打印tencentLocation的json字符串 +// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); + } + }); + } + } + + @Override + public void onStatusUpdate(String s, int i, String s1) { + //GPS, WiFi, Radio 等状态发生变化 + Log.v("State changed", s + "===" + s1); + } + + + @Override + public void activate(OnLocationChangedListener onLocationChangedListener) { + locationChangedListener = onLocationChangedListener; + + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + switch (err) { + case 1: + Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); + break; + case 2: + Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show(); + break; + case 3: + Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show(); + break; + + default: + break; + } + } + + @Override + public void deactivate() { + locationManager.removeUpdates(this); + locationManager = null; + locationRequest = null; + locationChangedListener = null; + } + + @Override + public void onPermissionsGranted(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "success"); + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "failed"); + } + + private void checkLocationPermission() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, + PERMISSION_REQUEST_CODE); + } else { + // 权限已授予,可进行定位操作 + //startLocationUpdates(); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == PERMISSION_REQUEST_CODE) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //startLocationUpdates(); + } else { + // 用户拒绝了权限请求 + Toast.makeText(this, "请授予定位权限", Toast.LENGTH_SHORT).show(); + } + } + } + + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/gps/LocationActivity.java b/positions/src/main/java/cc/winboll/studio/positions/gps/LocationActivity.java new file mode 100644 index 0000000..554b252 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/gps/LocationActivity.java @@ -0,0 +1,3 @@ +package cc.winboll.studio.positions.gps; + + diff --git a/positions/src/main/java/cc/winboll/studio/positions/handlers/MainServiceHandler.java b/positions/src/main/java/cc/winboll/studio/positions/handlers/MainServiceHandler.java new file mode 100644 index 0000000..d4c6030 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/handlers/MainServiceHandler.java @@ -0,0 +1,38 @@ +package cc.winboll.studio.positions.handlers; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/14 03:51:40 + */ +import android.os.Handler; +import android.os.Message; +import cc.winboll.studio.positions.services.MainService; +import java.lang.ref.WeakReference; + +public class MainServiceHandler extends Handler { + public static final String TAG = "MainServiceHandler"; + + public static final int MSG_REMINDTHREAD = 0; + + WeakReference serviceWeakReference; + public MainServiceHandler(MainService service) { + serviceWeakReference = new WeakReference(service); + } + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_REMINDTHREAD: // 处理下载完成消息,更新UI + { + // 显示提醒消息 + // + //LogUtils.d(TAG, "显示提醒消息"); + MainService mainService = serviceWeakReference.get(); + if (mainService != null) { + mainService.appenMessage((String)msg.obj); + } + break; + } + } + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/receivers/MainReceiver.java b/positions/src/main/java/cc/winboll/studio/positions/receivers/MainReceiver.java new file mode 100644 index 0000000..d3daaa5 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/receivers/MainReceiver.java @@ -0,0 +1,49 @@ +package cc.winboll.studio.positions.receivers; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 06:58:04 + * @Describe 主要广播接收器 + */ +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import cc.winboll.studio.positions.services.MainService; +import com.hjq.toast.ToastUtils; +import java.lang.ref.WeakReference; + +public class MainReceiver extends BroadcastReceiver { + + public static final String TAG = "MainReceiver"; + public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; + WeakReference mwrService; + // 存储电量指示值, + // 用于校验电量消息时的电量变化 + static volatile int _mnTheQuantityOfElectricityOld = -1; + static volatile boolean _mIsCharging = false; + + public MainReceiver(MainService service) { + mwrService = new WeakReference(service); + } + + @Override + public void onReceive(Context context, Intent intent) { + String szAction = intent.getAction(); + if (szAction.equals(ACTION_BOOT_COMPLETED)) { + ToastUtils.show("ACTION_BOOT_COMPLETED"); + MainService.startMainService(context); + } else { + ToastUtils.show(szAction); + } + } + + // 注册 Receiver + // + public void registerAction(Context context) { + IntentFilter filter=new IntentFilter(); + filter.addAction(ACTION_BOOT_COMPLETED); + //filter.addAction(Intent.ACTION_BATTERY_CHANGED); + context.registerReceiver(this, filter); + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java b/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java new file mode 100644 index 0000000..192d8c2 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java @@ -0,0 +1,139 @@ +package cc.winboll.studio.positions.services; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/14 03:38:31 + * @Describe 守护进程服务 + */ +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Binder; +import android.os.IBinder; +import cc.winboll.studio.positions.beans.MainServiceBean; +import cc.winboll.studio.positions.services.MainService; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.SOS; +import cc.winboll.studio.libappbase.bean.APPSOSBean; + +public class AssistantService extends Service { + + public static final String TAG = "AssistantService"; + + MainServiceBean mMainServiceBean; + MyServiceConnection mMyServiceConnection; + MainService mMainService; + boolean isBound = false; + volatile boolean isThreadAlive = false; + + public synchronized void setIsThreadAlive(boolean isThreadAlive) { + LogUtils.d(TAG, "setIsThreadAlive(...)"); + LogUtils.d(TAG, String.format("isThreadAlive %s", isThreadAlive)); + this.isThreadAlive = isThreadAlive; + } + + public boolean isThreadAlive() { + return isThreadAlive; + } + + @Override + public IBinder onBind(Intent intent) { + return new MyBinder(); + } + + @Override + public void onCreate() { + LogUtils.d(TAG, "onCreate"); + super.onCreate(); + + //mMyBinder = new MyBinder(); + if (mMyServiceConnection == null) { + mMyServiceConnection = new MyServiceConnection(); + } + // 设置运行参数 + setIsThreadAlive(false); + assistantService(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + LogUtils.d(TAG, "call onStartCommand(...)"); + assistantService(); + return START_STICKY; + } + + @Override + public void onDestroy() { + //LogUtils.d(TAG, "onDestroy"); + setIsThreadAlive(false); + // 解除绑定 + if (isBound) { + unbindService(mMyServiceConnection); + isBound = false; + } + super.onDestroy(); + } + + // 运行服务内容 + // + void assistantService() { + LogUtils.d(TAG, "assistantService()"); + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + LogUtils.d(TAG, String.format("mMainServiceBean.isEnable() %s", mMainServiceBean.isEnable())); + if (mMainServiceBean.isEnable()) { + LogUtils.d(TAG, String.format("mIsThreadAlive %s", isThreadAlive())); + if (isThreadAlive() == false) { + // 设置运行状态 + setIsThreadAlive(true); + // 唤醒和绑定主进程 + wakeupAndBindMain(); + } + } + } + + // 唤醒和绑定主进程 + // + void wakeupAndBindMain() { + LogUtils.d(TAG, "wakeupAndBindMain()"); + // 绑定服务的Intent + Intent intent = new Intent(this, MainService.class); + startService(new Intent(this, MainService.class)); + bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT); + +// startService(new Intent(this, MainService.class)); +// bindService(new Intent(AssistantService.this, MainService.class), mMyServiceConnection, Context.BIND_IMPORTANT); + } + + // 主进程与守护进程连接时需要用到此类 + // + class MyServiceConnection implements ServiceConnection { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + LogUtils.d(TAG, "onServiceConnected(...)"); + MainService.MyBinder binder = (MainService.MyBinder) service; + mMainService = binder.getService(); + isBound = true; + } + + @Override + public void onServiceDisconnected(ComponentName name) { + LogUtils.d(TAG, "onServiceDisconnected(...)"); + mMainServiceBean = MainServiceBean.loadBean(AssistantService.this, MainServiceBean.class); + if (mMainServiceBean.isEnable()) { + wakeupAndBindMain(); + } + isBound = false; + mMainService = null; + } + } + + // 用于返回服务实例的Binder + public class MyBinder extends Binder { + AssistantService getService() { + LogUtils.d(TAG, "AssistantService MyBinder getService()"); + return AssistantService.this; + } + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java b/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java new file mode 100644 index 0000000..1288821 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java @@ -0,0 +1,228 @@ +package cc.winboll.studio.positions.services; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 06:56:41 + * @Describe 拨号主服务 + * 参考: + * 进程保活-双进程守护的正确姿势 + * https://blog.csdn.net/sinat_35159441/article/details/75267380 + * Android Service之onStartCommand方法研究 + * https://blog.csdn.net/cyp331203/article/details/38920491 + */ +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Binder; +import android.os.IBinder; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.SOS; +import cc.winboll.studio.libappbase.bean.APPSOSBean; +import cc.winboll.studio.positions.beans.MainServiceBean; +import cc.winboll.studio.positions.handlers.MainServiceHandler; +import cc.winboll.studio.positions.receivers.MainReceiver; +import cc.winboll.studio.positions.services.MainService; +import cc.winboll.studio.positions.threads.MainServiceThread; + +public class MainService extends Service { + + public static final String TAG = "MainService"; + + public static final int MSG_UPDATE_STATUS = 0; + + static MainService _mControlCenterService; + + volatile boolean isServiceRunning; + + MainServiceBean mMainServiceBean; + MainServiceThread mMainServiceThread; + MainServiceHandler mMainServiceHandler; + MyServiceConnection mMyServiceConnection; + AssistantService mAssistantService; + boolean isBound = false; + MainReceiver mMainReceiver; + + @Override + public IBinder onBind(Intent intent) { + return new MyBinder(); + } + + public MainServiceThread getRemindThread() { + return mMainServiceThread; + } + + @Override + public void onCreate() { + super.onCreate(); + LogUtils.d(TAG, "onCreate()"); + _mControlCenterService = MainService.this; + isServiceRunning = false; + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + + if (mMyServiceConnection == null) { + mMyServiceConnection = new MyServiceConnection(); + } + mMainServiceHandler = new MainServiceHandler(this); + + // 运行服务内容 + mainService(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + LogUtils.d(TAG, "onStartCommand(...)"); + // 运行服务内容 + mainService(); + return (mMainServiceBean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId); + } + + // 运行服务内容 + // + void mainService() { + LogUtils.d(TAG, "mainService()"); + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + if (mMainServiceBean.isEnable() && isServiceRunning == false) { + LogUtils.d(TAG, "mainService() start running"); + isServiceRunning = true; + // 唤醒守护进程 + wakeupAndBindAssistant(); + // 召唤 WinBoll APP 绑定本服务 + SOS.bindToAPPService(this, new APPSOSBean(getPackageName(), MainService.class.getName())); + + if (mMainReceiver == null) { + // 注册广播接收器 + mMainReceiver = new MainReceiver(this); + mMainReceiver.registerAction(this); + } + + + MainServiceThread.getInstance(this, mMainServiceHandler).start(); + + LogUtils.i(TAG, "Main Service Is Start."); + } + } + + // 唤醒和绑定守护进程 + // + void wakeupAndBindAssistant() { + LogUtils.d(TAG, "wakeupAndBindAssistant()"); +// if (ServiceUtils.isServiceAlive(getApplicationContext(), AssistantService.class.getName()) == false) { +// startService(new Intent(MainService.this, AssistantService.class)); +// //LogUtils.d(TAG, "call wakeupAndBindAssistant() : Binding... AssistantService"); +// bindService(new Intent(MainService.this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); +// } + Intent intent = new Intent(this, AssistantService.class); + startService(intent); + // 绑定服务的Intent + //Intent intent = new Intent(this, AssistantService.class); + bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT); + +// Intent intent = new Intent(this, AssistantService.class); +// startService(intent); +// LogUtils.d(TAG, "startService(intent)"); +// bindService(new Intent(this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); + } + + @Override + public void onDestroy() { + //LogUtils.d(TAG, "onDestroy"); + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + //LogUtils.d(TAG, "onDestroy done"); + if (mMainServiceBean.isEnable() == false) { + // 设置运行状态 + isServiceRunning = false;// 解除绑定 + if (isBound) { + unbindService(mMyServiceConnection); + isBound = false; + } + // 停止守护进程 + Intent intent = new Intent(this, AssistantService.class); + stopService(intent); + // 停止Receiver + if (mMainReceiver != null) { + unregisterReceiver(mMainReceiver); + mMainReceiver = null; + } + // 停止前台通知栏 + stopForeground(true); + + // 停止主要进程 + MainServiceThread.getInstance(this, mMainServiceHandler).setIsExit(true); + } + + super.onDestroy(); + } + + // 主进程与守护进程连接时需要用到此类 + // + private class MyServiceConnection implements ServiceConnection { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + LogUtils.d(TAG, "onServiceConnected(...)"); + AssistantService.MyBinder binder = (AssistantService.MyBinder) service; + mAssistantService = binder.getService(); + isBound = true; + } + + @Override + public void onServiceDisconnected(ComponentName name) { + LogUtils.d(TAG, "onServiceDisconnected(...)"); + if (mMainServiceBean.isEnable()) { + // 唤醒守护进程 + wakeupAndBindAssistant(); + SOS.sosWinBollService(getApplicationContext(), new APPSOSBean(getPackageName(), MainService.class.getName())); + } + isBound = false; + mAssistantService = null; + } + + } + + + // 用于返回服务实例的Binder + public class MyBinder extends Binder { + MainService getService() { + LogUtils.d(TAG, "MainService MyBinder getService()"); + return MainService.this; + } + } + +// // +// // 启动服务 +// // +// public static void startControlCenterService(Context context) { +// Intent intent = new Intent(context, MainService.class); +// context.startForegroundService(intent); +// } +// +// // +// // 停止服务 +// // +// public static void stopControlCenterService(Context context) { +// Intent intent = new Intent(context, MainService.class); +// context.stopService(intent); +// } + + public void appenMessage(String message) { + LogUtils.d(TAG, String.format("Message : %s", message)); + } + + public static void stopMainService(Context context) { + LogUtils.d(TAG, "stopMainService"); + MainServiceBean bean = new MainServiceBean(); + bean.setIsEnable(false); + MainServiceBean.saveBean(context, bean); + context.stopService(new Intent(context, MainService.class)); + } + + public static void startMainService(Context context) { + LogUtils.d(TAG, "startMainService"); + MainServiceBean bean = new MainServiceBean(); + bean.setIsEnable(true); + MainServiceBean.saveBean(context, bean); + context.startService(new Intent(context, MainService.class)); + } +} + diff --git a/positions/src/main/java/cc/winboll/studio/positions/tasks/Rules.java b/positions/src/main/java/cc/winboll/studio/positions/tasks/Rules.java new file mode 100644 index 0000000..2fdacd3 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/tasks/Rules.java @@ -0,0 +1,34 @@ +package cc.winboll.studio.positions.tasks; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/25 01:15:08 + * @Describe 定位规则类 + */ +import com.tencent.map.geolocation.TencentLocation; +import android.location.Location; + +public class Rules { + + public static final String TAG = "Rules"; + + public static String getEffectInfo(Location locationA) { + //Location locationB = new Location(22.0f, 111.0f); + // 腾讯SDK返回的坐标点(注意坐标系需统一) + //TencentLocation locationA = ...; // 第一个点 + //TencentLocation locationB = ...; // 第二个点 + +// float[] results = new float[1]; +// Location.distanceBetween( +// locationA.getLatitude(), // 纬度 +// locationA.getLongitude(), // 经度 +// locationB.getLatitude(), +// locationB.getLongitude(), +// results +// ); +// +// return "两点距离:" + results[0] + "米"; + return ""; + } + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java b/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java new file mode 100644 index 0000000..c0eab8c --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java @@ -0,0 +1,77 @@ +package cc.winboll.studio.positions.threads; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/14 03:46:44 + */ +import android.content.Context; +import cc.winboll.studio.positions.handlers.MainServiceHandler; +import cc.winboll.studio.positions.services.MainService; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.SOS; +import cc.winboll.studio.libappbase.bean.APPSOSBean; +import com.hjq.toast.ToastUtils; +import java.lang.ref.WeakReference; + +public class MainServiceThread extends Thread { + + public static final String TAG = "MainServiceThread"; + + volatile static MainServiceThread _MainServiceThread; + // 控制线程是否退出的标志 + volatile boolean isExit = false; + volatile boolean isStarted = false; + Context mContext; + // 服务Handler, 用于线程发送消息使用 + WeakReference mwrMainServiceHandler; + + MainServiceThread(Context context, MainServiceHandler handler) { + mContext = context; + mwrMainServiceHandler = new WeakReference(handler); + } + + public void setIsExit(boolean isExit) { + this.isExit = isExit; + } + + public boolean isExit() { + return isExit; + } + + public void setIsStarted(boolean isStarted) { + this.isStarted = isStarted; + } + + public boolean isStarted() { + return isStarted; + } + + public static MainServiceThread getInstance(Context context, MainServiceHandler handler) { + if (_MainServiceThread != null) { + _MainServiceThread.setIsExit(true); + } + _MainServiceThread = new MainServiceThread(context, handler); + return _MainServiceThread; + } + + @Override + public void run() { + if (isStarted == false) { + isStarted = true; + LogUtils.d(TAG, "run()"); + + while (!isExit()) { + //ToastUtils.show("run"); + //LogUtils.d(TAG, "run()"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + } + _MainServiceThread = null; + LogUtils.d(TAG, "run() exit"); + } + } + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java b/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java new file mode 100644 index 0000000..2a77d2f --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java @@ -0,0 +1,42 @@ +package cc.winboll.studio.positions.utils; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/25 03:02:17 + * @Describe LocationFileStorage + */ +import android.content.Context; +import android.location.Location; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import org.json.JSONArray; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.positions.beans.LocationJson; + +public class LocationFileStorage { + public static final String TAG = "LocationFileStorage"; + + private static final String FILE_NAME = "locations.json"; + + public static void saveToFile(Context context, ArrayList locations) { + try { + LocationJson.saveBeanList(context, locations, LocationJson.class); + } catch (Exception e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + } + + public static ArrayList loadFromFile(Context context) { + ArrayList result = new ArrayList(); + try { + LocationJson.loadBeanList(context, result, LocationJson.class); + } catch (Exception e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + return result; + } +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/views/GridMapView.java b/positions/src/main/java/cc/winboll/studio/positions/views/GridMapView.java new file mode 100644 index 0000000..63e925e --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/views/GridMapView.java @@ -0,0 +1,246 @@ +package cc.winboll.studio.positions.views; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/22 03:32:48 + * @Describe GridMapView + */ +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PointF; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; +import java.util.ArrayList; +import java.util.List; + +public class GridMapView extends View { + // 网格参数 + private float gridTotalWidth = 1000f; + private float gridTotalHeight = 1000f; + private float gridSpacing = 50f; + + // 视图变换参数 + private float offsetX = 0f; + private float offsetY = 0f; + private float scaleFactor = 1.0f; + private final float minScale = 0.5f; + private final float maxScale = 5.0f; + + // 手势检测 + private final ScaleGestureDetector scaleDetector; + private float lastTouchX; + private float lastTouchY; + + // 图形存储 + private final List shapes = new ArrayList(); + + public GridMapView(Context context) { + this(context, null); + } + + public GridMapView(Context context, AttributeSet attrs) { + super(context, attrs); + scaleDetector = new ScaleGestureDetector(context, new ScaleListener()); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.save(); + canvas.translate(offsetX, offsetY); + canvas.scale(scaleFactor, scaleFactor); + + drawGrid(canvas); + drawShapes(canvas); + + canvas.restore(); + } + + private void drawGrid(Canvas canvas) { + Paint gridPaint = new Paint(); + gridPaint.setColor(Color.LTGRAY); + gridPaint.setStrokeWidth(1f / scaleFactor); + + // 绘制垂直线 + for (float x = 0; x <= gridTotalWidth; x += gridSpacing) { + canvas.drawLine(x, 0, x, gridTotalHeight, gridPaint); + } + + // 绘制水平线 + for (float y = 0; y <= gridTotalHeight; y += gridSpacing) { + canvas.drawLine(0, y, gridTotalWidth, y, gridPaint); + } + } + + private void drawShapes(Canvas canvas) { + for (MapShape shape : shapes) { + shape.draw(canvas); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + scaleDetector.onTouchEvent(event); + + final int action = event.getAction(); + final float x = event.getX(); + final float y = event.getY(); + + switch (action) { + case MotionEvent.ACTION_DOWN: + if (!scaleDetector.isInProgress()) { + lastTouchX = x; + lastTouchY = y; + } + break; + + case MotionEvent.ACTION_MOVE: + if (!scaleDetector.isInProgress()) { + final float dx = x - lastTouchX; + final float dy = y - lastTouchY; + + offsetX += dx; + offsetY += dy; + invalidate(); + + lastTouchX = x; + lastTouchY = y; + } + break; + } + + return true; + } + + // 初始化视图显示区域 + public void initViewport(final float centerX, final float centerY, + final float viewWidth, final float viewHeight) { + post(new Runnable() { + @Override + public void run() { + float viewportWidth = getWidth(); + float viewportHeight = getHeight(); + + float widthScale = viewportWidth / viewWidth; + float heightScale = viewportHeight / viewHeight; + scaleFactor = Math.min(widthScale, heightScale); + + offsetX = viewportWidth/2 - centerX * scaleFactor; + offsetY = viewportHeight/2 - centerY * scaleFactor; + invalidate(); + } + }); + } + + // 图形绘制方法 + public void drawPoint(float x, float y, int color, float size) { + shapes.add(new MapShape(MapShape.TYPE_POINT, x, y, color, size)); + invalidate(); + } + + public void drawCircle(float x, float y, float radius, int color, float strokeWidth) { + MapShape shape = new MapShape(MapShape.TYPE_CIRCLE, x, y, color, radius); + shape.setStrokeWidth(strokeWidth); + shapes.add(shape); + invalidate(); + } + + public void drawLine(float startX, float startY, float endX, float endY, + int color, float strokeWidth) { + MapShape shape = new MapShape(MapShape.TYPE_LINE, startX, startY, endX, endY, color); + shape.setStrokeWidth(strokeWidth); + shapes.add(shape); + invalidate(); + } + + // 网格参数设置 + public void setGridParameters(float totalWidth, float totalHeight, float spacing) { + gridTotalWidth = totalWidth; + gridTotalHeight = totalHeight; + gridSpacing = spacing; + invalidate(); + } + + private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { + @Override + public boolean onScale(ScaleGestureDetector detector) { + float newScale = scaleFactor * detector.getScaleFactor(); + newScale = Math.max(minScale, Math.min(newScale, maxScale)); + + float focusX = detector.getFocusX(); + float focusY = detector.getFocusY(); + + offsetX = focusX - ((focusX - offsetX) / scaleFactor * newScale); + offsetY = focusY - ((focusY - offsetY) / scaleFactor * newScale); + + scaleFactor = newScale; + invalidate(); + return true; + } + } + + private static class MapShape { + static final int TYPE_POINT = 0; + static final int TYPE_CIRCLE = 1; + static final int TYPE_LINE = 2; + + final int type; + final PointF[] points; + final int color; + float radius; + float strokeWidth = 2f; + + MapShape(int type, float x, float y, int color, float size) { + this.type = type; + this.points = new PointF[]{new PointF(x, y)}; + this.color = color; + this.radius = size; + } + + MapShape(int type, float x1, float y1, float x2, float y2, int color) { + this.type = type; + this.points = new PointF[]{ + new PointF(x1, y1), + new PointF(x2, y2) + }; + this.color = color; + } + + MapShape setStrokeWidth(float width) { + this.strokeWidth = width; + return this; + } + + void draw(Canvas canvas) { + Paint paint = new Paint(); + paint.setColor(color); + + switch (type) { + case TYPE_POINT: + paint.setStyle(Paint.Style.FILL); + canvas.drawCircle(points[0].x, points[0].y, radius, paint); + break; + + case TYPE_CIRCLE: + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(strokeWidth); + canvas.drawCircle(points[0].x, points[0].y, radius, paint); + break; + + case TYPE_LINE: + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(strokeWidth); + canvas.drawLine( + points[0].x, points[0].y, + points[1].x, points[1].y, + paint + ); + break; + } + } + } +} diff --git a/positions/src/main/java/com/.DS_Store b/positions/src/main/java/com/.DS_Store new file mode 100644 index 0000000..5115a43 Binary files /dev/null and b/positions/src/main/java/com/.DS_Store differ diff --git a/positions/src/main/java/com/tencent/.DS_Store b/positions/src/main/java/com/tencent/.DS_Store new file mode 100644 index 0000000..1ec5418 Binary files /dev/null and b/positions/src/main/java/com/tencent/.DS_Store differ diff --git a/positions/src/main/java/com/tencent/map/.DS_Store b/positions/src/main/java/com/tencent/map/.DS_Store new file mode 100644 index 0000000..5948dff Binary files /dev/null and b/positions/src/main/java/com/tencent/map/.DS_Store differ diff --git a/positions/src/main/java/com/tencent/map/vector/.DS_Store b/positions/src/main/java/com/tencent/map/vector/.DS_Store new file mode 100644 index 0000000..8067953 Binary files /dev/null and b/positions/src/main/java/com/tencent/map/vector/.DS_Store differ diff --git a/positions/src/main/java/com/tencent/map/vector/demo/.DS_Store b/positions/src/main/java/com/tencent/map/vector/demo/.DS_Store new file mode 100644 index 0000000..e7a62d4 Binary files /dev/null and b/positions/src/main/java/com/tencent/map/vector/demo/.DS_Store differ diff --git a/positions/src/main/java/com/tencent/map/vector/demo/AbsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/AbsActivity.java new file mode 100644 index 0000000..d7a3eb6 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/AbsActivity.java @@ -0,0 +1,46 @@ +package com.tencent.map.vector.demo; + +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.positions.R; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbsActivity extends AppCompatActivity { + + private static final int PERMISSIONS_REQUEST_CODE = 0x99FF; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + requestPermission(); + } + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void requestPermission() { + String[] permissions = onRequestPermissions(); + if (permissions != null) { + List deniedPermissions = new ArrayList<>(); + for (String permission : permissions) { + if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { + deniedPermissions.add(permission); + } + } + + if (deniedPermissions.size() > 0) { + requestPermissions(deniedPermissions.toArray(new String[0]), PERMISSIONS_REQUEST_CODE); + } + } + } + + protected String[] onRequestPermissions() { + return null; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/AbsListActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/AbsListActivity.java new file mode 100644 index 0000000..22327e3 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/AbsListActivity.java @@ -0,0 +1,32 @@ +package com.tencent.map.vector.demo; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import cc.winboll.studio.positions.R; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.tencentmap.mapsdk.maps.TencentMapInitializer; + +public abstract class AbsListActivity extends AbsActivity { + + protected int getLayoutId() { + return R.layout.activity_recycler_container; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + TencentMapInitializer.setAgreePrivacy(this, true); + TencentMapInitializer.start(this); + TencentLocationManager.setUserAgreePrivacy(true); + final String PRIVACY_URL = "https://privacy.qq.com/document/preview/a10a8634f237464da9a95f4f07e73e40"; + findViewById(R.id.tv_user).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(PRIVACY_URL))); + } + }); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/AbsMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/AbsMapActivity.java new file mode 100644 index 0000000..f8c8231 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/AbsMapActivity.java @@ -0,0 +1,53 @@ +package com.tencent.map.vector.demo; + +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentManager; +import android.view.Menu; +import android.view.MenuItem; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.SupportMapFragment; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; + +public abstract class AbsMapActivity extends AbsActivity { + + private TencentMap mTencentMap; + + protected int getLayoutId() { + return R.layout.activity_map_container; + } + + @Override + protected final void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + + FragmentManager manager = getSupportFragmentManager(); + SupportMapFragment fragment = (SupportMapFragment) manager.findFragmentById(R.id.fragment_map); + if (fragment != null) { + mTencentMap = fragment.getMap(); + } + + onCreate(savedInstanceState, mTencentMap); + } + + protected boolean checkMapInvalid() { + return mTencentMap == null || mTencentMap.isDestroyed(); + } + + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) { + + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + supportInvalidateOptionsMenu(); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/DemoMainActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/DemoMainActivity.java new file mode 100644 index 0000000..3497d79 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/DemoMainActivity.java @@ -0,0 +1,277 @@ +package com.tencent.map.vector.demo; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.ListAdapter; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import cc.winboll.studio.positions.R; + +public class DemoMainActivity extends AbsListActivity { + + private static final String DEMO_TYPE = "DEMO_TYPE"; + + private static List mDemoTypes; + private static Map> mDemoMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getDemos(); + setupViews(getIntent().getStringExtra(DEMO_TYPE)); + } + + @Override + protected String[] onRequestPermissions() { + return new String[]{ + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + }; + } + + @Override + protected int getLayoutId() { + return R.layout.activity_demomain; + } + + private void setupViews(String type) { + RecyclerView recyclerView = findViewById(R.id.layout_recycle_container); + if (recyclerView != null) { + RecyclerView.LayoutManager layoutManager = + new LinearLayoutManager(getApplicationContext()); + recyclerView.setLayoutManager(layoutManager); + recyclerView.addItemDecoration(new DividerItemDecoration( + getApplicationContext(), DividerItemDecoration.VERTICAL)); + + DemoActivityAdapter activityAdapter = new DemoActivityAdapter(type); + recyclerView.setAdapter(activityAdapter); + } + } + + private void getDemos() { + if (mDemoMap != null) { + return; + } + + mDemoMap = new HashMap<>(16); + mDemoTypes = new ArrayList<>(16); + + ActivityInfo[] activityIfs = new ActivityInfo[0]; + try { + activityIfs = getPackageManager().getPackageInfo(getPackageName(), + PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA).activities; + } catch (PackageManager.NameNotFoundException pE) { + pE.printStackTrace(); + } + + for (ActivityInfo activityInfo : activityIfs) { + if (activityInfo.metaData != null) { + String demoType = activityInfo.metaData.getString( + getResources().getString(R.string.demo_type)); + List items = mDemoMap.get(demoType); + if (items == null) { + items = new ArrayList<>(); + mDemoMap.put(demoType, items); + mDemoTypes.add(new DemoInfo( + DemoMainActivity.class.getName(), + demoType, + "")); + } + + items.add(new DemoInfo( + activityInfo.name, + getString(activityInfo.labelRes), + getString(activityInfo.descriptionRes))); + } + } + } + + static class DemoInfo { + private String name; + private String label; + private String description; + + public DemoInfo(String name, String label, String description) { + this.name = name; + this.label = label; + this.description = description; + } + + public String getName() { + return name; + } + + public String getLabel() { + return label; + } + + public String getDescription() { + return description; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof DemoInfo)) { + return false; + } + + DemoInfo info = (DemoInfo) obj; + + if (!Objects.equals(this.name, info.name)) { + return false; + } + if (!Objects.equals(this.label, info.label)) { + return false; + } + if (!Objects.equals(this.description, info.description)) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + int hash = name != null ? name.hashCode() : 0; + hash = 31 * hash + (label != null ? label.hashCode() : 0); + hash = 31 * hash + (description != null ? description.hashCode() : 0); + return hash; + } + } + + private class DemoActivityAdapter extends ListAdapter { + + private int mType; + + DemoActivityAdapter(String type) { + super(new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull DemoInfo oldItem, @NonNull DemoInfo newItem) { + return oldItem.name.equals(newItem.name); + } + + @Override + public boolean areContentsTheSame(@NonNull DemoInfo oldItem, @NonNull DemoInfo newItem) { + return oldItem.equals(newItem); + } + }); + if (TextUtils.isEmpty(type)) { + mType = DemoInfoHolder.ITEM_TYPE_GROUP; + submitList(mDemoTypes); + } else { + mType = DemoInfoHolder.ITEM_TYPE_ENTRY; + submitList(mDemoMap.get(type)); + } + } + + @NonNull + @Override + public DemoInfoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new DemoInfoHolder(DemoMainActivity.this, parent, viewType); + } + + @Override + public void onBindViewHolder(@NonNull DemoInfoHolder holder, int position) { + holder.bindView(getItem(position)); + } + + @Override + public int getItemViewType(int position) { + return mType; + } + } + + static class DemoInfoHolder extends RecyclerView.ViewHolder { + + private static final int ITEM_TYPE_GROUP = 0; + private static final int ITEM_TYPE_ENTRY = 1; + + private int mViewType; + + private TextView mTitle; + private TextView mSubTitle; + + private Context mContext; + + DemoInfoHolder(Context context, ViewGroup pParent, int pViewType) { + super(LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_2, pParent, false)); + mViewType = pViewType; + mContext = context; + + mTitle = itemView.findViewById(android.R.id.text1); + mTitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + + mSubTitle = itemView.findViewById(android.R.id.text2); + mSubTitle.setTextColor(Color.GRAY); + + } + + void bindView(T pItem) { + if (mViewType == ITEM_TYPE_GROUP) { + setupItemGroup(pItem); + } else if (mViewType == ITEM_TYPE_ENTRY) { + setupItemEntry(pItem); + } + } + + private void setupItemGroup(final T pItem) { + mTitle.setText(pItem.getLabel()); + mSubTitle.setVisibility(View.GONE); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + Intent intent = new Intent(mContext, Class.forName(pItem.getName())); + intent.putExtra(DEMO_TYPE, pItem.getLabel()); + mContext.startActivity(intent); + } catch (ClassNotFoundException pE) { + pE.printStackTrace(); + } + } + }); + } + + private void setupItemEntry(final T pItem) { + mTitle.setText(pItem.getLabel()); + mSubTitle.setText(pItem.getDescription()); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + Intent intent = new Intent(mContext, Class.forName(pItem.getName())); + mContext.startActivity(intent); + } catch (ClassNotFoundException pE) { + pE.printStackTrace(); + } + } + }); + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorFloorView.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorFloorView.java new file mode 100644 index 0000000..cc8d899 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorFloorView.java @@ -0,0 +1,544 @@ +package com.tencent.map.vector.demo.basic; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.util.Log; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import cc.winboll.studio.positions.R; + +import java.util.ArrayList; +import java.util.List; + +public class IndoorFloorView extends ScrollView { + public static final String TAG = IndoorFloorView.class + .getSimpleName(); + + private Context context; + + private LinearLayout views; + + private int itemHeight = 0; + private List items; + + private int scrollDirection = -1; + private static final int SCROLL_DIRECTION_UP = 0; + private static final int SCROLL_DIRECTION_DOWN = 1; + + private int viewWidth; + + private Bitmap selectBitmap = null; + //背景色 + private int backGroundColor = Color.parseColor("#00000000"); + //边框色 + private int strokeColor = Color.parseColor("#00000000"); + private int strokeWidth = 0; // 边框宽度 + + private int offset = 1; // 偏移量在最前面和最后面补全 + private int displayItemCount; // 每页显示的数 + int selectedIndex = 1; + + private int initialY; + + private Runnable scrollerTask; + private int newCheck = 50; + + public IndoorFloorView(Context context) { + super(context); + init(context); + } + + public IndoorFloorView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public IndoorFloorView(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + init(context); + } + + public int getOffset() { + return offset; + } + + /** + * 修改偏移量,即当第一个显示在中间是上面有几个空白
+ * 也会影响整体显示,如设置1,上下各偏移1,总共显3个;设置2总共显示5个; + * + * @param offset + */ + public void setOffset(int offset) { + this.offset = offset; + } + + private void init(Context context) { + this.context = context; + + this.setVerticalScrollBarEnabled(false); + + selectBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.radius); + + views = new LinearLayout(context); + views.setOrientation(LinearLayout.VERTICAL); + this.addView(views); + scrollerTask = new Runnable() { + + public void run() { + + int newY = getScrollY(); + if (initialY - newY == 0) { // stopped + final int remainder = initialY % itemHeight; + final int divided = initialY / itemHeight; + if (remainder == 0) { + selectedIndex = divided + offset; + + onSeletedCallBack(); + } else { + if (remainder > itemHeight / 2) { + IndoorFloorView.this.post(new Runnable() { + @Override + public void run() { + IndoorFloorView.this.smoothScrollTo( + 0, initialY - remainder + + itemHeight); + selectedIndex = divided + offset + 1; + onSeletedCallBack(); + } + }); + } else { + IndoorFloorView.this.post(new Runnable() { + @Override + public void run() { + IndoorFloorView.this.smoothScrollTo( + 0, initialY - remainder); + selectedIndex = divided + offset; + onSeletedCallBack(); + } + }); + } + + } + + } else { + initialY = getScrollY(); + IndoorFloorView.this.postDelayed(scrollerTask, + newCheck); + } + } + }; + + } + + public void startScrollerTask() { + + initialY = getScrollY(); + this.postDelayed(scrollerTask, newCheck); + } + + private void initData() { + if(items==null||items.size()==0){ + return; + } + + views.removeAllViews(); + displayItemCount = offset * 2 + 1; + + for (int i=items.size()-1;i>=0;i--) { + views.addView(createView(items.get(i))); + } + + refreshItemView(0); + } + + private TextView createView(String item) { + TextView tv = new TextView(context); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + tv.setSingleLine(true); + tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); + tv.setText(item); + tv.setGravity(Gravity.CENTER); + TextPaint tp = tv.getPaint(); + tp.setFakeBoldText(true); + int padding_h = dip2px(context, 8); + int padding_v = dip2px(context, 6); + tv.setPadding(padding_h, padding_v, padding_h, padding_v); + if (0 == itemHeight) { + itemHeight = getViewMeasuredHeight(tv); + views.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, itemHeight + * displayItemCount)); + this.setLayoutParams(new LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, itemHeight * displayItemCount)); + } + return tv; + } + + private void refreshItemView(int y) { + int position = y / itemHeight + offset; + int remainder = y % itemHeight; + int divided = y / itemHeight; + + if (remainder == 0) { + position = divided + offset; + } else { + if (remainder > itemHeight / 2) { + position = divided + offset + 1; + } + + } + + int childSize = views.getChildCount(); + for (int i = 0; i < childSize; i++) { + TextView itemView = (TextView) views.getChildAt(i); + if (null == itemView) { + return; + } + if (position == i) { + itemView.setTextColor(Color.parseColor("#0079ff")); + } else { + itemView.setTextColor(Color.parseColor("#ccebfc")); + } + } + } + + private List getItems() { + return items; + } + + /** + * 设置显示的内容 + * + * @param list + */ + public void setItems(List list) { + if (null == items) { + items = new ArrayList(); + } + items.clear(); + items.addAll(list); + + // 前面和后面补 + for (int i = 0; i < offset; i++) { + items.add(0, ""); + items.add(""); + } + + initData(); + + } + + /** + * 设置显示的内容 + * + * @param strs + */ + public void setItems(String[] strs) { + if (null == items) { + items = new ArrayList(); + } + + items.clear(); + for (int i = 0; i < strs.length; i++) + items.add(strs[i]); + + // 前面和后面补 + for (int i = 0; i < offset; i++) { + items.add(0, ""); + items.add(""); + } + + initData(); + + } + + public void setBackgroundColor(int color) { + this.backGroundColor = color; + } + + public void setStrokeColor(int color) { + this.strokeColor = color; + } + + public void setStrokeWidth(int width) { + this.strokeWidth = width; + } + + /** + * 设置选中状图片 + * + * @param bitmap + */ + public void setIndoorSelectBitmap(Bitmap bitmap) { + this.selectBitmap = bitmap; + } + + public void destroy() { + if (selectBitmap != null && !selectBitmap.isRecycled()) { + selectBitmap.recycle(); + selectBitmap = null; + } + } + + @Override + public void setBackgroundDrawable(Drawable background) { + if (viewWidth == 0) { + viewWidth = ((Activity) context).getWindowManager() + .getDefaultDisplay().getWidth(); + } + + background = new Drawable() { + @Override + public void draw(Canvas canvas) { + + try { + drawBg(canvas); + drawCenterLine(canvas); + drawStroke(canvas); + } catch (Throwable e) { + } + + } + + private void drawBg(Canvas canvas) { + canvas.drawColor(backGroundColor); + } + + /** + * @param canvas + */ + private void drawCenterLine(Canvas canvas) { + final Paint paint = new Paint(); + Rect src = new Rect();// 图片 >>原矩 + Rect dst = new Rect();// 屏幕 >>目标矩形 + //133 122 + Log.d("IndoorFloorView", "drawCenterLine: "+selectBitmap.getWidth()+"\n"+selectBitmap.getHeight()); + src.left = 0; + src.top = 0; + src.right = 0 + selectBitmap.getWidth(); + src.bottom = 0 + selectBitmap.getHeight(); + + dst.left = 0; + dst.top = obtainSelectedAreaBorder()[0]; + dst.right = 0 + viewWidth; + dst.bottom = obtainSelectedAreaBorder()[1]; + canvas.drawBitmap(selectBitmap, src, dst, paint); + + } + + /** + * @param canvas + */ + private void drawStroke(Canvas canvas) { + final Paint mPaint = new Paint(); + Rect rect = canvas.getClipBounds(); + mPaint.setColor(strokeColor); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeWidth(strokeWidth); + canvas.drawRect(rect, mPaint); + } + + @Override + public void setAlpha(int alpha) { + + } + + @Override + public void setColorFilter(ColorFilter cf) { + + } + + @Override + public int getOpacity() { + return 0; + } + }; + + super.setBackgroundDrawable(background); + + } + + /** + * 获取选中区域的边 + */ + private int[] obtainSelectedAreaBorder() { + int[] selectedAreaBorder = null; + if (null == selectedAreaBorder) { + selectedAreaBorder = new int[2]; + selectedAreaBorder[0] = itemHeight * offset; + selectedAreaBorder[1] = itemHeight * (offset + 1); + } + return selectedAreaBorder; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + viewWidth = w; + setBackgroundDrawable(null); + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + refreshItemView(t); + if (t > oldt) { + scrollDirection = SCROLL_DIRECTION_DOWN; + } else { + scrollDirection = SCROLL_DIRECTION_UP; + } + } + + /** + * 选中回调 + */ + private void onSeletedCallBack() { + if (null != onIndoorFloorSwtichListener) { + try { + onIndoorFloorSwtichListener.onSelected(getSeletedIndex()); + } catch (Throwable e) { + } + } + + } + + public void setSeletion(String selectValue) { + if(items==null||items.size()==0){ + return; + } + int position = items.indexOf(selectValue); + final int p = items.size()-offset-1-position; + selectedIndex = p + offset; + this.post(new Runnable() { + @Override + public void run() { + IndoorFloorView.this.smoothScrollTo(0, p * itemHeight); + } + }); + + } + + public String getSeletedItem() { + return items.get(selectedIndex); + } + + public int getSeletedIndex() { + if(items==null||items.size()==0){ + return 0; + } + int result = items.size()-1-selectedIndex - offset; + return Math.min(items.size() - 2 * offset, Math.max(0, result)); + } + + @Override + public void fling(int velocityY) { + super.fling(velocityY / 3); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_UP) { + + startScrollerTask(); + } + return super.onTouchEvent(ev); + } + + private OnIndoorFloorListener onIndoorFloorSwtichListener; + + public OnIndoorFloorListener getOnIndoorFloorListener() { + return onIndoorFloorSwtichListener; + } + + public void setOnIndoorFloorListener( + OnIndoorFloorListener onIndoorFloorSwtichListener) { + this.onIndoorFloorSwtichListener = onIndoorFloorSwtichListener; + } + + public static abstract interface OnIndoorFloorListener { + public abstract void onSelected(int selectedIndex); + } + + // utils + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + /** + * 获取控件的高度,如果获取的高度为0,则重新计算尺寸后再返回高度 + * + * @param view + * @return + */ + public static int getViewMeasuredHeight(View view) { + calcViewMeasure(view); + return view.getMeasuredHeight(); + } + + /** + * 获取控件的宽度,如果获取的宽度为0,则重新计算尺寸后再返回宽度 + * + * @param view + * @return + */ + public static int getViewMeasuredWidth(View view) { + calcViewMeasure(view); + return view.getMeasuredWidth(); + } + + /** + * 测量控件的尺寸 + * + * @param view + */ + public static void calcViewMeasure(View view) { + + int width = MeasureSpec.makeMeasureSpec(0, + MeasureSpec.UNSPECIFIED); + int expandSpec = MeasureSpec.makeMeasureSpec( + Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + view.measure(width, expandSpec); + } + + public void setVisible(boolean isEnable) { + if (isEnable) { + if(!isVisible()) { + setVisibility(VISIBLE); + } + } else { + if(isVisible()) + setVisibility(GONE); + } + } + + public boolean isVisible() { + return getVisibility() == VISIBLE ? true : false; + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorMapActivity.java new file mode 100644 index 0000000..df4a37c --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/IndoorMapActivity.java @@ -0,0 +1,198 @@ +package com.tencent.map.vector.demo.basic; + +import android.os.Bundle; +import android.os.Handler; +import android.text.TextUtils; +import android.util.Log; + +import androidx.appcompat.app.AppCompatActivity; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.UiSettings; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.IndoorBuilding; +import com.tencent.tencentmap.mapsdk.maps.model.IndoorInfo; +import com.tencent.tencentmap.mapsdk.maps.model.IndoorLevel; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MapPoi; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterItem; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterManager; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.algo.NonHierarchicalDistanceBasedAlgorithm; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.view.DefaultClusterRenderer; + +import java.util.ArrayList; +import java.util.List; + +public class IndoorMapActivity extends AppCompatActivity implements TencentMap.OnIndoorStateChangeListener { + + private static final String TAG = "IndoorMapActivity"; + private MapView mapView; + private TencentMap tencentMap; + private IndoorFloorView indoorFloorView; + private UiSettings uiSettings; + private Handler handler = new Handler(); + private String floorName; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_indoor); + mapView = findViewById(R.id.mapView); + indoorFloorView = findViewById(R.id.indoor_floor); + if (tencentMap == null) { + tencentMap = mapView.getMap(); + } + //欧美汇室内地图,需Key开通室内地图权限 + CameraUpdate camera = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.979382, 116.314106), + 18, + 0f, + 0f)); + tencentMap.moveCamera(camera); + final ArrayList markerClusters = new ArrayList<>(); + + uiSettings = tencentMap.getUiSettings(); + tencentMap.setIndoorEnabled(true); + //设置室内蒙层颜色 sdk版本4.3.5新增接口 + tencentMap.setIndoorMaskColor(R.color.color_C71585); + //设置室内图状态变化监听 + tencentMap.setOnIndoorStateChangeListener(this); + tencentMap.setMapType(TencentMap.MAP_TYPE_DARK); + //设置是否隐藏楼层控件 + uiSettings.setIndoorLevelPickerEnabled(false); + indoorFloorView.setOnIndoorFloorListener(new MyIndoorViewAdapter()); + ClusterManager markerClusterClusterManager = new ClusterManager(this, tencentMap); + NonHierarchicalDistanceBasedAlgorithm nba = new NonHierarchicalDistanceBasedAlgorithm<>(this); + nba.setMaxDistanceAtZoom(15); + markerClusterClusterManager.setAlgorithm(nba); + DefaultClusterRenderer renderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterClusterManager); + renderer.setMinClusterSize(2); + renderer.setBuckets(new int[]{5, 10, 20}); + markerClusterClusterManager.setRenderer(renderer); + //添加室内图marker + tencentMap.setOnMapPoiClickListener(new TencentMap.OnMapPoiClickListener() { + @Override + public void onClicked(MapPoi mapPoi) { + LatLng position = mapPoi.getPosition(); + MarkerOptions markerOptions = new MarkerOptions().position(position).title(mapPoi.name).infoWindowEnable(true); + if (!TextUtils.isEmpty("F3")) { + markerOptions.indoorInfo(new IndoorInfo("11000023805", "F3")); + + } + Marker marker = tencentMap.addMarker(markerOptions); + LatLng position1 = mapPoi.getPosition(); + markerClusters.add(new MarkerCluster(position1.getLatitude(), position1.getLongitude())); + + } + }); + tencentMap.setOnCameraChangeListener(markerClusterClusterManager); + + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + public boolean onIndoorBuildingFocused() { + Log.d(TAG, "onIndoorBuildingFocused: 室内图场景激活回调"); + return false; + } + + @Override + public boolean onIndoorLevelActivated(final IndoorBuilding indoorBuilding) { + if (indoorBuilding != null) { + handler.post(new Runnable() { + @Override + public void run() { + indoorFloorView.setVisible(true); + if (mIndoorBuilding == null || !mIndoorBuilding.getBuidlingId().equals(indoorBuilding.getBuidlingId())) { + List levels = indoorBuilding.getLevels(); + String[] activedIndoorFloorNames1 = tencentMap.getActivedIndoorFloorNames(); + indoorFloorView.setItems(activedIndoorFloorNames1); + for (int i = 0; i < levels.size(); i++) { + floorName = levels.get(i).getName(); + indoorFloorView.setSeletion(floorName); + } + } + mIndoorBuilding = indoorBuilding; + } + }); + } else { + indoorFloorView.setVisible(false); + } + return false; + } + + @Override + public boolean onIndoorBuildingDeactivated() { + Log.d(TAG, "onIndoorBuildingDeactivated: 当前室内图处于无效状态"); + return false; + } + + IndoorBuilding mIndoorBuilding = null; + + private class MyIndoorViewAdapter implements IndoorFloorView.OnIndoorFloorListener { + + @Override + public void onSelected(int selectedIndex) { + if (mIndoorBuilding != null) { + + List levels = mIndoorBuilding.getLevels(); + String activedIndoorFloorName = tencentMap.getActivedIndoorFloorNames()[selectedIndex]; + String name = levels.get(selectedIndex).getName(); + name = activedIndoorFloorName; + String buidlingId = mIndoorBuilding.getBuidlingId(); + tencentMap.setIndoorFloor(buidlingId, name); + } + } + } +} + +class MarkerCluster implements ClusterItem { + + private final LatLng latLng; + + public MarkerCluster(double lat, double longitude) { + latLng = new LatLng(lat, longitude); + } + + @Override + public LatLng getPosition() { + + return latLng; + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/MapRenderLayerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapRenderLayerActivity.java new file mode 100644 index 0000000..de4b063 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapRenderLayerActivity.java @@ -0,0 +1,109 @@ +package com.tencent.map.vector.demo.basic; + +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.SurfaceTexture; +import android.os.Bundle; +import android.view.MotionEvent; +import android.view.TextureView; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapRenderLayer; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import com.tencent.tencentmap.mapsdk.maps.UiSettings; + +public class MapRenderLayerActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener { + + private TextureView textureView; + private MapRenderLayer mapRenderLayer; + private TencentMap tencentMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_render_layer); + textureView = findViewById(R.id.textureView); + textureView.setOpaque(false); + textureView.setSurfaceTextureListener(this); + } + + @Override + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + TencentMapOptions mapOptions = new TencentMapOptions(); + // mapOptions.setMapKey(""); + mapOptions.setExtSurface(surface); + mapOptions.setExtSurfaceDimension(width, height); + mapRenderLayer = new MapRenderLayer(this, mapOptions); + // mapRenderLayer.onResume(); + textureView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + mapRenderLayer.onTouchEvent(event); + mapRenderLayer.dispatchTouchEvent(event); + return true; + } + }); + tencentMap = mapRenderLayer.getMap(); + tencentMap.setMapStyle(3); + UiSettings uiSettings = tencentMap.getUiSettings(); + uiSettings.setAllGesturesEnabled(true); + tencentMap.moveCamera(CameraUpdateFactory.zoomTo(8)); + } + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + if (mapRenderLayer != null) { + mapRenderLayer.onSurfaceChanged(surface, width, height); + } + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + if (mapRenderLayer != null) { + mapRenderLayer.onDestroy(); + } + return false; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + if (mapRenderLayer != null) { + mapRenderLayer.onStart(); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (mapRenderLayer != null) { + mapRenderLayer.onResume(); + } + } + + @Override + protected void onRestart() { + super.onRestart(); + if (mapRenderLayer != null) { + mapRenderLayer.onRestart(); + } + } + + @Override + protected void onStop() { + super.onStop(); + if (mapRenderLayer != null) { + mapRenderLayer.onStop(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mapRenderLayer != null) { + mapRenderLayer.onDestroy(); + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/MapStyleDemoActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapStyleDemoActivity.java new file mode 100644 index 0000000..d8a94e0 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapStyleDemoActivity.java @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * 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 com.tencent.map.vector.demo.basic; + +import android.annotation.SuppressLint; +import android.graphics.PorterDuff; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.CompoundButton; +import android.widget.RadioGroup; +import android.widget.Spinner; +import android.widget.Switch; +import android.widget.TextView; + + +import androidx.fragment.app.FragmentActivity; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +/** + * Demonstrates the different base layers of a map. + */ +@SuppressLint("NewApi") +public class MapStyleDemoActivity extends FragmentActivity implements TencentMap.OnCameraChangeListener { + private MapView mMapView; + private TextView mTextView; + private TencentMap mTencentMap; + private Switch mSwitch; + private Spinner mSpinner; + + private String[] styles = new String[]{"style1", "style2", "style3", "style4", "style5", + "normal", "traffic_navi", "traffic_navi_night", "satellite", "night", "navi", "night", "eagle_day", "eagle_night"}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_style); + mMapView = findViewById(R.id.map_view); + mTextView = findViewById(R.id.tv_level); + mSwitch=findViewById(R.id.switch_open); + mTencentMap = mMapView.getMap(); + CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.901268, 116.403854), 11f, 0f, 0f)); + mTencentMap.moveCamera(cameraUpdate); + //mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(39.901268, 116.403854))); //移动地图 + mTencentMap.setOnCameraChangeListener(this); + mSpinner = findViewById(R.id.sp_style); + ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles); + mSpinner.setAdapter(adapter); + mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + if (position < 5) { + mTencentMap.setMapStyle(position + 1); + } + switch (position) { + case 5: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NORMAL); + break; + case 6: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NAVI); + break; + case 7: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NIGHT); + break; + case 8: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_SATELLITE); + break; + case 9: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NIGHT); + break; + case 10: + mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NAVI); + break; + case 11: + mTencentMap.setMapStyle(13 + 1000); + break; + case 12: + mTencentMap.setMapStyle(14 + 1000); + break; + case 13: + mTencentMap.setMapStyle(15 + 1000); + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + RadioGroup rg = findViewById(R.id.rg_map_type); + rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_normal_type: + if (mTencentMap != null) { + mTencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL); + } + break; + case R.id.rb_dark_type: + if (mTencentMap != null) { + mTencentMap.setMapType(TencentMap.MAP_TYPE_DARK); + } + break; + case R.id.rb_sagellite_type: + if (mTencentMap != null) { + mTencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE); + } + break; + } + } + }); + mTencentMap.getUiSettings().setCompassEnabled(true); + mTencentMap.getUiSettings().setMyLocationButtonEnabled(true); + mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + PorterDuff.Mode buttonTintMode = compoundButton.getButtonTintMode(); + if(b){ + mTencentMap.setBuildingEnable(true); + }else{ + mTencentMap.setBuildingEnable(false); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + @Override + public void onCameraChange(CameraPosition cameraPosition) { + Log.i("TAG","地图滑动了"); + mTextView.setText("当前缩放级别为:" + cameraPosition.zoom); + } + + @Override + public void onCameraChangeFinished(CameraPosition cameraPosition) { + Log.i("TAG","地图滑动了"); + mTextView.setText("当前缩放级别为:" + cameraPosition.zoom); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/MapViewActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapViewActivity.java new file mode 100644 index 0000000..b7ef6d0 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/MapViewActivity.java @@ -0,0 +1,79 @@ +package com.tencent.map.vector.demo.basic; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.heatoverlay.ScatterPlotOverlayActivity; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class MapViewActivity extends AppCompatActivity { + + /** + * 由于SDK并没有提供用于MapView管理地图生命周期的Activity + * 因此需要用户继承Activity后管理地图的生命周期,防止内存泄露 + */ + + private TextureMapView mapView; + protected TencentMap tencentMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_view); + + mapView = findViewById(R.id.mapview); + mapView.setOpaque(false); + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + tencentMap = mapView.getMap(); + + } + + + /** + * mapview的生命周期管理 + */ + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onRestart() { + super.onRestart(); + mapView.onRestart(); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/OfflineMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/OfflineMapActivity.java new file mode 100644 index 0000000..d7180eb --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/OfflineMapActivity.java @@ -0,0 +1,559 @@ +//package com.tencent.map.vector.demo.basic; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.appcompat.app.AppCompatActivity; +//import androidx.recyclerview.widget.DividerItemDecoration; +//import androidx.recyclerview.widget.LinearLayoutManager; +//import androidx.recyclerview.widget.RecyclerView; +// +//import android.content.BroadcastReceiver; +//import android.content.Context; +//import android.content.Intent; +//import android.content.IntentFilter; +//import android.net.ConnectivityManager; +//import android.net.NetworkInfo; +//import android.os.Build; +//import android.os.Bundle; +//import android.os.Handler; +//import android.os.Message; +//import android.util.Log; +//import android.view.LayoutInflater; +//import android.view.Menu; +//import android.view.MenuItem; +//import android.view.View; +//import android.view.ViewGroup; +//import android.widget.Button; +//import android.widget.LinearLayout; +//import android.widget.TextView; +//import android.widget.Toast; +// +//import com.tencent.map.sdk.comps.offlinemap.OfflineItem; +//import com.tencent.map.sdk.comps.offlinemap.OfflineItemController; +//import com.tencent.map.sdk.comps.offlinemap.OfflineMapComponent; +//import com.tencent.map.sdk.comps.offlinemap.OfflineMapSyncedListener; +//import com.tencent.map.sdk.comps.offlinemap.OfflineStatus; +//import com.tencent.map.sdk.comps.offlinemap.OfflineStatusChangedListener; +//import cc.winboll.studio.positions.R; +//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +//import com.tencent.tencentmap.mapsdk.maps.MapView; +//import com.tencent.tencentmap.mapsdk.maps.TencentMap; +//import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +//import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +//import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +// +//import java.util.ArrayList; +//import java.util.List; +// +// +///** +// * 离线地图下载、取消下载、删除 +// */ +//public class OfflineMapActivity extends AppCompatActivity { +// private static final String TAG = "OfflineMapActivity"; +// private Button btnGoWork; +// private Button btnZoomIn; +// private Button btnZoomOut; +// private Button btnReboot; +// private Button btnSync; +// private Button btnRefresh; +// private MapView mapView; +// private RecyclerView offlineItemRecycleView; +// +// private TencentMap map; +// private OfflineMapComponent offlineComp; +// +// private OfflineAdapter offlineAdapter; +// +// private List offlineItems = new ArrayList<>(); +// +// private IntentFilter intentFilter; +// private NetworkChangeReceiver networkChangeReceiver; +// private ConnectivityManager connectivityManager; +// private TextView tvParmes; +// +// @Override +// protected void onCreate(@Nullable Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// setContentView(R.layout.activity_offline_map); +// btnGoWork = findViewById(R.id.btn_go_work); +// btnZoomIn = findViewById(R.id.btn_zoom_in); +// btnZoomOut = findViewById(R.id.btn_zoom_out); +// btnReboot = findViewById(R.id.btn_reboot_map); +// btnSync = findViewById(R.id.btn_sync); +// btnRefresh = findViewById(R.id.btn_refresh); +// mapView = findViewById(R.id.map_view); +// tvParmes = findViewById(R.id.tv_parmes); +// offlineItemRecycleView = findViewById(R.id.offline_item_list); +// connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); +// +// initMap(); +// //重置地图 +// btnReboot.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (map != null) { +// mapView.onPause(); +// mapView.onStop(); +// mapView.onDestroy(); +// map = null; +// initMap(); +// mapView.onStart(); +// mapView.onResume(); +// tvParmes.setText("重置地图"); +// } +// +// } +// }); +// +// offlineAdapter = new OfflineAdapter(offlineItems); +// offlineItemRecycleView.setLayoutManager(new LinearLayoutManager(this)); +// offlineItemRecycleView.setAdapter(offlineAdapter); +// offlineItemRecycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); +// intentFilter = new IntentFilter(); +// intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); +// networkChangeReceiver = new NetworkChangeReceiver(); +// } +// +// private void initMap() { +// // 设置离线地图 +// TencentMapOptions options = new TencentMapOptions(); +// options.setOfflineMapEnable(true); +// +// map = mapView.getMap(options); +// +// map.addOnMapLoadedCallback(new TencentMap.OnMapLoadedCallback() { +// @Override +// public void onMapLoaded() { +// Toast.makeText(OfflineMapActivity.this, "地图加载完成", Toast.LENGTH_SHORT).show(); +// } +// }); +// //获取离线地图的城市列表 +// offlineComp = map.getMapComponent(OfflineMapComponent.class); +// +// Log.d(TAG, "Offline enable:" + offlineComp.isOfflineMapEnable()); +// +// // 回公司按钮 +// btnGoWork.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// List latLngs = new ArrayList<>(); +// latLngs.add(new LatLng(40.042893, 116.269673)); +// latLngs.add(new LatLng(40.038951, 116.275241)); +// LatLng center = new LatLng(40.040429, 116.273525); +// map.addMarker(new MarkerOptions(center) +// .anchor(0.5f, 1)); +// map.moveCamera(CameraUpdateFactory.newLatLngBoundsWithMapCenter( +// new LatLngBounds.Builder() +// .include(latLngs) +// .build(), +// center, +// 100)); +// } +// }); +// +// // 地图放大按钮 +// btnZoomIn.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// map.moveCamera(CameraUpdateFactory.zoomIn()); +// } +// }); +// +// // 地图缩小按钮 +// btnZoomOut.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// map.moveCamera(CameraUpdateFactory.zoomOut()); +// } +// }); +// +// // 同步离线地图信息按钮 +// btnSync.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// syncData(); +// } +// }); +// +// // 刷新离线地图列表按钮 +// btnRefresh.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// offlineItemRecycleView.setVisibility(View.VISIBLE); +// refreshOfflineList(); +// } +// }); +// map.moveCamera(CameraUpdateFactory.zoomTo(5)); // 设置缩放级别,显示全国概略图. +// } +// +// @Override +// protected void onStart() { +// super.onStart(); +// mapView.onStart(); +// } +// +// @Override +// protected void onResume() { +// super.onResume(); +// mapView.onResume(); +// registerReceiver(networkChangeReceiver, intentFilter); +// +//// offlineItems.addAll(offlineComp.getOfflineItemList()); +//// tryToOpenOffline(); +// } +// +// @Override +// protected void onPause() { +// super.onPause(); +// mapView.onPause(); +// } +// +// @Override +// protected void onStop() { +// super.onStop(); +// mapView.onStop(); +// } +// +// @Override +// protected void onDestroy() { +// super.onDestroy(); +// mapView.onDestroy(); +// } +// +// private class OfflineAdapter extends RecyclerView.Adapter { +// +// List offlineItems; +// +// OfflineAdapter(List offlineItems) { +// this.offlineItems = offlineItems; +// } +// +// @NonNull +// @Override +// public OfflineViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { +// View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_offline +// , parent, false); +// return new OfflineViewHolder(view); +// } +// +// @Override +// public void onBindViewHolder(@NonNull OfflineViewHolder holder, int position) { +// final OfflineItem offlineItem = offlineItems.get(position); +// +// final OfflineItemController cityController = +// offlineComp.getOfflineItemController(offlineItem, statusChangedListener); +// if (cityController == null) { +// holder.tvTitle.setText("【controller is null】" + offlineItem.toString()); +// return; +// } +// +// holder.tvTitle.setText(offlineItem.toString()); +// +// holder.btnSwitch.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// boolean isClosed = cityController.close(); +// if (isClosed) { +// // toast("已关闭【" + offlineItem.getName() + "】的离线地图"); +// tvParmes.setText("已关闭【" + offlineItem.getName() + "】的离线地图"); +// +// } +// Log.d(TAG, offlineItem.getName() + " close offline:" + isClosed); +// } +// }); +// +// holder.btnDownload.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// downloadOffline(offlineItem); +// } +// }); +// +// holder.btnDelete.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// boolean isDeleted = cityController.removeCache(); +// if (isDeleted) { +// // toast("缓存移除成功"); +// tvParmes.setText("缓存移除成功"); +// } else { +// // toast("缓存移除失败"); +// tvParmes.setText("缓存移除失败"); +// } +// Log.d(TAG, offlineItem.getName() + " remove cache:" + isDeleted); +// } +// }); +// } +// +// @Override +// public int getItemCount() { +// return offlineItems.size(); +// } +// +// class OfflineViewHolder extends RecyclerView.ViewHolder { +// +// TextView tvTitle; +// Button btnSwitch; +// Button btnDownload; +// Button btnDelete; +// +// public OfflineViewHolder(@NonNull View itemView) { +// super(itemView); +// tvTitle = itemView.findViewById(R.id.tv_offline_title); +// btnSwitch = itemView.findViewById(R.id.btn_switch_offline); +// btnDownload = itemView.findViewById(R.id.btn_download_offline); +// btnDelete = itemView.findViewById(R.id.btn_delete_offline); +// } +// } +// } +// +// OfflineStatusChangedListener statusChangedListener = new OfflineStatusChangedListener() { +// @Override +// public void onStatusChanged(OfflineItem offlineItem, OfflineStatus offlineStatus) { +// Log.d(TAG, offlineItem.getName() + " onStatusChanged: " + offlineStatus); +// final Message msg = new Message(); +// msg.obj = offlineItem; +// switch (offlineStatus) { +// case OPEN: //开始离线 +// new Thread(new Runnable() { +// @Override +// public void run() { +// msg.what = STATE_OPEN; +// mHandler.sendMessage(msg); +// } +// }).start(); +// break; +// case CLOSE: //关闭离线 +// break; +// case COMPLETED: //完成下载 +// new Thread(new Runnable() { +// @Override +// public void run() { +// msg.what = STATE_COMPLETED; +// mHandler.sendMessage(msg); +// } +// }).start(); +// if (offlineItem.getPercentage() == 100 && offlineItem.getPinyin().equals("china2")) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(offlineItem, +// statusChangedListener); +// cityController.open(); +// map.moveCamera(CameraUpdateFactory.zoomTo(5)); // 设置缩放级别,显示全国概略图. +// } else if (offlineItem.getPercentage() == 100 && offlineItem.getPinyin().equals("beijingshi")) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(offlineItem, +// statusChangedListener); +// cityController.open(); +// map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.909018, 116.397427), 16)); +// } else if (offlineItem.getPercentage() == 100 && offlineItem.getPinyin().equals("shanghaishi")) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(offlineItem, +// statusChangedListener); +// cityController.open(); +// map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(31.230378, 121.473658), 16)); +// } else if (offlineItem.getPercentage() == 100 && offlineItem.getPinyin().equals("tianjinshi")) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(offlineItem, +// statusChangedListener); +// cityController.open(); +// map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.085294, 117.201538), 16)); +// } else { +// toast("可参考demo自行移动视野范围"); +// } +// break; +// case CANCEL: //取消下载 +// toast("取消下载"); +// new Thread(new Runnable() { +// @Override +// public void run() { +// msg.what = STATE_CANCEL; +// mHandler.sendMessage(msg); +// } +// }).start(); +// break; +// case DOWNLOADING: //下载中 +// new Thread(new Runnable() { +// @Override +// public void run() { +// msg.what = STATE_DOWNLOAD; +// mHandler.sendMessage(msg); +// } +// }).start(); +// break; +// case ERROR: //离线错误 +// toast("离线错误"); +// break; +// case READY: //准备下载 +// toast("准备下载"); +// break; +// case START: //开始下载 +// msg.what = STATE_START; +// mHandler.sendMessage(msg); +// break; +// } +// } +// }; +// +// private void refreshOfflineList() { +// //获取离线地图列表 +// List offlineItems = offlineComp.getOfflineItemList(); +// Log.d(TAG, "Offline Items num:" + offlineItems.size()); +//// for (OfflineItem item : offlineItems) { +//// Log.d(TAG, item.toString()); +//// } +// +// this.offlineItems.clear(); +// this.offlineItems.addAll(offlineItems); +// offlineAdapter.notifyDataSetChanged(); +// toast("刷新离线地图列表"); +// +// } +// +// private void tryToOpenOffline() { +// // 无网情况主动开启离线地图 +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// if (connectivityManager.getActiveNetwork() == null) { +// Log.d(TAG, "tryToOpenOffline: 无网络,尝试开启离线地图,item size:" + offlineItems.size()); +// for (OfflineItem item : offlineItems) { +// if (item.getPercentage() == 100 && item.getPinyin().equals("beijingshi")) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(item, +// statusChangedListener); +// if (cityController == null) { +// Log.d(TAG, item.getName() + "try: controller is null"); +// } else { +// Log.d(TAG, item.getName() + "try: openOffline: " + cityController.open()); +// } +// } +// } +// } +// } else { +// toast("require API > M(23)"); +// } +// } +// +// private void closeOffline() { +// List items = offlineComp.getOfflineItemList(); +// Log.d(TAG, "closeOffline: ,item size:" + items.size()); +// for (OfflineItem item : items) { +// if (item.getPercentage() == 100) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(item, +// statusChangedListener); +// if (cityController == null) { +// Log.d(TAG, item.getName() + "close: controller is null"); +// } else { +// Log.d(TAG, item.getName() + "close: close Offline: " + cityController.close()); +// } +// } +// } +// } +// +// +// private void syncData() { +// //同步最新数据 +// offlineComp.syncLatestData(new OfflineMapSyncedListener() { +// @Override +// public void onSynced(boolean b) { +// Log.d(TAG, "onSynced: " + b); +// refreshOfflineList(); +// // tryToOpenOffline(); +// } +// }); +// } +// +// private void downloadOffline(OfflineItem offlineItem) { +// //获取某一Item的离线地图数据 +// OfflineItemController cityController = offlineComp.getOfflineItemController(offlineItem, statusChangedListener); +// if (cityController == null) { +// Toast.makeText(this, "cityController为NULL", Toast.LENGTH_SHORT).show(); +// return; +// } +// +// boolean needDownload = cityController.checkInvalidate(); +// Log.d(TAG, "need download:" + cityController.checkInvalidate()); +// if (needDownload) { +// //执行下载 +// cityController.startDownload(); +// tvParmes.setText("开始下载【" + offlineItem.getName() + "】的离线地图"); +// } else { +// //跳过更新,打开离线 +// boolean isOpened = cityController.open(); +// if (isOpened) { +// tvParmes.setText("已开启【" + offlineItem.getName() + "】的离线地图"); +// } +// Log.d(TAG, offlineItem.getName() + " open offline:" + isOpened); +// } +// } +// +// private final class NetworkChangeReceiver extends BroadcastReceiver { +// @Override +// public void onReceive(Context context, Intent intent) { +// NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); +// //获取离线那地图列表 +// List items = offlineComp.getOfflineItemList(); +// Log.d(TAG, "onReceive: 网络状态变化, offline item size:" + items.size()); +// if (networkInfo != null) { +// Toast.makeText(context, "当前无网络连接", Toast.LENGTH_SHORT).show(); +// for (OfflineItem item : items) { +// if (item.getPercentage() == 100) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(item, +// statusChangedListener); +// if (cityController == null) { +// Log.d(TAG, item.getName() + " controller is null"); +// } else { +// Log.d(TAG, item.getName() + " closeOffline: " + cityController.close()); +// } +// } +// } +// } else { +// // 加载所有已下载的离线地图 +// items = offlineComp.getOfflineItemList(); +// for (OfflineItem item : items) { +// if (item.getPercentage() == 100) { +// OfflineItemController cityController = offlineComp.getOfflineItemController(item, +// statusChangedListener); +// if (cityController == null) { +// Log.d(TAG, item.getName() + " controller is null"); +// } else { +// Log.d(TAG, item.getName() + " openOffline: " + cityController.open()); +// } +// } +// } +// } +// } +// } +// +// private final int STATE_DOWNLOAD = 1; +// private final int STATE_COMPLETED = 2; +// private final int STATE_OPEN = 3; +// private final int STATE_CANCEL = 4; +// private final int STATE_START = 5; +// +// private Handler mHandler = new Handler() { +// public void handleMessage(Message msg) { +// OfflineItem item = (OfflineItem) msg.obj; +// switch (msg.what) { +// case STATE_DOWNLOAD: +// if (item.getPercentage() % 10 == 0) { +// tvParmes.setText("正在下载【" + item.getName() + "】离线地图:" + item.getPercentage() + "%"); +// Log.d("getPercentage", item.getPercentage() + ""); +// } +// break; +// case STATE_COMPLETED: +// tvParmes.setText(item.getName() + "离线地图下载结束"); +// break; +// case STATE_OPEN: +// tvParmes.setText(item.getName() + "离线地图已开启 "); +// break; +// case STATE_CANCEL: +// break; +// case STATE_START: +// tvParmes.setText(item.getName() + "离线地图开始下载,点击刷新列表查看进度"); +// break; +// +// } +// } +// }; +// +// private void toast(String msg) { +// Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); +// } +// +//} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/OverseaMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/OverseaMapActivity.java new file mode 100644 index 0000000..da85478 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/OverseaMapActivity.java @@ -0,0 +1,91 @@ +package com.tencent.map.vector.demo.basic; + +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; + +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMapContext; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.Language; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.OverSeaTileProvider; + +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Locale; + +public class OverseaMapActivity extends SupportMapFragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //纽约时代广场海外地图,需Key开通海外位置服务权限 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(40.75797, -73.985542), + 11, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + //设置自定义海外图源 + tencentMap.setOverSeaTileProvider(new CustomOverSeaTileProvider(tencentMap.getMapContext())); + } + + class CustomOverSeaTileProvider extends OverSeaTileProvider { + boolean mIsZhLanguage; + boolean mIsNight; + + /** + * 创建海外图源供应 + */ + public CustomOverSeaTileProvider(TencentMapContext context){ + //设置名称和版本号 + super("custom", 1, context); + } + + @Override + public URL getTileUrl(int x, int y, int zoom) { + String url = "https://xxxx.com/x=%d&y=%d&z=%d&s=%s&l=&s"; + String formatUrl = String.format(Locale.ENGLISH, url, x, y, zoom, mIsNight ? "dark" : "day", mIsZhLanguage ? "zh" : "en"); + try { + return new URL(formatUrl); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public boolean onDayNightChange(boolean dayNight) { + mIsNight = dayNight; + return true; + } + + public boolean onLanguageChange(Language language) { + mIsZhLanguage = (language == Language.zh); + return true; + } + + @Override + public Bitmap getLogo(boolean isNight) { + AssetManager assetManager = getAssets(); + Bitmap iBitmap = null; + InputStream is = null; + try { + is = assetManager.open("logo.png"); + iBitmap = BitmapFactory.decodeStream(is); + } catch (Exception e) { + return null; + } catch (OutOfMemoryError ignored) { + } finally { + // IO.safeClose(is); + } + return iBitmap; + } + } +} + diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/RecyclerListActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/RecyclerListActivity.java new file mode 100644 index 0000000..100b835 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/RecyclerListActivity.java @@ -0,0 +1,135 @@ +package com.tencent.map.vector.demo.basic; + +import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import android.content.Context; +import android.os.Bundle; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import java.util.LinkedList; +import java.util.List; + +public class RecyclerListActivity extends FragmentActivity { + + private static final String TAG = "RecyclerListActivity"; + + RecyclerView recyclerView; + private MapViewAdapter mapViewAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_recycler_list); + recyclerView = findViewById(R.id.rv_container); + recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); + mapViewAdapter = new MapViewAdapter(this); + recyclerView.setAdapter(mapViewAdapter); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recyclerView != null) { + recyclerView.setAdapter(null); + } + + } + + private static class MapViewHolder extends RecyclerView.ViewHolder { + MapView mMapView; + + public MapViewHolder(@NonNull View itemView, MapView mapView) { + super(itemView); + mMapView = mapView; + } + + public void onRecycle() { + if (mMapView != null) { + mMapView.onPause(); + mMapView.onStop(); + } + } + + public void onBind() { + if (mMapView != null) { + mMapView.onResume(); + } + } + } + + private static class MapViewAdapter extends RecyclerView.Adapter { + private List mMapViews; + private static final int COUNT = 15; + private Context mContext; + + public MapViewAdapter(Context context) { + mContext = context.getApplicationContext(); + mMapViews = new LinkedList<>(); + } + + @NonNull + @Override + public MapViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, final int type) { + + FrameLayout mapContainer = new FrameLayout(mContext); + if (type == 1) { + TencentMapOptions tencentMapOptions = new TencentMapOptions(); + tencentMapOptions.setDisallowInterceptTouchEvent(true); + MapView mapView = new MapView(mContext, tencentMapOptions); + mapView.setId(View.NO_ID); + mapView.setLayoutParams(new FrameLayout.LayoutParams(1000, 700)); + mapContainer.addView(mapView); + + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER; + return new MapViewHolder(mapContainer, mapView); + } else { + return new MapViewHolder(mapContainer, null); + } + } + + @Override + public void onBindViewHolder(@NonNull MapViewHolder mapViewHolder, int i) { + mapViewHolder.onBind(); + if (mapViewHolder.mMapView != null) { + mMapViews.add(mapViewHolder.mMapView); + } + } + + @Override + public int getItemCount() { + return COUNT; + } + + @Override + public int getItemViewType(int position) { + + if (position % 3 == 0) { + return 1; + } + + return super.getItemViewType(position); + } + + @Override + public void onViewRecycled(@NonNull MapViewHolder holder) { + + holder.onRecycle(); + } + + @Override + public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { + for (MapView mapView : mMapViews) { + mapView.onDestroy(); + } + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/SetMapTypeActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/SetMapTypeActivity.java new file mode 100644 index 0000000..464facb --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/SetMapTypeActivity.java @@ -0,0 +1,51 @@ +package com.tencent.map.vector.demo.basic; + +import android.os.Bundle; +import android.view.View; +import android.widget.RadioGroup; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; + + +public class SetMapTypeActivity extends SupportMapFragmentActivity implements RadioGroup.OnCheckedChangeListener { + private RadioGroup radioGroup; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + } + + private void initView() { + radioGroup = findViewById(R.id.lay_map_type); + radioGroup.setVisibility(View.VISIBLE); + radioGroup.setOnCheckedChangeListener(this); + } + + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.btn_normal: //普通地图-默认地图类型 + tencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL); + break; + case R.id.btn_satellite: //卫星地图 + tencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE); + break; + case R.id.btn_dark: //暗色地图 + tencentMap.setMapType(TencentMap.MAP_TYPE_DARK); + break; + case R.id.btn_traffic: + tencentMap.setTrafficEnabled(true); + break; + case R.id.style_map: + /*TencentMapOptions mapOptions = new TencentMapOptions(); + //将本地资源打包到apk的asset目录中 + mapOptions.setCustomAssetsPath("myMapStyle"); + //参数1对应的是“我的样式”中的序号 + tencentMap.setMapStyle(1); + MapView mMapView = new MapView(SetMapTypeActivity.this, mapOptions);*/ + break; + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/SupportMapFragmentActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/SupportMapFragmentActivity.java new file mode 100644 index 0000000..472e707 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/SupportMapFragmentActivity.java @@ -0,0 +1,50 @@ +package com.tencent.map.vector.demo.basic; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import androidx.fragment.app.FragmentManager; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.SupportMapFragment; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.UiSettings; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class SupportMapFragmentActivity extends AppCompatActivity { + + /** + * SDK提供了SupportMapFragment这个类来加载地图,这个类的方便之处就在于不用手动管理内存 + */ + + private FragmentManager fm; + protected TencentMap tencentMap; + private SupportMapFragment supportMapFragment; + protected UiSettings mapUiSettings; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_support_map_fragment); + + //创建tencentMap地图对象,可以完成对地图的几乎所有操作 + fm = getSupportFragmentManager(); + supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_frag); + tencentMap = supportMapFragment.getMap(); + mapUiSettings = tencentMap.getUiSettings(); + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.984066, 116.307548), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/basic/UiSettingsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/basic/UiSettingsActivity.java new file mode 100644 index 0000000..890682e --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/basic/UiSettingsActivity.java @@ -0,0 +1,86 @@ +package com.tencent.map.vector.demo.basic; + +import android.os.Bundle; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; + +public class UiSettingsActivity extends SupportMapFragmentActivity { + + + private Switch logoControl; + private Switch compassControl; + private Switch scaleViewControl; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + initView(); + } + private void initView(){ + + logoControl = findViewById(R.id.switch_logo); + compassControl = findViewById(R.id.switch_compass); + scaleViewControl = findViewById(R.id.switch_scale_view); + logoControl.setVisibility(View.VISIBLE); + logoControl.setText("logo位置"); + compassControl.setVisibility(View.VISIBLE); + compassControl.setText("指南针"); + scaleViewControl.setVisibility(View.VISIBLE); + scaleViewControl.setText("比例尺"); + + //打开缩放 + mapUiSettings.setZoomControlsEnabled(true); + //打开位置标志 + mapUiSettings.setMyLocationButtonEnabled(true); + + + logoControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + //logo左下角 + mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_BOTTOM_LEFT); + }else{ + //logo右上角 + mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_TOP_RIGHT); + } + + } + }); + + compassControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + //显示指南针 + mapUiSettings.setCompassEnabled(true); + }else{ + //隐藏指南针 + mapUiSettings.setCompassEnabled(false); + } + } + }); + + scaleViewControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + //打开比例尺 + mapUiSettings.setScaleViewEnabled(true); + }else{ + //关闭比例尺 + mapUiSettings.setScaleViewEnabled(false); + } + } + }); + + + + + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/camera/MapAnchorZoomActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapAnchorZoomActivity.java new file mode 100644 index 0000000..3c2a501 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapAnchorZoomActivity.java @@ -0,0 +1,54 @@ +package com.tencent.map.vector.demo.camera; + +import android.os.Bundle; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.Projection; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.RestrictBoundsFitMode; +import com.tencent.tencentmap.mapsdk.maps.model.VisibleRegion; + +public class MapAnchorZoomActivity extends SupportMapFragmentActivity { + private Marker marker; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + LatLng latLng = new LatLng(39.984108,116.307557); + + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + latLng, + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + Projection projection = tencentMap.getProjection(); + + VisibleRegion region = projection.getVisibleRegion(); + + tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_HEIGHT); + tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_WIDTH); + setMarker(latLng); + } + /** + * 设置标注 + */ + private void setMarker(LatLng latLng){ + + MarkerOptions options = new MarkerOptions().position(latLng); + + //设置infowindow + options.title("锚点"); + marker = tencentMap.addMarker(options); + marker.setInfoWindowEnable(true); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/camera/MapBoundActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapBoundActivity.java new file mode 100644 index 0000000..9d7a878 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapBoundActivity.java @@ -0,0 +1,54 @@ +package com.tencent.map.vector.demo.camera; + +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.RadioGroup; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.RestrictBoundsFitMode; + +public class MapBoundActivity extends SupportMapFragmentActivity { + private RadioGroup radioGroup; + private CheckBox fitHeight; + private CheckBox fitWidth; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final LatLng northeastLatLng = new LatLng(39.984066, 116.307548); + final LatLng southwestLatLng = new LatLng(39.974066, 116.297548); + radioGroup = findViewById(R.id.lay_map_bound); + radioGroup.setVisibility(View.VISIBLE); + fitWidth = findViewById(R.id.btn_fit_width); + fitWidth.setText("适应宽度"); + fitHeight = findViewById(R.id.btn_fit_height); + fitHeight.setText("适应高度"); + fitHeight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_HEIGHT); + }else{ + + } + } + }); + + fitWidth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_WIDTH); + }else{ + + } + } + }); + } + + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/camera/MapCameraCenterActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapCameraCenterActivity.java new file mode 100644 index 0000000..91d3cd5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/camera/MapCameraCenterActivity.java @@ -0,0 +1,54 @@ +package com.tencent.map.vector.demo.camera; + +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class MapCameraCenterActivity extends SupportMapFragmentActivity implements TencentMap.OnCameraChangeListener, TencentMap.OnMapClickListener { + private TextView textView; + private String info; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + textView = findViewById(R.id.tv_info); + textView.setVisibility(View.VISIBLE); + tencentMap.setOnCameraChangeListener(this); + tencentMap.setOnMapClickListener(this); + } + + + /** + * 地图视图改变回调 + * @param cameraPosition + */ + @Override + public void onCameraChange(CameraPosition cameraPosition) { + //获取当前地图视图信息 + info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom:"+cameraPosition.zoom; + textView.setText(info); + } + + @Override + public void onCameraChangeFinished(CameraPosition cameraPosition) { + //获取当前地图视图信息 + info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom:"+cameraPosition.zoom; + Toast.makeText(MapCameraCenterActivity.this,info,Toast.LENGTH_SHORT).show(); + textView.setText(info); + + } + + @Override + public void onMapClick(LatLng latLng) { + tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLng,15f, 0, 0))); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/circle/ArcActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/circle/ArcActivity.java new file mode 100644 index 0000000..c503d58 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/circle/ArcActivity.java @@ -0,0 +1,126 @@ +package com.tencent.map.vector.demo.circle; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.Arc; +import com.tencent.tencentmap.mapsdk.maps.model.ArcOptions; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class ArcActivity extends AppCompatActivity { + + private MapView mapView; + private TencentMap tencentMap; + private boolean mMarkerAdded; + private Arc arc; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_arc); + init(); + } + + private void init() { + mapView = findViewById(R.id.mapView); + tencentMap = mapView.getMap(); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(32.059352, 118.796623), + 5, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.markercol, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded); + menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_collisionsmap: + mMarkerAdded = true; + LatLng startLat = new LatLng(39.89491, 116.322056); + LatLng endtLat = new LatLng(22.547, 114.085947); + LatLng passLat = new LatLng(32.059352, 118.796623); + ArcOptions arcOptions = new ArcOptions(); + arcOptions.points(startLat, endtLat); + arcOptions.pass(passLat); + //设置起点到终点,与起点外切线逆时针旋转的夹角角度 + arcOptions.angle(30); + //设置线宽,默认5 + arcOptions.width(2); + //设置线颜色,默认黑色 + arcOptions.color(Color.BLUE); + arc = tencentMap.addArc(arcOptions); + break; + case R.id.menu_close_collisionsmap: + mMarkerAdded = false; + arc.remove(); + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/circle/CircleOptionsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/circle/CircleOptionsActivity.java new file mode 100644 index 0000000..d1ec760 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/circle/CircleOptionsActivity.java @@ -0,0 +1,35 @@ +package com.tencent.map.vector.demo.circle; + +import android.os.Bundle; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.Circle; +import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class CircleOptionsActivity extends SupportMapFragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Circle circle = tencentMap.addCircle(circleOptions); + Circle newCircle = tencentMap.addCircle(newCircleOptions); + newCircle.setCenter(new LatLng(39.98408, 116.30701)); //重新设置圆心 + newCircle.setOptions(newCircleOptions); //重新设置圆形属性 + } + + /** + * 圆形选项 + */ + private CircleOptions circleOptions = new CircleOptions() //圆形选项 + .center(new LatLng(39.9849, 116.3977)) //圆心位置 + .clickable(true) //支持点击 + .fillColor((128 << 24) + (100 << 16) + (50 << 8) + 120) //设置填充颜色RGBA + .radius(110d) //设置半径 + .visible(true) //设置是否可见 + .zIndex(1) //设置堆叠顺序,越大优先级越高 + .strokeWidth(1) //描边宽度 + .strokeColor((128 << 24) + (128 << 16) + (128 << 8) + 128); //描边颜色 + + + private CircleOptions newCircleOptions = new CircleOptions().center(new LatLng(39.121, 116.454)).radius(90d).fillColor(0xff00ff00); +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/circle/DrawCircleActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/circle/DrawCircleActivity.java new file mode 100644 index 0000000..f9a1cf3 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/circle/DrawCircleActivity.java @@ -0,0 +1,24 @@ +package com.tencent.map.vector.demo.circle; + +import android.os.Bundle; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.Circle; +import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class DrawCircleActivity extends SupportMapFragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LatLng latLng = new LatLng(39.984059,116.307771); + Circle circle = tencentMap.addCircle(new CircleOptions(). + center(latLng). + radius(100d). + fillColor(getResources().getColor(R.color.style)). + strokeColor(getResources().getColor(R.color.colorPrimary)). + strokeWidth(1)); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/gesture/GestureSettingsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/gesture/GestureSettingsActivity.java new file mode 100644 index 0000000..80e0942 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/gesture/GestureSettingsActivity.java @@ -0,0 +1,80 @@ +package com.tencent.map.vector.demo.gesture; + +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.RadioGroup; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; + +public class GestureSettingsActivity extends SupportMapFragmentActivity { + + private CheckBox scrollBox; + private CheckBox zoomBox; + private CheckBox rotateBox; + private CheckBox tiltBox; + private RadioGroup radioGroup; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + radioGroup = findViewById(R.id.lay_checkbox); + radioGroup.setVisibility(View.VISIBLE); + initView(); + } + + private void initView(){ + scrollBox = findViewById(R.id.btn_scroll); + zoomBox = findViewById(R.id.btn_zoom); + rotateBox = findViewById(R.id.btn_rotate); + tiltBox = findViewById(R.id.btn_slope); + + + scrollBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + mapUiSettings.setScrollGesturesEnabled(true); + }else{ + mapUiSettings.setScrollGesturesEnabled(false); + } + } + }); + + + zoomBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + mapUiSettings.setZoomGesturesEnabled(true); + }else{ + mapUiSettings.setZoomGesturesEnabled(false); + } + } + }); + + rotateBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + mapUiSettings.setRotateGesturesEnabled(true); + }else{ + mapUiSettings.setRotateGesturesEnabled(false); + } + } + }); + + tiltBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + mapUiSettings.setTiltGesturesEnabled(true); + }else{ + mapUiSettings.setTiltGesturesEnabled(false); + } + } + }); + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapGestureListenActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapGestureListenActivity.java new file mode 100644 index 0000000..046074c --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapGestureListenActivity.java @@ -0,0 +1,82 @@ +package com.tencent.map.vector.demo.gesture; + +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.TencentMapGestureListener; + +public class MapGestureListenActivity extends SupportMapFragmentActivity implements TencentMapGestureListener { + + private TextView textView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + textView = findViewById(R.id.tv_info); + textView.setVisibility(View.VISIBLE); + tencentMap.setTencentMapGestureListener(this); + } + + @Override + public boolean onDoubleTap(float v, float v1) { + textView.setText("单指双击"); + return true; + } + + @Override + public boolean onSingleTap(float v, float v1) { + textView.setText("单指单击"); + return true; + } + + @Override + public boolean onFling(float v, float v1) { + textView.setText("单指惯性滑动"); + return true; + } + + @Override + public boolean onScroll(float v, float v1) { + textView.setText("单指滑动"); + return true; + } + + @Override + public boolean onLongPress(float v, float v1) { + textView.setText("长按"); + return true; + } + + @Override + public boolean onDown(float v, float v1) { + textView.setText("单指按下"); + return true; + } + + @Override + public boolean onUp(float v, float v1) { + textView.setText("单指抬起"); + return true; + } + + @Override + public boolean onTwoFingerMoveAgainst(TwoFingerMoveAgainstStatus twoFingerMoveAgainstStatus, CameraPosition cameraPosition) { + textView.setText("双指捏合"); + return false; + } + + @Override + public void onMapStable() { + textView.setText("地图稳定"); + return; + } + + @Override + public void onMapStableBy(CameraPosition.Trigger trigger) { + textView.setText("地图稳定 by " + trigger.name()); + return; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapListenActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapListenActivity.java new file mode 100644 index 0000000..8bb6f50 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapListenActivity.java @@ -0,0 +1,30 @@ +package com.tencent.map.vector.demo.gesture; + +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class MapListenActivity extends SupportMapFragmentActivity implements TencentMap.OnMapClickListener { + private TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + textView = findViewById(R.id.tv_info); + textView.setVisibility(View.VISIBLE); + tencentMap.setOnMapClickListener(this); + } + + @Override + public void onMapClick(LatLng latLng) { + String info = "经纬度:" + latLng.latitude + "," + latLng.longitude; + Toast.makeText(MapListenActivity.this, info, Toast.LENGTH_SHORT).show(); + textView.setText(info); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapLongClickActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapLongClickActivity.java new file mode 100644 index 0000000..f1cc9c4 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/gesture/MapLongClickActivity.java @@ -0,0 +1,63 @@ +package com.tencent.map.vector.demo.gesture; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class MapLongClickActivity extends SupportMapFragmentActivity implements TencentMap.OnMapLongClickListener { + private TextView textView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + textView = findViewById(R.id.tv_info); + textView.setVisibility(View.VISIBLE); + tencentMap.setOnMapLongClickListener(this); + } + + @Override + public void onMapLongClick(LatLng latLng) { + String info = "经纬度:"+latLng.latitude+","+latLng.longitude; + textView.setText(info); + setMarker(latLng); + } + + /** + * 长按添加标注 + */ + private void setMarker(LatLng latLng){ + + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor); + tencentMap.clear(); + tencentMap.addMarker(options); + + } + + + private Bitmap getBitMap(int resourceId){ + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 100; + int newHeight = 100; + float widthScale = ((float)newWidth)/width; + float heightScale = ((float)newHeight)/height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true); + return bitmap; + } + + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/AggregationOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/AggregationOverlayActivity.java new file mode 100644 index 0000000..cab7cf7 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/AggregationOverlayActivity.java @@ -0,0 +1,197 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.CompoundButton; +import android.widget.Switch; + +import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlay; +import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlayProvider; +import com.tencent.map.sdk.utilities.visualization.aggregation.HoneyCombVectorOverlayProvider; +import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class AggregationOverlayActivity extends AppCompatActivity { + private MapView mMapView; + private TencentMap mTencentMap; + private AggregationOverlay aggregationOverlay; + private AggregationOverlayProvider aggregationOverlayProvider; + private Switch btnSwitch3D; + + boolean mIsSelected; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_aggregation_overlay_design); + init(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.vectorheatmap, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected); + menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_vectorheatmap: + addAggregation(); + break; + case R.id.menu_close_vectorheatmap: + mIsSelected = false; + if (aggregationOverlay != null) { + aggregationOverlay.remove(); + aggregationOverlay = null; + } + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + private void init() { + mMapView = findViewById(R.id.mapView); + mTencentMap = mMapView.getMap(); + mTencentMap.setMapStyle(3); + mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(10f)); + btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D); + bindListener(); + } + + + private void bindListener() { + + CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + switch (compoundButton.getId()) { + case R.id.btn_switch_3D: + if (aggregationOverlay != null) { + if (compoundButton.isChecked()) { + aggregationOverlayProvider.enable3D(true); + aggregationOverlayProvider.enable3D(true).setAnimateDuration(3000); + } else { + aggregationOverlayProvider.enable3D(false); + } + mTencentMap.updateVectorOverlay(aggregationOverlay, aggregationOverlayProvider); + } + break; + default: + break; + } + } + }; + + + btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener); + + } + + protected void addAggregation() { + mIsSelected = true; + if (aggregationOverlay != null) { + return; + } + // mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.961629, 116.355343), 12, 0, 0))); + mTencentMap.setBuildingEnable(false); + mTencentMap.setPoisEnabled(false); + BufferedReader br = null; + try { + ArrayList nodes = new ArrayList(); + br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k"))); + String line = null; + while ((line = br.readLine()) != null) { + String[] lines = line.split("\t"); + if (lines.length == 3) { + double value = Double.parseDouble(lines[2]); + LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0]))); + nodes.add(new WeightedLatLng(latLng, value)); + } + } + + int[] colors = { + Color.argb(255, 0x01, 0x2C, 0x4B), + Color.argb(255, 0x17, 0x3E, 0x59), + Color.argb(255, 0x3A, 0x73, 0x78), + Color.argb(255, 0x98, 0xCD, 0x9A), + Color.argb(255, 0xF6, 0xFB, 0xB6) + }; + double[] startPoints = {0.f, 0.1f, 0.15f, 0.3f, 0.5f}; + + + aggregationOverlayProvider = new HoneyCombVectorOverlayProvider() + .nodes(nodes.toArray(new WeightedLatLng[0])) + .setHeightRange(0, 4000); + aggregationOverlayProvider.colors(colors, startPoints); + aggregationOverlay = mTencentMap.addVectorOverlay(aggregationOverlayProvider); + + + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ArcLineLayerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ArcLineLayerActivity.java new file mode 100644 index 0000000..24d1bc8 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ArcLineLayerActivity.java @@ -0,0 +1,182 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.Switch; + +import com.tencent.map.sdk.utilities.visualization.datamodels.FromToLatLng; +import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlay; +import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlayProvider; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class ArcLineLayerActivity extends AppCompatActivity { + private MapView mMapView; + private TencentMap mTencentMap; + private VectorOverlay vectorOverlay; + private ArcLineOverlayProvider options; + private Switch btnSwitch3D; + boolean mIsSelected; + private Switch btnani3D; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_arc_line_layer_design); + init(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.vectorheatmap, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected); + menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_vectorheatmap: + btnSwitch3D.setVisibility(View.VISIBLE); + addArcLineLayer(); + break; + case R.id.menu_close_vectorheatmap: + mIsSelected = false; + if (vectorOverlay != null) { + vectorOverlay.remove(); + vectorOverlay = null; + } + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + private void init() { + mMapView = findViewById(R.id.mapView); + mTencentMap = mMapView.getMap(); + mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f)); + btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D); + bindListener(); + + } + + private void bindListener() { + CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + switch (compoundButton.getId()) { + case R.id.btn_switch_3D: + if (vectorOverlay != null) { + if (compoundButton.isChecked()) { + options.enable3D(true); + } else { + options.enable3D(false); + } + + mTencentMap.updateVectorOverlay(vectorOverlay, options); + } + break; + + default: + break; + } + } + }; + + btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener); + } + + private void addArcLineLayer() { + mIsSelected = true; + if (vectorOverlay == null) { + // mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.9229731, 116.422880668), 8, 0f, 0f))); + mTencentMap.setMapStyle(3); + + int color = Color.argb(255, 0, 255, 170); + BufferedReader br = null; + final ArrayList nodes = new ArrayList(); + try { + br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("arc.dat"))); + String line = null; + while ((line = br.readLine()) != null) { + String[] lines = line.split(" "); + if (lines.length == 5) { + double arc = Double.parseDouble(lines[4]); + LatLng startLatLng = new LatLng((Double.parseDouble(lines[0])), (Double.parseDouble(lines[1]))); + LatLng endLatLng = new LatLng((Double.parseDouble(lines[2])), (Double.parseDouble(lines[3]))); + nodes.add(new FromToLatLng(startLatLng, endLatLng)); + //nodes.add(new FromToLatLng(startLatLng, endLatLng, arc)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + int[] colors = { + Color.argb(255, 0, 0xd4, 0xff), + Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff), + Color.argb(255, 0, 0xd4, 0xff) + }; + options = new ArcLineOverlayProvider().data(nodes).opacity(2f).width(4).gradient(colors).setAnimateDuration(3000).setHighlightDuration(200).animateColor(Color.argb(255, 0xff, 0xff, 0xff)); + vectorOverlay = mTencentMap.addVectorOverlay(options); + mTencentMap.setPoisEnabled(false); + + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawHeatOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawHeatOverlayActivity.java new file mode 100644 index 0000000..20e246e --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawHeatOverlayActivity.java @@ -0,0 +1,126 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.map.sdk.utilities.heatmap.Gradient; +import com.tencent.map.sdk.utilities.heatmap.HeatMapTileProvider; +import com.tencent.map.sdk.utilities.heatmap.WeightedLatLng; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.TileOverlay; +import com.tencent.tencentmap.mapsdk.maps.model.TileOverlayOptions; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class DrawHeatOverlayActivity extends SupportMapFragmentActivity implements HeatMapTileProvider.OnHeatMapReadyListener{ + + private TileOverlay mHeatmapTileOverlay; + private HeatMapTileProvider mProvider; + //热力图半径 + private static final int ALT_HEATMAP_RADIUS = HeatMapTileProvider.DEFAULT_RADIUS; + //热力图透明度 + private static final double ALT_HEATMAP_OPACITY = HeatMapTileProvider.DEFAULT_OPACITY; + //热力图渐变方案 + public static final Gradient ALT_HEATMAP_GRADIENT = HeatMapTileProvider.DEFAULT_GRADIENT; + + private static final int[] CUSTOM_GRADIENT_COLORS = { + Color.argb(0,0, 225, 225), + Color.rgb(102, 125, 200), + Color.rgb(255, 0, 0) + }; + + private static final float[] CUSTOM_GRADIENT_START_POINTS = { + 0.0f, 0.2f, 1f + }; + + public static final Gradient CUSTOM_HEATMAP_GRADIENT = new Gradient(CUSTOM_GRADIENT_COLORS, + CUSTOM_GRADIENT_START_POINTS); + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setUpMap(); + Button first = findViewById(R.id.btn_bottom); + first.setVisibility(View.VISIBLE); + first.setText("自定义热力图"); + first.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mProvider.setHeatTileGenerator(new HeatMapTileProvider.HeatTileGenerator() { + @Override + public double[] generateKernel(int radius) { + double[] kernel = new double[radius * 2 + 1]; + for (int i = -radius; i <= radius; i++) { + kernel[i + radius] = Math.exp(-i * i / (2 * (radius / 2f) * (radius / 2f))); + } + return kernel; + } + + @Override + public int[] generateColorMap(double opacity) { + return CUSTOM_HEATMAP_GRADIENT.generateColorMap(opacity); + } + }); + mHeatmapTileOverlay.clearTileCache(); + mHeatmapTileOverlay.reload(); + } + }); + + } + private void setUpMap() { + tencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom( + new com.tencent.tencentmap.mapsdk.maps.model.LatLng(39.917128, 116.399266), + 7.946870f)); + initHeatMap(); + } + private void initHeatMap() { + BufferedReader br = null; + try { + ArrayList nodes = new ArrayList<>(); + br = new BufferedReader(new InputStreamReader( + getResources().getAssets().open("data2k"))); + String line; + while ((line = br.readLine()) != null) { + String[] lines = line.split("\t"); + if (lines.length == 3) { + double value = Double.parseDouble(lines[2]); + LatLng latLng = new LatLng((Double.parseDouble(lines[1])), + (Double.parseDouble(lines[0]))); + nodes.add(new WeightedLatLng(latLng, value)); + } + } + + mProvider = new HeatMapTileProvider.Builder() + .weightedData(nodes) + .gradient(ALT_HEATMAP_GRADIENT) + .opacity(ALT_HEATMAP_OPACITY) + .radius(ALT_HEATMAP_RADIUS) + .readyListener(this) + .build(tencentMap); + mHeatmapTileOverlay = tencentMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void onHeatMapReady() { + mHeatmapTileOverlay.clearTileCache(); + mHeatmapTileOverlay.reload(); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawOldVersionHeatOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawOldVersionHeatOverlayActivity.java new file mode 100644 index 0000000..d84558f --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/DrawOldVersionHeatOverlayActivity.java @@ -0,0 +1,118 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; + +public class DrawOldVersionHeatOverlayActivity extends SupportMapFragmentActivity { + + +// private HeatOverlay heatOverlay; +// private HeatOverlay newHeatOverlay; +// +// @Override +// protected void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// HeatOverlayOptions options = setHeatMap(getHeatDataNodes()); //热力图选项 +// HeatOverlayOptions newOptions = setHeatMap(transferHeatNodes(getHeatDataNodes())); //新的热力图选项 +// +// +// heatOverlay = tencentMap.addHeatOverlay(options); //绘制热力图 +// heatOverlay.remove(); //移除热力图 +// +// newHeatOverlay = tencentMap.addHeatOverlay(newOptions); //绘制转换过坐标的热力图 +// } +// +// +// /** +// * 设置热力图Options +// * +// */ +// private HeatOverlayOptions setHeatMap(ArrayList nodes){ +// //配置热力图参数 +// HeatOverlayOptions heatOverlayOptions = new HeatOverlayOptions(); +// heatOverlayOptions.nodes(nodes) +// .radius(18)// 半径,单位是像素,这个数值越大运算量越大,默认值为18,建议设置在18-30之间) +// .colorMapper(new ColorMapper()) +// .onHeatMapReadyListener(()->{ +// runOnUiThread(()-> { +// Toast.makeText(getApplicationContext(), +// "热力图数据准备完毕", Toast.LENGTH_SHORT).show(); +// }); +// }); +// return heatOverlayOptions; +// +// } +// +// /** +// * 配色方案 +// */ +// class ColorMapper implements HeatOverlayOptions.IColorMapper { +// +// @Override +// public int colorForValue(double arg0) { +// // TODO Auto-generated method stub +// int alpha, red, green, blue; +// if (arg0 > 1) { +// arg0 = 1; +// } +// arg0 = Math.sqrt(arg0); +// float a = 20000; +// red = 255; +// green = 119; +// blue = 3; +// if (arg0 > 0.7) { +// green = 78; +// blue = 1; +// } +// if (arg0 > 0.6) { +// alpha = (int) (a * Math.pow(arg0 - 0.7, 3) + 240); +// } else if (arg0 > 0.4) { +// alpha = (int) (a * Math.pow(arg0 - 0.5, 3) + 200); +// } else if (arg0 > 0.2) { +// alpha = (int) (a * Math.pow(arg0 - 0.3, 3) + 160); +// } else { +// alpha = (int) (700 * arg0); +// } +// if (alpha > 255) { +// alpha = 255; +// } +// return Color.argb(alpha, red, green, blue); +// } +// } +// +// +// +// /** +// * 准备热力图数据 +// * @return +// */ +// private ArrayList getHeatDataNodes(){ +// //HeatDataNode 是热力图热点,包括热点位置和热度值(HeatOverlay会根据传入的全部节点的热度值范围计算最终的颜色表现) +// ArrayList nodes = new ArrayList<>(); +// nodes.add(new HeatDataNode(new LatLng(39.984108,116.307557), 86)); +// nodes.add(new HeatDataNode(new LatLng(39.984208,116.307457), 44)); +// nodes.add(new HeatDataNode(new LatLng(39.983208,116.307457), 64)); +// nodes.add(new HeatDataNode(new LatLng(39.983208,116.317457), 54)); +// nodes.add(new HeatDataNode(new LatLng(39.684308,116.317457), 34)); +// nodes.add(new HeatDataNode(new LatLng(39.684108,116.307457), 24)); +// nodes.add(new HeatDataNode(new LatLng(39.984408,116.327457), 44)); +// nodes.add(new HeatDataNode(new LatLng(39.984508,116.307457), 54)); +// nodes.add(new HeatDataNode(new LatLng(39.984208,116.307457), 14)); +// nodes.add(new HeatDataNode(new LatLng(39.984298,116.307457), 64)); +// nodes.add(new HeatDataNode(new LatLng(39.984208,116.327457), 74)); +// nodes.add(new HeatDataNode(new LatLng(39.984108,116.317457), 84)); +// nodes.add(new HeatDataNode(new LatLng(39.983208,116.297457), 65)); +// nodes.add(new HeatDataNode(new LatLng(39.982208,116.307457), 54)); +// nodes.add(new HeatDataNode(new LatLng(39.985208,116.297457), 69)); +// return nodes; +// } +// +// +// private ArrayList transferHeatNodes(ArrayList nodes){ +// ArrayList newNodes = new ArrayList(); +// for (HeatDataNode node: nodes){ +// newNodes.add(new HeatDataNode(new LatLng(node.getPoint().getLatitude() + 0.01, node.getPoint().getLongitude() - 0.01), Math.floor(node.getValue() + Math.random()))); +// +// } +// return newNodes; +// } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/GLModelActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/GLModelActivity.java new file mode 100644 index 0000000..466e5d5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/GLModelActivity.java @@ -0,0 +1,166 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; + +import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlay; +import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import com.tencent.tencentmap.mapsdk.maps.model.GeneralTranslateAnimator; +import com.tencent.tencentmap.mapsdk.maps.model.IAnimatorModel; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.io.File; +import java.util.Arrays; + +import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.GeoGraphicType; +import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.PixelType; + +public class GLModelActivity extends AppCompatActivity { + + /** + * 和其他覆盖物相同三维模型图也可控制图层的Level和zIndex + * 可通过 GLModelOverlayProvider的displayLevel和zIndex进行设置 + * displayLevel - 默认层级为POI之下 OverlayLevel.OverlayLevelAboveBuildings + * 相同Level内的显示层级关系通过zIndex(int)来控制,zIndex越大越靠上显示。 Level优先级高于zIndex displayLevel必须为如下值之一,否则不生效 + */ + + private MapView mapView; + protected TencentMap tencentMap; + private String mResourcePath; + private GLModelOverlay vectorOverlay; + private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697"; + private LatLng[] mCarLatLngArray; + private GeneralTranslateAnimator animator; + private Polyline polyline; + private Spinner mSpinner; + private String[] glmodelAnimator = new String[]{"开启平滑移动", "开启骨骼动画", "关闭骨骼动画"}; + private GLModelOverlayProvider provider; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_g_l_model); + mapView = findViewById(R.id.mapView); + tencentMap = this.mapView.getMap(); + String[] linePointsStr = mLine.split(","); + mCarLatLngArray = new LatLng[linePointsStr.length / 4]; + + for (int i = 0; i < mCarLatLngArray.length; i++) { + double latitude = Double.parseDouble(linePointsStr[i * 4]); + double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]); + mCarLatLngArray[i] = new LatLng(latitude, longitude); + } + polyline = tencentMap.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorAccent).arrow(true)); + tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50)); + creatglmode(); + init(); + } + + private void creatglmode() { + //gltf格式三维模型文件在assets内 + String file = "BrainStem.gltf"; + String SKELETON_PATH = "gltf-BrainStem"; + //获取外部存储 + mResourcePath = getExternalFilesDir(null).getAbsolutePath() + File.separator + SKELETON_PATH; + provider = new GLModelOverlayProvider( + mResourcePath + File.separator + file, + new LatLng(39.98409, 116.30804)).coordType(PixelType) + .pixelBounds(400, 1200).rotationX(90).rotationY(0).rotationZ(0).setClickEnable(true); + vectorOverlay = tencentMap.addVectorOverlay(provider); + } + + private void init() { + mSpinner = findViewById(R.id.sp_glmode); + ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, glmodelAnimator); + mSpinner.setAdapter(adapter); + mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position) { + //开启骨骼动画 + case 0: + animator = new GeneralTranslateAnimator.Builder(vectorOverlay, 6000, + mCarLatLngArray).rotateEnabled(true).initRotate(180).modelType(GeneralTranslateAnimator.ModelType.MODEL_OVERLAY).build(); + animator.startAnimation(); + animator.addAnimatorEndListener(new IAnimatorModel.IAnimatorEndListener() { + @Override + public void onAnimatorEnd() { + Log.i("TransformActivity", "onAnimatorEnd"); + } + }); + break; + //停止骨骼动画 + case 1: + vectorOverlay.playSkeletonAnimation(0, 1, true); + break; + //模型平移 + case 2: + vectorOverlay.stopSkeletonAnimation(); + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + } + + /** + * mapview的生命周期管理 + */ + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + vectorOverlay.remove(); + + } + + @Override + protected void onRestart() { + super.onRestart(); + mapView.onRestart(); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/HeatMapVectorOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/HeatMapVectorOverlayActivity.java new file mode 100644 index 0000000..0036536 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/HeatMapVectorOverlayActivity.java @@ -0,0 +1,171 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; + +import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng; +import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlay; +import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlayProvider; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class HeatMapVectorOverlayActivity extends AppCompatActivity { + private MapView mMapView; + private TencentMap mTencentMap; + private GradientVectorOverlay heatTileOverlay; + private GradientVectorOverlayProvider heatMapTileProvider; + boolean mIsSelected; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_heat_map_vector_overlay_design); + init(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.vectorheatmap, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected); + menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_vectorheatmap: + addHeatMap(); + break; + case R.id.menu_close_vectorheatmap: + mIsSelected = false; + if (heatTileOverlay != null) { + heatTileOverlay.remove(); + heatTileOverlay = null; + } + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + private void init() { + mMapView = findViewById(R.id.mapView); + mTencentMap = mMapView.getMap(); + mTencentMap.setMapStyle(3); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(31.085414, 111.024319), + 4, + 20f, + 1f)); + mTencentMap.moveCamera(cameraSigma); + } + + + private void addHeatMap() { + mIsSelected = true; + if (heatTileOverlay != null) { + return; + } + mTencentMap.setBuildingEnable(false); + mTencentMap.setPoisEnabled(false); + BufferedReader br = null; + try { + ArrayList nodes = new ArrayList(); + br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k"))); + String line = null; + while ((line = br.readLine()) != null) { + String[] lines = line.split("\t"); + if (lines.length == 3) { + double value = Double.parseDouble(lines[2]); + LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0]))); + nodes.add(new WeightedLatLng(latLng, value)); + } + } + + // 通用配色1 + int[] colors = { + Color.argb(255, 77, 111, 255), + Color.argb(255, 0, 238, 227), + Color.argb(255, 113, 236, 80), + Color.argb(255, 255, 176, 0), + Color.argb(255, 255, 72, 0) + }; + float[] startPoints = {0.1f, 0.185f, 0.3571f, 0.6142f, 1f}; + + + heatMapTileProvider = new GradientVectorOverlayProvider() + .weightedData(nodes).enable3D(true) + .radius(56).setMaxHeight(500).setAnimateDuration(3000); + heatMapTileProvider.opacity(0.95f); + heatMapTileProvider.gradient(colors, startPoints); + heatTileOverlay = mTencentMap.addVectorOverlay(heatMapTileProvider); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ScatterPlotOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ScatterPlotOverlayActivity.java new file mode 100644 index 0000000..d56cc37 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/ScatterPlotOverlayActivity.java @@ -0,0 +1,180 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.CompoundButton; +import android.widget.Spinner; +import android.widget.Switch; + +import com.tencent.map.sdk.utilities.visualization.datamodels.ScatterLatLng; +import com.tencent.map.sdk.utilities.visualization.scatterplot.BitmapScatterPlotOverlayProvider; +import com.tencent.map.sdk.utilities.visualization.scatterplot.DotScatterPlotOverlayProvider; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay; + +import java.io.BufferedReader; +import java.util.ArrayList; +import java.util.Random; + +public class ScatterPlotOverlayActivity extends AppCompatActivity { + private MapView mMapView; + private TencentMap mTencentMap; + private VectorOverlay vectorOverlay; + boolean mIsSelected; + private DotScatterPlotOverlayProvider dotScatterPlotOverlayProvider; + private BitmapScatterPlotOverlayProvider provider; + private String[] styles = new String[]{"添加点散点", "添加图片散点"}; + private Spinner mSpinner; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_scatter_plot_overlay); + init(); + } + + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + private void init() { + mMapView = findViewById(R.id.mapView); + mTencentMap = mMapView.getMap(); + mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f)); + mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(40.040219, 116.273348), 20, 0, 0))); + mSpinner = findViewById(R.id.sp_style); + ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles); + mSpinner.setAdapter(adapter); + mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position) { + case 0: + if (vectorOverlay != null) { + vectorOverlay.remove(); + vectorOverlay = null; + } + addDotVectorOverlay(); + mTencentMap.updateVectorOverlay(vectorOverlay, dotScatterPlotOverlayProvider); + break; + case 1: + if (vectorOverlay != null) { + vectorOverlay.remove(); + vectorOverlay = null; + } + addBitmapVectorOverlay(); + mTencentMap.updateVectorOverlay(vectorOverlay, provider); + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + } + + + private void addDotVectorOverlay() { + mIsSelected = true; + if (vectorOverlay == null) { + BufferedReader br = null; + final ArrayList nodes = new ArrayList(); + double lat = 40.040219; + double lng = 116.273348; + double value = 100; + Random r = new Random(); + for (int i = 0; i < 2000; i++) { + double a = r.nextInt(10) * 1E-5; + double b = r.nextInt(10) * 1E-5; + LatLng latLng = new LatLng(lat + a, lng + b); + nodes.add(new ScatterLatLng(latLng, value)); + } + int[] colors = { + Color.argb(255, 0, 0xd4, 0xff), + Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff), + Color.argb(255, 0, 0xd4, 0xff) + }; + + dotScatterPlotOverlayProvider = new DotScatterPlotOverlayProvider().data(nodes).opacity(2f).radius(2).animate(true).colors(colors); + + vectorOverlay = mTencentMap.addVectorOverlay(dotScatterPlotOverlayProvider); + + } + + } + + private void addBitmapVectorOverlay() { + mIsSelected = true; + if (vectorOverlay == null) { + final ArrayList nodes = new ArrayList(); + double lat = 40.040219; + double lng = 116.273348; + double value = 10; + Random r = new Random(); + for (int i = 0; i < 1000; i++) { + double a = r.nextInt(10) * 1E-5; + double b = r.nextInt(10) * 1E-5; + LatLng latLng = new LatLng(lat + a, lng + b); + nodes.add(new ScatterLatLng(latLng, value)); + } + BitmapDescriptor[] bitmaps = { + BitmapDescriptorFactory.fromAsset("21.jpg"), + BitmapDescriptorFactory.fromAsset("22.jpg"), + BitmapDescriptorFactory.fromAsset("23.jpg"), + BitmapDescriptorFactory.fromAsset("24.jpg"), + BitmapDescriptorFactory.fromAsset("25.jpg"), + BitmapDescriptorFactory.fromAsset("26.jpg"), + }; + provider = new BitmapScatterPlotOverlayProvider().data(nodes).bitmaps(bitmaps).opacity(2f).scale(20, 10); + vectorOverlay = mTencentMap.addVectorOverlay(provider); + } + + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/TrailOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/TrailOverlayActivity.java new file mode 100644 index 0000000..5ca3dfe --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/TrailOverlayActivity.java @@ -0,0 +1,147 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import com.tencent.map.sdk.utilities.visualization.datamodels.TimeLatLng; +import com.tencent.map.sdk.utilities.visualization.datamodels.TrailLatLng; +import com.tencent.map.sdk.utilities.visualization.trails.TrailOverlayProvider; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class TrailOverlayActivity extends AppCompatActivity { + private MapView mMapView; + private TencentMap mTencentMap; + private VectorOverlay vectorOverlay; + boolean mIsSelected; + private TrailOverlayProvider trailOverlayProvider; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_trail_overlay); + init(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.vectorheatmap, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected); + menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_vectorheatmap: + addArcLineLayer(); + break; + case R.id.menu_close_vectorheatmap: + mIsSelected = false; + if (vectorOverlay != null) { + vectorOverlay.remove(); + vectorOverlay = null; + } + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + private void init() { + mMapView = findViewById(R.id.mapView); + mTencentMap = mMapView.getMap(); + mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.942117, 116.33668), 11)); + } + + private void addArcLineLayer() { + mIsSelected = true; + if (vectorOverlay == null) { + + mTencentMap.setPoisEnabled(false); + BufferedReader br = null; + long currentTime = System.currentTimeMillis(); + List startLats = new ArrayList<>(); + try { + br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("trailData.dat"))); + + String line = null; + while ((line = br.readLine()) != null) { + String[] oneDot = line.split(","); + TimeLatLng[] timeLatLngs = new TimeLatLng[oneDot.length]; + int i = 0; + for (String timeLatLng : oneDot) { + String[] values = timeLatLng.split("\t"); + LatLng latlng = new LatLng((Double.parseDouble(values[0])), (Double.parseDouble(values[1]))); + int timeStamp = Integer.parseInt(values[2]); + timeLatLngs[i++] = new TimeLatLng(latlng, timeStamp); + } + TrailLatLng tmp = new TrailLatLng(timeLatLngs); + startLats.add(tmp); + } + } catch (Exception e) { + e.printStackTrace(); + } + int[] colors = {Color.argb(0xff, 0x00, 0x00, 0xff), + Color.argb(0x00, 0xff, 0xff, 0x00)}; + + trailOverlayProvider = new TrailOverlayProvider().type(TrailOverlayProvider.TrailOverlayType.Trail).data(startLats).opacity(2f).width(10).gradient(colors).setHighlightDuration(8000).setAnimateStartTime(0, 25000); + vectorOverlay = mTencentMap.addVectorOverlay(trailOverlayProvider); + + + } + + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/VectorHeatMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/VectorHeatMapActivity.java new file mode 100644 index 0000000..d62ab21 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/heatoverlay/VectorHeatMapActivity.java @@ -0,0 +1,182 @@ +package com.tencent.map.vector.demo.heatoverlay; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; + +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.CompoundButton; +import android.widget.ToggleButton; + +import com.tencent.map.sdk.utilities.heatmap.WeightedLatLng; +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.VectorHeatAggregationUnit; +import com.tencent.tencentmap.mapsdk.maps.model.VectorHeatOverlay; +import com.tencent.tencentmap.mapsdk.maps.model.VectorHeatOverlayOptions; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +/** + * 蜂窝热力图 + */ +public class VectorHeatMapActivity extends SupportMapFragmentActivity { + + MapView mMapView; + TencentMap mTencentMap; + VectorHeatOverlay mOverlay; + boolean mIsSelected; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_vector_heat_map); + mMapView = findViewById(R.id.map_view); + mTencentMap = mMapView.getMap(); + mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom( + new LatLng(36.139985, 120.402243), + 11)); + + mTencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { + @Override + public void onMapClick(LatLng latlng) { + if (mOverlay == null) { + return; + } + VectorHeatAggregationUnit unit = mOverlay.getUnit(latlng); + if (unit == null) { + Log.e("VectorHeatMapActivity", "no unit found"); + return; + } + Log.e("VectorHeatMapActivity", "unit center:" + unit.getCenter() + + ", intensity:" + unit.getIntensity() + + ", size:" + unit.getNodes().length); + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.vectorheatmap, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected); + menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_vectorheatmap: + addVectorHeatMap(); + break; + case R.id.menu_close_vectorheatmap: + removeVectorHeatMap(); + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + private ArrayList getHeatNodes() { + BufferedReader br = null; + ArrayList nodes = null; + try { + nodes = new ArrayList<>(); + br = new BufferedReader(new InputStreamReader( + getResources().getAssets().open("honeycomb.txt"))); + String line; + while ((line = br.readLine()) != null) { + String[] lines = line.split("\t"); + if (lines.length == 3) { + double value = Double.parseDouble(lines[2]); + LatLng latLng = new LatLng((Double.parseDouble(lines[1])), + (Double.parseDouble(lines[0]))); + nodes.add(new WeightedLatLng(latLng, 1)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return nodes; + } + } + + @Override + protected void onResume() { + super.onResume(); + if (mMapView != null) { + mMapView.onResume(); + } + } + + @Override + protected void onPause() { + super.onPause(); + if (mMapView != null) { + mMapView.onPause(); + } + } + + @Override + protected void onStop() { + super.onStop(); + if (mMapView != null) { + mMapView.onStop(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mMapView != null) { + mMapView.onDestroy(); + } + } + + private void addVectorHeatMap() { + mIsSelected = true; + if (mOverlay != null) { + return; + } + WeightedLatLng[] nodes = getHeatNodes().toArray(new WeightedLatLng[0]); + VectorHeatOverlayOptions options = new VectorHeatOverlayOptions() + .nodes(nodes) + .size(2000) + .gap(100) + .colors(new int[]{0x45fa4b14, 0x99fa4b14, 0xd9fa4b14}) + .startPoints(new double[]{0, 0.6, 0.8}); + mOverlay = mTencentMap.addVectorHeatOverlay(options); + } + + public void removeVectorHeatMap() { + mIsSelected = false; + if (mOverlay == null) { + return; + } + mOverlay.remove(); + mOverlay = null; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/location/LocationLayerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/location/LocationLayerActivity.java new file mode 100644 index 0000000..aeb6339 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/location/LocationLayerActivity.java @@ -0,0 +1,251 @@ +package com.tencent.map.vector.demo.location; + +import android.Manifest; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.location.Location; +import android.os.Looper; + +import androidx.annotation.NonNull; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.RadioGroup; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.google.gson.Gson; +import com.tencent.map.geolocation.TencentLocation; +import com.tencent.map.geolocation.TencentLocationListener; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.map.geolocation.TencentLocationRequest; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; + +import java.util.List; + +import pub.devrel.easypermissions.EasyPermissions; + +public class LocationLayerActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks, LocationSource, TencentLocationListener, TencentMap.OnMapLongClickListener, RadioGroup.OnCheckedChangeListener { + + private OnLocationChangedListener locationChangedListener; + + private TencentLocationManager locationManager; + private TencentLocationRequest locationRequest; + private MyLocationStyle locationStyle; + private RadioGroup radioGroup; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + //定位需要申请的权限 + String[] perms = { + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.READ_PHONE_STATE + }; + + if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限 + Log.i("location", "已获取权限"); + } else { + EasyPermissions.requestPermissions(this, "必要的权限", 0, perms); + } + //设置显示定位的图标 + mapUiSettings.setMyLocationButtonEnabled(true); + tencentMap.setOnMapLongClickListener(this); + + radioGroup = findViewById(R.id.location_type); + radioGroup.setVisibility(View.VISIBLE); + radioGroup.setOnCheckedChangeListener(this); + + //建立定位 + initLocation(); + //SDK版本4.3.5新增内置定位标点击回调监听 + tencentMap.setMyLocationClickListener(new TencentMap.OnMyLocationClickListener() { + @Override + public boolean onMyLocationClicked(LatLng latLng) { + Toast.makeText(LocationLayerActivity.this, "内置定位标点击回调", Toast.LENGTH_SHORT).show(); + return true; + } + }); + } + + /** + * 定位的一些初始化设置 + */ + private void initLocation() { + //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + locationManager = TencentLocationManager.getInstance(this); + //设置坐标系 + locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); + //创建定位请求 + locationRequest = TencentLocationRequest.create(); + //设置定位周期(位置监听器回调周期)为3s + locationRequest.setInterval(3000); + + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + setLocMarkerStyle(); + tencentMap.setMyLocationStyle(locationStyle); + } + + /** + * 设置定位图标样式 + */ + private void setLocMarkerStyle() { + locationStyle = new MyLocationStyle(); + //创建图标 + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.location_icon)); + locationStyle.icon(bitmapDescriptor); + //设置定位圆形区域的边框宽度 + locationStyle.strokeWidth(3); + //设置圆区域的颜色 + locationStyle.fillColor(R.color.style); + } + + private Bitmap getBitMap(int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 55; + int newHeight = 55; + float widthScale = ((float) newWidth) / width; + float heightScale = ((float) newHeight) / height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); + return bitmap; + } + + /** + * 实现位置监听 + * + * @param tencentLocation + * @param i + * @param s + */ + @Override + public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { + + if (i == TencentLocation.ERROR_OK && locationChangedListener != null) { + Location location = new Location(tencentLocation.getProvider()); + //设置经纬度以及精度 + location.setLatitude(tencentLocation.getLatitude()); + location.setLongitude(tencentLocation.getLongitude()); + location.setAccuracy(tencentLocation.getAccuracy()); + locationChangedListener.onLocationChanged(location); + + //显示回调的实时位置信息 + runOnUiThread(new Runnable() { + @Override + public void run() { + //打印tencentLocation的json字符串 +// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); + } + }); + } + } + + @Override + public void onStatusUpdate(String s, int i, String s1) { + //GPS, WiFi, Radio 等状态发生变化 + Log.v("State changed", s + "===" + s1); + } + + + @Override + public void activate(OnLocationChangedListener onLocationChangedListener) { + locationChangedListener = onLocationChangedListener; + + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + switch (err) { + case 1: + Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); + break; + case 2: + Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show(); + break; + case 3: + Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show(); + break; + + default: + break; + } + } + + @Override + public void deactivate() { + locationManager.removeUpdates(this); + locationManager = null; + locationRequest = null; + locationChangedListener = null; + } + + @Override + public void onPermissionsGranted(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "success"); + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + Log.e("location quest: ", "failed"); + } + + @Override + public void onMapLongClick(LatLng latLng) { + Location location = new Location("LongPressLocationProvider"); + location.setLatitude(latLng.latitude); + location.setLongitude(latLng.longitude); + location.setAccuracy(20); + locationChangedListener.onLocationChanged(location); + Log.i("long click", new Gson().toJson(latLng)); + } + + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + //连续定位,但不会移动到地图中心点,并且会跟随设备移动 + case R.id.btn_follow_no_center: + + initLocation(); + locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER); + tencentMap.setMyLocationStyle(locationStyle); + break; + //连续定位,且将视角移动到地图中心,定位点依照设备方向旋转,并且会跟随设备移动,默认是此种类型 + case R.id.btn_location_rotate: + + initLocation(); + locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); + tencentMap.setMyLocationStyle(locationStyle); + break; + //连续定位,但不会移动到地图中心点,定位点依照设备方向旋转,并且跟随设备移动 + case R.id.btn_location_rotate_no_center: + + initLocation(); + locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER); + tencentMap.setMyLocationStyle(locationStyle); + break; + //连续定位,但不会移动到地图中心点,地图依照设备方向旋转,并且会跟随设备移动 + case R.id.btn_map_rotate_no_center: + + initLocation(); + locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER); + tencentMap.setMyLocationStyle(locationStyle); + break; + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/location/LocationPointActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/location/LocationPointActivity.java new file mode 100644 index 0000000..b841353 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/location/LocationPointActivity.java @@ -0,0 +1,190 @@ +package com.tencent.map.vector.demo.location; + +import android.Manifest; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.location.Location; +import android.os.Bundle; +import android.os.Looper; +import androidx.annotation.NonNull; +import android.util.Log; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.map.geolocation.TencentLocation; +import com.tencent.map.geolocation.TencentLocationListener; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.map.geolocation.TencentLocationRequest; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; + +import java.util.List; + +import pub.devrel.easypermissions.EasyPermissions; + +public class LocationPointActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener{ + private LocationSource.OnLocationChangedListener locationChangedListener; + + private TencentLocationManager locationManager; + private TencentLocationRequest locationRequest; + private MyLocationStyle locationStyle; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + //定位需要申请的权限 + String[] perms = { + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.READ_PHONE_STATE + }; + + if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限 + Log.i("location", "已获取权限"); + } else { + EasyPermissions.requestPermissions(this, "必要的权限", 0, perms); + } + //设置显示定位的图标 + TencentLocationManager.setUserAgreePrivacy(true); + //建立定位 + initLocation(); + } + + + /** + * 设置定位图标样式 + */ + private void setLocMarkerStyle(){ + locationStyle = new MyLocationStyle(); + //创建图标 + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + locationStyle.icon(bitmapDescriptor); + //设置定位圆形区域的边框宽度 + locationStyle.strokeWidth(3); + //设置圆区域的颜色 + locationStyle.fillColor(R.color.style); + + tencentMap.setMyLocationStyle(locationStyle); + } + + + + private Bitmap getBitMap(int resourceId){ + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 55; + int newHeight = 55; + float widthScale = ((float)newWidth)/width; + float heightScale = ((float)newHeight)/height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true); + return bitmap; + } + + + + /** + * 定位的一些初始化设置 + */ + private void initLocation(){ + //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + locationManager = TencentLocationManager.getInstance(this); + //设置坐标系 + locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); + //创建定位请求 + locationRequest = TencentLocationRequest.create(); + //设置定位周期(位置监听器回调周期)为3s + locationRequest.setInterval(3000); + + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + setLocMarkerStyle(); +// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); + tencentMap.setMyLocationStyle(locationStyle); + } + /** + * 实现位置监听 + * @param tencentLocation + * @param i + * @param s + */ + @Override + public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { + + if(i == TencentLocation.ERROR_OK && locationChangedListener != null){ + Location location = new Location(tencentLocation.getProvider()); + //设置经纬度以及精度 + location.setLatitude(tencentLocation.getLatitude()); + location.setLongitude(tencentLocation.getLongitude()); + location.setAccuracy(tencentLocation.getAccuracy()); + locationChangedListener.onLocationChanged(location); + + //显示回调的实时位置信息 + runOnUiThread(new Runnable() { + @Override + public void run() { + //打印tencentLocation的json字符串 +// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); + } + }); + } + } + + @Override + public void onStatusUpdate(String s, int i, String s1) { + //GPS, WiFi, Radio 等状态发生变化 + Log.v("State changed", s +"===" + s1); + } + + + @Override + public void activate(OnLocationChangedListener onLocationChangedListener) { + locationChangedListener = onLocationChangedListener; + + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + switch (err) { + case 1: + Toast.makeText(this,"设备缺少使用腾讯定位服务需要的基本条件",Toast.LENGTH_SHORT).show(); + break; + case 2: + Toast.makeText(this,"manifest 中配置的 key 不正确",Toast.LENGTH_SHORT).show(); + break; + case 3: + Toast.makeText(this,"自动加载libtencentloc.so失败",Toast.LENGTH_SHORT).show(); + break; + + default: + break; + } + } + + @Override + public void deactivate() { + locationManager.removeUpdates(this); + locationManager = null; + locationRequest = null; + locationChangedListener=null; + } + + @Override + public void onPermissionsGranted(int requestCode, @NonNull List perms) { + Log.e("location quest: ","success"); + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + Log.e("location quest: ","failed"); + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/AoiLayerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/AoiLayerActivity.java new file mode 100644 index 0000000..d9479b3 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/AoiLayerActivity.java @@ -0,0 +1,151 @@ +package com.tencent.map.vector.demo.marker; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions; +import com.tencent.tencentmap.mapsdk.maps.model.AoiLayer; +import com.tencent.tencentmap.mapsdk.maps.model.AoiLayerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.MapPoi; +import com.tencent.tencentmap.mapsdk.maps.model.SubPoi; + +public class AoiLayerActivity extends AppCompatActivity implements AoiLayer.OnAoiLayerLoadListener { + private MapView mMapView; + private RelativeLayout mRelativeLayout; + private TencentMap mTencentMap; + private boolean mIsSelected; + private AoiLayer mAoiLayer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_aoi_layer); + mRelativeLayout = findViewById(R.id.relativelayout); + TencentMapOptions options = new TencentMapOptions(); + mMapView = new MapView(this, options); + mRelativeLayout.addView(mMapView); + mTencentMap = mMapView.getMap(); + } + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + @Override + public void onAoiLayerLoaded(boolean b, AoiLayer aoiLayer) { + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.marker_groundoverlay, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add_groundoverlay).setVisible(!mIsSelected); + menu.findItem(R.id.menu_remove_groundoverlay).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_add_groundoverlay: + addAOI(); + break; + case R.id.menu_remove_groundoverlay: + removeAOI(); + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + /** + * 添加AOI面 + */ + private void addAOI() { + mIsSelected = true; + //通过检索能力获取Poi的ID ,以北京大学为例 + String poiId = "11107399966856067949"; + //AOI面配置项 + AoiLayerOptions options = new AoiLayerOptions(); + //设置显示级别 有效范围是(0-20] + options.setDisplayLevel(10, 20); + + //添加一个Aoi面 + mAoiLayer = mTencentMap.addAoiLayer(poiId, options, new AoiLayer.OnAoiLayerLoadListener() { + + @Override + public void onAoiLayerLoaded(boolean b, AoiLayer aoiLayer) { + if (b) { + Toast.makeText(AoiLayerActivity.this, "添加[" + aoiLayer.name() + "]成功!", Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(AoiLayerActivity.this, "添加[" + aoiLayer.getId() + "]失败!", Toast.LENGTH_LONG).show(); + } + } + }); + + //设置AOi面上的子POI点的点击回调 + mTencentMap.setOnMapPoiClickListener(new TencentMap.OnMapPoiClickListener() { + + @Override + public void onClicked(MapPoi mapPoi) { + if (mapPoi instanceof SubPoi) { + Toast.makeText(AoiLayerActivity.this, "SubPoi[" + mapPoi.getName() + "]被点击!", Toast.LENGTH_LONG).show(); + } + } + }); + + } + + /** + * 移除AOI面 + */ + private void removeAOI() { + mIsSelected = false; + if (mAoiLayer != null) { + mAoiLayer.remove(); + } + } +} + + diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/CustomRenderActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/CustomRenderActivity.java new file mode 100644 index 0000000..576efa5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/CustomRenderActivity.java @@ -0,0 +1,281 @@ +package com.tencent.map.vector.demo.marker; + +import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.PointF; +import android.opengl.GLES20; +import android.os.Bundle; +import android.util.Log; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.CustomRender; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.ShortBuffer; + +/** + * OpenGL绘制 + */ +public class CustomRenderActivity extends AppCompatActivity { + + private static final String TAG = CustomRenderActivity.class.getSimpleName(); + + // 标识是否第一次绘制3D立方体 + private boolean mIsFirstDraw3DCube = true; + + // 立方体8个顶点坐标 + private float[] mVertices = { + -1, -1, -0, + 1, -1, -0, + 1, 1, -0, + -1, 1, -0, + -1, -1, 1, + 1, -1, 1, + 1, 1, 1, + -1, 1, 1, + }; + + // 3D立方体顶点绘制顺序列表 + private short[] mDrawIndices = { + 5, 4, 0, 1, 5, 0, 6, 5, 1, 2, 6, 1, + 7, 6, 2, 3, 7, 2, 4, 7, 3, 0, 4, 3, + 6, 7, 4, 5, 6, 4, 1, 0, 3, 2, 1, 3 + }; + + // 3D立方体8个顶点颜色值 + private float[] mVertexColors = { + 1f, 1f, 0f, 1f, + 0f, 1f, 1f, 1f, + 1f, 0f, 1f, 1f, + 0f, 0f, 0f, 1f, + 1f, 1f, 1f, 1f, + 1f, 0f, 0f, 1f, + 0f, 1f, 0f, 1f, + 0f, 0f, 1f, 1f + }; + + // 立方体顶点坐标Buffer + private FloatBuffer mVertexBuffer; + + // 顶点绘制顺序Buffer + private ShortBuffer mIndexBuffer; + + // 立方体顶点颜色Buffer + private FloatBuffer mColorBuffer; + + // 3D立方体着色器 + private CubeShader mCubeShader; + + private MapView mapView; + + private TencentMap mMap; + + private LatLng latlng = new LatLng(40.04199816,116.27479076); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_custom_render); + mapView = findViewById(R.id.map_view); + mMap = mapView.getMap(); + mMap.addOnMapLoadedCallback(new TencentMap.OnMapLoadedCallback() { + @Override + public void onMapLoaded() { + mMap.setCustomRender(new CubeRender()); + mMap.removeOnMapLoadedCallback(this); + } + }); + + mMap.moveCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder() + .target(latlng).zoom(16).tilt(45).build())); + + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + mapView.onDestroy(); + } + + private class CubeRender implements CustomRender { + + private void initCubeData(float width, float height, float depth) { + // 对标地图坐标 + initVertices(mVertices, width, height, depth); + + // 立方体顶点数据Buffer + mVertexBuffer = ByteBuffer.allocateDirect(mVertices.length * 4) + .order(ByteOrder.nativeOrder()) + .asFloatBuffer(); + mVertexBuffer.put(mVertices).position(0); + + // 立方体顶点绘制顺序Buffer + ByteBuffer byteBuffer = ByteBuffer.allocateDirect(mDrawIndices.length * 4); + byteBuffer.order(ByteOrder.nativeOrder()); + mIndexBuffer = byteBuffer.asShortBuffer(); + mIndexBuffer.put(mDrawIndices); + mIndexBuffer.position(0); + + // 立方体顶点颜色Buffer + ByteBuffer byteBuffer1 = ByteBuffer.allocateDirect(mVertexColors.length * 4); + byteBuffer1.order(ByteOrder.nativeOrder()); + mColorBuffer = byteBuffer1.asFloatBuffer(); + mColorBuffer.put(mVertexColors); + mColorBuffer.position(0); + } + + private void initCubeShader() { + mCubeShader = new CubeShader(); + mCubeShader.init(); + } + + private void initVertices(float[] vertices, float width, float height, float depth) { + for (int i = 0; i < vertices.length / 3; i++) { + int m = i * 3; + vertices[m] = vertices[m] * width; + vertices[m + 1] = vertices[m + 1] * height; + vertices[m + 2] = vertices[m + 2] * depth; + } + } + + @Override + public void onDrawFrame() { + drawCube(); + } + + private void drawCube() { + + if (mIsFirstDraw3DCube) { + float cubeWidth = 0.2f * 10000 / 2; + float cubeHeight = 0.2f * 10000 / 2; + float cubeDepth = 0.4f * 10000 / 2; + initCubeData(cubeWidth, cubeHeight, cubeDepth); + initCubeShader(); + mIsFirstDraw3DCube = false; + } + + if (null == mCubeShader) { + return; + } + + // 绑定地图移动 + PointF p1f = mMap.getProjection().glVertexForCoordinate(latlng); + float[] mvpMatrix = mMap.getProjection().glModelMatrix(p1f, 1); + + // Step2 开始绘制设置 + GLES20.glUseProgram(mCubeShader.mProgram); + checkGlError("glUseProgram"); + + GLES20.glEnable(GLES20.GL_DEPTH_TEST); + checkGlError("glEnable"); + + //对齐矩阵 + GLES20.glUniformMatrix4fv(mCubeShader.mMvpMatrix, 1, false, mvpMatrix, 0); + checkGlError("glUniformMatrix4fv"); + + GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0); + // 顶点指针 + GLES20.glEnableVertexAttribArray(mCubeShader.mVertex); + checkGlError("glEnableVertexAttribArray"); + GLES20.glVertexAttribPointer(mCubeShader.mVertex, 3, GLES20.GL_FLOAT, false, 0, mVertexBuffer); + checkGlError("glVertexAttribPointer"); + + // 颜色指针 + GLES20.glEnableVertexAttribArray(mCubeShader.mColor); + checkGlError("glEnableVertexAttribArray"); + GLES20.glVertexAttribPointer(mCubeShader.mColor, 4, GLES20.GL_FLOAT, false, 0, mColorBuffer); + checkGlError("glVertexAttribPointer"); + + GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0); + // 开始画 + GLES20.glDrawElements(GLES20.GL_TRIANGLES, mDrawIndices.length, GLES20.GL_UNSIGNED_SHORT, mIndexBuffer); + checkGlError("glDrawElements"); + + GLES20.glDisableVertexAttribArray(mCubeShader.mVertex); + checkGlError("glDisableVertexAttribArray"); + + GLES20.glDisable(GLES20.GL_DEPTH_TEST); + checkGlError("glDisable"); + } + } + + private static class CubeShader { + int mVertex; + int mMvpMatrix; + int mColor; + int mProgram; + + String vertexShader = "precision mediump float;\n" + + " attribute vec3 mVertex;//顶点数组,三维坐标\n" + + " attribute vec4 mColor;//颜色数组,三维坐标\n" + + " uniform mat4 mMvpMatrix;//mvp矩阵\n" + + " varying vec4 color;//\n" + + " void main(){\n" + + " gl_Position = mMvpMatrix * vec4(mVertex, 1.0);\n" + + " color = mColor;\n" + + " }"; + + String fragmentShader = "//有颜色 没有纹理\n" + + " precision mediump float;\n" + + " varying vec4 color;//\n" + + " void main(){\n" + + " gl_FragColor = color;\n" + + " }"; + + public void init() { + int vertexLocation = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER); + GLES20.glShaderSource(vertexLocation, vertexShader); + checkGlError("glShaderSource"); + GLES20.glCompileShader(vertexLocation); + checkGlError("glCompileShader"); + int fragmentLocation = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER); + GLES20.glShaderSource(fragmentLocation, fragmentShader); + checkGlError("glShaderSource"); + GLES20.glCompileShader(fragmentLocation); + checkGlError("glCompileShader"); + + mProgram = GLES20.glCreateProgram(); + GLES20.glAttachShader(mProgram, vertexLocation); + GLES20.glAttachShader(mProgram, fragmentLocation); + GLES20.glLinkProgram(mProgram); + int[] linked = new int[1]; + GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linked, 0); + checkGlError("glLinkProgram"); + if (linked[0] != GLES20.GL_TRUE) { + Log.e(TAG, "Could not link program: "); + Log.e(TAG, GLES20.glGetProgramInfoLog(mProgram)); + GLES20.glDeleteProgram(mProgram); + mProgram = 0; + } + + + mVertex = GLES20.glGetAttribLocation(mProgram, "mVertex"); + mMvpMatrix = GLES20.glGetUniformLocation(mProgram, "mMvpMatrix"); + mColor = GLES20.glGetAttribLocation(mProgram, "mColor"); + } + + } + + static void checkGlError(String op) { + int error; + while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) { + Log.e(TAG, op + ": glError " + error); + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/GroundOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/GroundOverlayActivity.java new file mode 100644 index 0000000..8f50b24 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/GroundOverlayActivity.java @@ -0,0 +1,129 @@ +package com.tencent.map.vector.demo.marker; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.RadioGroup; + + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlay; +import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlayOptions; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.OverlayLevel; + +import java.util.ArrayList; + +public class GroundOverlayActivity extends SupportMapFragmentActivity { + + private MapView mMapView; + private TencentMap mTencentMap; + private GroundOverlay groundOverlay; + GroundOverlayOptions groundOverlayOptions; + private boolean mIsSelected; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ground_overlay); + mMapView = findViewById(R.id.map_view); + mTencentMap = mMapView.getMap(); + mTencentMap.setIndoorEnabled(true); + } + + + @Override + protected void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.marker_groundoverlay, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add_groundoverlay).setVisible(!mIsSelected); + menu.findItem(R.id.menu_remove_groundoverlay).setVisible(mIsSelected); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_add_groundoverlay: + addGroundOverlays(); + break; + case R.id.menu_remove_groundoverlay: + removeGroundOverlays(); + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + public void addGroundOverlays() { + mIsSelected = true; + LatLngBounds lb = new LatLngBounds( + new LatLng(40.045226, 116.280069), + new LatLng(40.038918, 116.271873)); + groundOverlayOptions = new GroundOverlayOptions() + .bitmap(BitmapDescriptorFactory + .fromAsset("groundoverlay.jpg")) + .latLngBounds(lb) + .alpha(10); + groundOverlay = mTencentMap.addGroundOverlay(groundOverlayOptions); + mTencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(lb, 300)); + + } + + public void removeGroundOverlays() { + mIsSelected = false; + if (groundOverlay != null) { + groundOverlay.remove(); + groundOverlay = null; + } + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerActivity.java new file mode 100644 index 0000000..5e6338e --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerActivity.java @@ -0,0 +1,74 @@ +package com.tencent.map.vector.demo.marker; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.os.Bundle; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class MarkerActivity extends SupportMapFragmentActivity { + public Marker marker; + public Switch aSwitch; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + aSwitch = findViewById(R.id.switch_map); + aSwitch.setVisibility(View.VISIBLE); + aSwitch.setText("添加标注"); + setMarker(); + aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if(isChecked){ + setMarker(); + }else { + if(marker!=null){ + marker.remove(); + } + } + } + }); + + } + + /** + * 设置标注 + */ + private void setMarker(){ + LatLng latLng = new LatLng(39.984108,116.307557); + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor); + + //设置infowindow + options.title("地址"); + options.snippet("中国技术交易大厦"); + marker = tencentMap.addMarker(options); + marker.setInfoWindowEnable(true); + } + + + private Bitmap getBitMap(int resourceId){ + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 100; + int newHeight = 100; + float widthScale = ((float)newWidth)/width; + float heightScale = ((float)newHeight)/height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true); + return bitmap; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerAnimation.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerAnimation.java new file mode 100644 index 0000000..22fe233 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerAnimation.java @@ -0,0 +1,235 @@ +package com.tencent.map.vector.demo.marker; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.graphics.Point; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Interpolator; + +import androidx.annotation.Nullable; + +import com.tencent.map.vector.demo.AbsMapActivity; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.AnimationListener; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.IAlphaAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.IAnimationSet; +import com.tencent.tencentmap.mapsdk.maps.model.IRotateAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.IScaleAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.ITranslateAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +public class MarkerAnimation extends AbsMapActivity { + + private int rotate = 0; + private int scale = 1; + private int alpha = 2; + private int translate = 3; + private int set = 4; + private boolean mHasAdded; + private Marker marker; + private IRotateAnimation rotateAnimation; + private IScaleAnimation scaleAnimation; + private IAlphaAnimation alphaAnimation; + private ITranslateAnimation translateAnimation; + private TencentMap tencentMap; + private IAnimationSet animationSet; + private LatLng latLng; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) { + super.onCreate(savedInstanceState, mTencentMap); + tencentMap = mTencentMap; + tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15)); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.marker_animation, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded); + menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_add_marker_rotate: + tencentMap.clear(); + marker = tencentMap.addMarker(setMarkerAnimation(rotate)); + mHasAdded = true; + marker.setAnimation(rotateAnimation); + marker.startAnimation(); + break; + + case R.id.menu_add_marker_scale: + tencentMap.clear(); + marker = tencentMap.addMarker(setMarkerAnimation(scale)); + mHasAdded = true; + marker.setAnimation(scaleAnimation); + marker.startAnimation(); + scaleAnimation.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationStart() { + + } + + @Override + public void onAnimationEnd() { + marker.startAnimation(); + } + }); + + + break; + case R.id.menu_add_marker_alpha: + tencentMap.clear(); + marker = tencentMap.addMarker(setMarkerAnimation(alpha)); + mHasAdded = true; + marker.setAnimation(alphaAnimation); + marker.startAnimation(); + break; + case R.id.menu_add_marker_translate: + tencentMap.clear(); + marker = tencentMap.addMarker(setMarkerAnimation(translate)); + mHasAdded = true; + Point screenLocation = tencentMap.getProjection().toScreenLocation(latLng); + + marker.setFixingPoint(screenLocation.x, screenLocation.y); + + marker.setAnimation(translateAnimation); + marker.startAnimation(); + + translateAnimation.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationStart() { + + } + + @Override + public void onAnimationEnd() { + marker.setFixingPointEnable(false); + + } + }); + break; + case R.id.menu_add_marker_set: + tencentMap.clear(); + marker = tencentMap.addMarker(setMarkerAnimation(set)); + mHasAdded = true; + marker.setAnimation(animationSet); + marker.startAnimation(); + break; + + case R.id.menu_delete_marker: + if (marker != null) { + marker.remove(); + marker = null; + mHasAdded = false; + } + break; + } + return super.onOptionsItemSelected(item); + } + + private MarkerOptions setMarkerAnimation(int type) { + latLng = new LatLng(39.984108, 116.307557); + BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); + MarkerOptions position = new MarkerOptions().position(latLng).icon(bitmapDescriptor); + switch (type) { + case 0: + //旋转动画 + rotateAnimation = tencentMap.getMapContext().createRotateAnimation(0, 360, 0, 0, 0); + rotateAnimation.setDuration(2000); + break; + case 1: + //缩放动画 + scaleAnimation = tencentMap.getMapContext().createScaleAnimation(0.0f, 1f, 0.0f, 1f); + scaleAnimation.setDuration(2000); + scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); + + case 2: + //渐变 + alphaAnimation = tencentMap.getMapContext().createAlphaAnimation(0f, 1f); + alphaAnimation.setDuration(2000); + alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); + + break; + case 3: + //平移 + Point point = tencentMap.getProjection().toScreenLocation(latLng); + point.y -= dip2px(this, 250); + LatLng target = tencentMap.getProjection().fromScreenLocation(point); + translateAnimation = tencentMap.getMapContext().createTranslateAnimation(target); + translateAnimation.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float v) { + if (v <= 0.5f) { + return (float) (0.5f - 2 * (0.5 - v) * (0.5 - v)); + } else { + return (float) (0.5f - Math.sqrt((v - 0.5f) * (1.5f - v))); + } + } + }); + translateAnimation.setDuration(2000); + break; + case 4: + //组合动画 + animationSet = tencentMap.getMapContext().createAnimationSet(true); + if (rotateAnimation != null || scaleAnimation != null || alphaAnimation != null) { + animationSet.addAnimation(rotateAnimation); + animationSet.addAnimation(scaleAnimation); + animationSet.addAnimation(alphaAnimation); + } + + break; + + default: + throw new IllegalStateException("Unexpected value: " + type); + } + return position; + } + + private static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 1.5f); + } + + private Bitmap getBitMap(int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 100; + int newHeight = 100; + float widthScale = ((float) newWidth) / width; + float heightScale = ((float) newHeight) / height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); + return bitmap; + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClickActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClickActivity.java new file mode 100644 index 0000000..a6ddacf --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClickActivity.java @@ -0,0 +1,25 @@ +package com.tencent.map.vector.demo.marker; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; + +public class MarkerClickActivity extends MarkerActivity implements TencentMap.OnMarkerClickListener{ + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + marker.setInfoWindowEnable(false); + aSwitch.setVisibility(View.GONE); + tencentMap.setOnMarkerClickListener(this); + } + + @Override + public boolean onMarkerClick(Marker marker) { + Toast.makeText(getApplicationContext(),"您点击了标注", Toast.LENGTH_SHORT).show(); + return false; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClusterActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClusterActivity.java new file mode 100644 index 0000000..b2b71f8 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerClusterActivity.java @@ -0,0 +1,387 @@ +package com.tencent.map.vector.demo.marker; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Point; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; + +import com.tencent.map.vector.demo.AbsMapActivity; +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.utils.CoordinateActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.IAlphaAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions; +import com.tencent.tencentmap.mapsdk.maps.model.VisibleRegion; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.Cluster; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterItem; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterManager; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.algo.NonHierarchicalDistanceBasedAlgorithm; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.view.ClusterRenderer; +import com.tencent.tencentmap.mapsdk.vector.utils.clustering.view.DefaultClusterRenderer; +import com.tencent.tencentmap.mapsdk.vector.utils.ui.IconGenerator; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.Timer; +import java.util.TimerTask; + +public class MarkerClusterActivity extends AbsMapActivity { + private TencentMap tencentMap; + private boolean mHasAdded; + //点聚合坐标数据集合 + private List generalItemList = new ArrayList<>(); + private ClusterManager markerClusterItemClusterManager; + private int i = 8; + //自定义聚合 + private ClusterManager petaItemClusterManager; + private ArrayList petaItems; + private ArrayList latLngs; + private NonHierarchicalDistanceBasedAlgorithm ndba; + private DefaultClusterRenderer markerClusterItemDefaultClusterRenderer; + private String TAG="MarkerClusterActivity"; + + @Override + + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) { + super.onCreate(savedInstanceState, mTencentMap); + tencentMap = mTencentMap; + //tencentMap.enableMultipleInfowindow(true); + tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15)); + //默认聚合管理 + configDefaultCluterManger(); + configCustomCluterManger(); + petaItemClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() { + @Override + public boolean onClusterClick(Cluster cluster) { + Collection items = cluster.getItems(); + + return false; + } + }); + tencentMap.setOnCameraChangeListener(new TencentMap.OnCameraChangeListener() { + @Override + public void onCameraChange(CameraPosition cameraPosition) { + + } + + @Override + public void onCameraChangeFinished(CameraPosition cameraPosition) { + float zoom = cameraPosition.zoom; + if (zoom < 6) { + tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager); + markerClusterItemClusterManager.addItems(getMassiveCoords()); + // tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(latLngs).build(), 20)); + markerClusterItemClusterManager.cluster(); + + } else { + markerClusterItemClusterManager.cancel(); + } + Log.d(TAG, "onCameraChangeFinished: " + zoom); + } + }); + } + + public class PetaItem implements ClusterItem { + private final LatLng mLatLng; + private int mDrawableResourceId; + + public PetaItem(double lat, double lon, int resourceId) { + mLatLng = new LatLng(lat, lon); + mDrawableResourceId = resourceId; + } + + @Override + public LatLng getPosition() { + return mLatLng; + } + + public int getDrawableResourceId() { + return mDrawableResourceId; + } + } + + //聚合设置 + private void configDefaultCluterManger() { + //实例化点聚合管理者 + markerClusterItemClusterManager = new ClusterManager<>(this, tencentMap); + //默认聚合策略,调用时不用添加,如果需要其它聚合策略可以按以下修改 + ndba = new NonHierarchicalDistanceBasedAlgorithm<>(this); + //设置点聚合距离 + ndba.setMaxDistanceAtZoom(35); + //设置策略 + markerClusterItemClusterManager.setAlgorithm(ndba); + //设置聚合渲染器,按照需要设置 + markerClusterItemDefaultClusterRenderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterItemClusterManager); + //设置最小聚合数量,默认是4 + markerClusterItemDefaultClusterRenderer.setMinClusterSize(5); + //定义聚合的分段,例如:当超过5个不满足10个数据,显示5+ + markerClusterItemDefaultClusterRenderer.setBuckets(new int[]{5, 10, 20, 50}); + markerClusterItemClusterManager.setRenderer(markerClusterItemDefaultClusterRenderer); + + + } + + //自定义聚合样式设置 + private void configCustomCluterManger() { + petaItemClusterManager = new ClusterManager<>(this, tencentMap); + CustomIconClusterRenderer customIconClusterRender = new CustomIconClusterRenderer(this, tencentMap, petaItemClusterManager); + customIconClusterRender.setMinClusterSize(3); + petaItemClusterManager.setRenderer(customIconClusterRender); + + } + + + //普通聚合 + private Collection getGeneralCoords() { + if (generalItemList == null || generalItemList.size() == 0) { + generalItemList = getItemWithFileName("cluster_new"); + } + return generalItemList; + } + + //海量聚合 + private Collection getMassiveCoords() { + if (generalItemList == null || generalItemList.size() == 0) { + generalItemList = getItemWithFileName("datab"); + } + return generalItemList; + } + + private List getItemWithFileName(String cluster_new) { + ArrayList arrayList = new ArrayList<>(); + latLngs = new ArrayList<>(); + try { + InputStream inputStream = getAssets().open(cluster_new); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + String line; + while ((line = bufferedReader.readLine()) != null) { + String[] data = line.split("\t"); + double longitue = Double.parseDouble(data[0]); + double latitue = Double.parseDouble(data[1]); + arrayList.add(new MarkerClusterItem(latitue, longitue)); + latLngs.add(new LatLng(latitue, longitue)); + } + inputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + return arrayList; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.marker_cluster, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded); + menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + tencentMap.setInfoWindowAdapter(new TencentMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + LinearLayout inflate = (LinearLayout) View.inflate(getApplicationContext(), R.layout.custom_infowindow, null); + TextView title = inflate.findViewById(R.id.tv_title); + Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition()); + title.setText("\t\t\t\t\t\t\t\t自定义View弹窗:\n点在屏幕位置:" + point); + return inflate; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + final IAlphaAnimation alphaAnimation_custom = tencentMap.getMapContext().createAlphaAnimation(0f, 1f); + alphaAnimation_custom.setDuration(1000); + alphaAnimation_custom.setInterpolator(new AccelerateDecelerateInterpolator()); + tencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition()); + marker.setTitle(point.toString()); + marker.setAnimation(alphaAnimation_custom); + marker.startAnimation(); + return false; + } + }); + switch (item.getItemId()) { + case R.id.menu_add_marker_general: + mHasAdded = true; + //markerClusterItemClusterManager.cancel(); + tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager); + markerClusterItemClusterManager.addItems(getGeneralCoords()); + LatLng position = generalItemList.get(6).getPosition(); + CameraUpdate cameraUpdate; + if (i < 16) { + i++; + cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i); + } else { + i = 6; + cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i); + } + tencentMap.animateCamera(cameraUpdate); + markerClusterItemClusterManager.cluster(); + + break; + case R.id.menu_add_marker_massive: + mHasAdded = true; + tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager); + markerClusterItemClusterManager.addItems(getMassiveCoords()); + + LatLng position_massive = generalItemList.get(60).getPosition(); + CameraUpdate cameraUpdate_massive; + if (i < 16) { + i++; + cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i); + } else { + i = 6; + cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i); + } + tencentMap.animateCamera(cameraUpdate_massive); + markerClusterItemClusterManager.cluster(); + break; + case R.id.menu_add_marker_custom: + mHasAdded = true; + tencentMap.setOnCameraChangeListener(petaItemClusterManager); + addCustomClusterItem(); + tencentMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.971595, 116.314316), 15)); + petaItemClusterManager.cluster(); + break; + case R.id.menu_delete_marker: + mHasAdded = false; + clusterReMove(); + break; + + } + return super.onOptionsItemSelected(item); + } + + private void addCustomClusterItem() { + + petaItemClusterManager.addItem(new PetaItem(39.971595, 116.294747, R.mipmap.petal_blue)); + + petaItemClusterManager.addItem(new PetaItem(39.971595, 116.314316, R.mipmap.petal_red)); + + petaItemClusterManager.addItem(new PetaItem(39.967385, 116.317063, R.mipmap.petal_green)); + + petaItemClusterManager.addItem(new PetaItem(39.951596, 116.302300, R.mipmap.petal_yellow)); + + petaItemClusterManager.addItem(new PetaItem(39.970543, 116.290627, R.mipmap.petal_orange)); + + petaItemClusterManager.addItem(new PetaItem(39.966333, 116.311569, R.mipmap.petal_purple)); + } + + //移除聚合数据 + private void clusterReMove() { + markerClusterItemClusterManager.cancel(); + markerClusterItemClusterManager.cluster(); + generalItemList.clear(); + petaItemClusterManager.cancel(); + petaItemClusterManager.cluster(); + tencentMap.clearAllOverlays(); + + } + + class CustomIconClusterRenderer extends DefaultClusterRenderer { + + private IconGenerator mIconGenerator = new IconGenerator(getApplicationContext()); + private IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext()); + private ImageView mItemImageView = new ImageView(getApplicationContext()); + private ImageView mClusterImageView = new ImageView(getApplicationContext()); + + public CustomIconClusterRenderer( + Context context, TencentMap map, ClusterManager clusterManager) { + super(context, map, clusterManager); + mItemImageView.setLayoutParams( + new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + mIconGenerator.setContentView(mItemImageView); + + mClusterImageView.setLayoutParams( + new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + mClusterIconGenerator.setContentView(mClusterImageView); + + setMinClusterSize(1); + } + + @Override + public void onBeforeClusterRendered( + Cluster cluster, MarkerOptions markerOptions) { + int[] resources = new int[cluster.getItems().size()]; + int i = 0; + for (PetaItem item : cluster.getItems()) { + resources[i++] = item.getDrawableResourceId(); + } + + PetalDrawable drawable = new PetalDrawable(getApplicationContext(), resources); + mClusterImageView.setImageDrawable(drawable); + Bitmap icon = mClusterIconGenerator.makeIcon(); + markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); + } + + @Override + public void onBeforeClusterItemRendered(PetaItem item, MarkerOptions markerOptions) { + mItemImageView.setImageResource(item.getDrawableResourceId()); + Bitmap icon = mIconGenerator.makeIcon(); + markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); + } + } + + class MarkerClusterItem implements ClusterItem { + private final LatLng mLatLng; + + public MarkerClusterItem(double lat, double lon) { + mLatLng = new LatLng(lat, lon); + } + + @Override + public LatLng getPosition() { + return mLatLng; + } + } +} + + diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerCollisions.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerCollisions.java new file mode 100644 index 0000000..3a272c7 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerCollisions.java @@ -0,0 +1,116 @@ +package com.tencent.map.vector.demo.marker; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MapPoi; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class MarkerCollisions extends AppCompatActivity { + + private MapView mapView; + private TencentMap tencentMap; + private boolean mMarkerAdded; + private Marker mMarker; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_marker_collisions); + intit(); + } + + private void intit() { + mapView = findViewById(R.id.mapView); + tencentMap = mapView.getMap(); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.984066, 116.307548), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.markercol, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded); + menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_collisionsmap: + mMarkerAdded = true; + BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker); + MarkerOptions options = new MarkerOptions().position(new LatLng(39.984066, 116.307548)); + options.icon(custom); + mMarker = tencentMap.addMarker(options); + mMarker.setCollisions(MarkerCollisionItem.POI); + break; + case R.id.menu_close_collisionsmap: + mMarkerAdded = false; + mMarker.remove(); + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerDragActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerDragActivity.java new file mode 100644 index 0000000..d45c5ef --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerDragActivity.java @@ -0,0 +1,45 @@ +package com.tencent.map.vector.demo.marker; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; + +public class MarkerDragActivity extends MarkerActivity implements TencentMap.OnMarkerDragListener{ + private TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + marker.setInfoWindowEnable(false); + aSwitch.setVisibility(View.GONE); + + textView = findViewById(R.id.tv_info); + textView.setText("长按标记开始拖动"); + textView.setVisibility(View.VISIBLE); + + marker.setDraggable(true); + tencentMap.setOnMarkerDragListener(this); + } + + @Override + public void onMarkerDragStart(Marker marker) { + Log.e("marker:","drag"); + Toast.makeText(this, "拖拽开始", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onMarkerDrag(Marker marker) { + + } + + @Override + public void onMarkerDragEnd(Marker marker) { + Toast.makeText(this, "拖拽结束", Toast.LENGTH_SHORT).show(); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerInfoWindowActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerInfoWindowActivity.java new file mode 100644 index 0000000..efc419e --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerInfoWindowActivity.java @@ -0,0 +1,254 @@ +package com.tencent.map.vector.demo.marker; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.Nullable; + +import com.tencent.map.vector.demo.AbsMapActivity; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class MarkerInfoWindowActivity extends AbsMapActivity { + + + private static final int TYPE_BITMAP = 0; + private static final int TYPE_VIEW = 1; + + private static final int STYLE_NO_FRAME = 1; + private static final int STYLE_FRAME = 2; + + private Marker mMarker; + private Marker mAnotherMarker; + private TencentMap mTencentMap; + private int mInfoWindowAdapterStyle; + private int mInfoWindowType = TYPE_BITMAP; + private LinearLayout mCustomInfoWindowView; + + /** + * 自定义信息窗 + */ + private TencentMap.InfoWindowAdapter mInfoWindowAdapter = new TencentMap.InfoWindowAdapter() { + + TextView tvTitle; + + //返回View为信息窗自定义样式,返回null时为默认信息窗样式 + @Override + public View getInfoWindow(final Marker marker) { + if (mInfoWindowAdapterStyle == 1 && marker.equals(mMarker)) { + return createCustomInfoView(marker); + } + return null; + } + + //返回View为信息窗内容自定义样式,返回null时为默认信息窗样式 + @Override + public View getInfoContents(Marker marker) { + if (mInfoWindowAdapterStyle == 2 && marker.equals(mMarker)) { + return createCustomInfoView(marker); + } + return null; + } + + private View createCustomInfoView(Marker marker) { + mCustomInfoWindowView = (LinearLayout) View.inflate( + getApplicationContext(), R.layout.custom_infowindow, null); + tvTitle = mCustomInfoWindowView.findViewById(R.id.tv_title); + //设置自定义信息窗的内容 + tvTitle.setText("我是自定义信息窗口:"); + tvTitle.append("\n" + marker.getTitle()); + tvTitle.append("\n" + marker.getSnippet()); + return mCustomInfoWindowView; + } + }; + private boolean mMultEnable; + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) { + super.onCreate(savedInstanceState, pTencentMap); + mTencentMap = pTencentMap; + mMarker = createMarker(); + pTencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + invalidateOptionsMenu(); + return false; + } + }); + pTencentMap.setOnInfoWindowClickListener(new TencentMap.OnInfoWindowClickListener() { + @Override + public void onInfoWindowClick(Marker marker) { + Toast.makeText(getApplicationContext(), "信息窗被点击", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onInfoWindowClickLocation(int i, int i1, int i2, int i3) { + Toast.makeText(getApplicationContext(), + "尺寸:" + i + "x" + i1 + " 位置:" + i2 + "," + i3, Toast.LENGTH_SHORT).show(); + } + }); + } + + private Marker createMarker() { + if (mTencentMap == null) { + return null; + } + if (mMarker != null) { + mMarker.remove(); + mMarker = null; + } + LatLng position = new LatLng(39.908710, 116.397499); + MarkerOptions options = new MarkerOptions(position); + options.infoWindowEnable(true);//默认为true + options.title("天安门")//标注的InfoWindow的标题 + .snippet("地址: 北京市东城区东长安街")//标注的InfoWindow的内容 + .anchor(0.5f, 1) + .viewInfoWindow(mInfoWindowType == TYPE_VIEW) + .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标 + mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15)); + return mTencentMap.addMarker(options); + } + + private Marker createMultMarker() { + if (mTencentMap == null) { + return null; + } + if (mAnotherMarker != null) { + mAnotherMarker.remove(); + mAnotherMarker = null; + } + LatLng position = new LatLng(39.902500,116.397750); + MarkerOptions options = new MarkerOptions(position); + options.infoWindowEnable(true);//默认为true + options.title("毛主席纪念堂")//标注的InfoWindow的标题 + .snippet("地址: 北京市东城区前门东大街11号")//标注的InfoWindow的内容 + .anchor(0.5f, 1) + .viewInfoWindow(mInfoWindowType == TYPE_VIEW) + .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标 + return mTencentMap.addMarker(options); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.infowindow, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + String typeName = null; + if (mInfoWindowType == TYPE_VIEW) { + typeName = "View类型"; + } else if (mInfoWindowType == TYPE_BITMAP) { + typeName = "Bitmap类型"; + } + if (typeName != null) { + menu.findItem(R.id.menu_type).setTitle(typeName) + .setVisible(!mMarker.isInfoWindowShown()); + } + menu.findItem(R.id.menu_mult).setTitle(mMultEnable ? "开启多窗口" : "关闭多窗口") + .setVisible(!mMarker.isInfoWindowShown()); + menu.findItem(R.id.menu_add).setVisible(!mMarker.isInfoWindowShown()); + menu.findItem(R.id.menu_play).setVisible(mMarker.isInfoWindowShown()); + menu.findItem(R.id.menu_delete).setVisible(mMarker.isInfoWindowShown()); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_mult_enable: + mMultEnable = true; + initMarkers(); + hideInfoWindow(); + break; + case R.id.menu_mult_close: + mMultEnable = false; + if (mAnotherMarker != null) { + mAnotherMarker.remove(); + mAnotherMarker = null; + } + + hideInfoWindow(); + break; + case R.id.menu_type_bitmap: + mInfoWindowType = TYPE_BITMAP; + initMarkers(); + hideInfoWindow(); + break; + case R.id.menu_type_view: + mInfoWindowType = TYPE_VIEW; + initMarkers(); + hideInfoWindow(); + break; + case R.id.menu_add_infowindow_default: + showInfoWindow(); + break; + case R.id.menu_add_infowindow_custom_1: + mInfoWindowAdapterStyle = STYLE_NO_FRAME; + mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter); + showInfoWindow(); + break; + case R.id.menu_add_infowindow_custom_2: + mInfoWindowAdapterStyle = STYLE_FRAME; + mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter); + showInfoWindow(); + break; + case R.id.menu_play: + animationPlay(); + break; + case R.id.menu_delete: + hideInfoWindow(); + break; + } + + mTencentMap.enableMultipleInfowindow(mMultEnable); + return super.onOptionsItemSelected(item); + } + + private void initMarkers() { + mMarker = createMarker(); + if (mMultEnable) { + mAnotherMarker = createMultMarker(); + } + } + + private void showInfoWindow() { + if (mMarker != null) { + mMarker.showInfoWindow(); + } + + if (mAnotherMarker != null && mMultEnable) { + mAnotherMarker.showInfoWindow(); + } + } + + private void hideInfoWindow() { + if (mMarker != null) { + mMarker.hideInfoWindow(); + } + + if (mAnotherMarker != null && mMultEnable) { + mAnotherMarker.hideInfoWindow(); + } + mTencentMap.setInfoWindowAdapter(null); + } + + private void animationPlay() { + + if (mInfoWindowType == TYPE_VIEW) { + //TODO :动画 + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerOptionsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerOptionsActivity.java new file mode 100644 index 0000000..b4a17c7 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/MarkerOptionsActivity.java @@ -0,0 +1,54 @@ +package com.tencent.map.vector.demo.marker; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.os.Bundle; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class MarkerOptionsActivity extends SupportMapFragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + options.fastLoad(true); //设置是否快速加载 + options.icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker))); //加载图标 + options.tag(tencentMap.addCircle(new CircleOptions().center(new LatLng(39.984059, 116.305756)))); //设置标签对象 + tencentMap.addMarker(options); + } + + private LatLng latLng = new LatLng(39.984864, 116.305756); + + private Bitmap getBitMap(int resourceId){ + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 100; + int newHeight = 100; + float widthScale = ((float)newWidth)/width; + float heightScale = ((float)newHeight)/height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true); + return bitmap; + } + + + private MarkerOptions options = new MarkerOptions(latLng). //坐标设置 + anchor(0.5f, 0.5f). //标注的锚点 + clockwise(true). //旋转角度顺时针 + draggable(true). //标注可被拖动 + flat(true). //设置3D标注 + infoWindowEnable(true). //弹出infowindow + infoWindowAnchor(0.5f, 0.5f). //标注信息infowindow锚点 + rotation(90f). //旋转角度 + snippet("气泡infowindow内容"). //设置infowindow内容 + title("标题内容"). //infowindow标题内容 + visible(true). //标注是否可见 + zIndex(0); //堆叠顺序,越大优先级越高 +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/PetalDrawable.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/PetalDrawable.java new file mode 100644 index 0000000..ad6a67e --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/PetalDrawable.java @@ -0,0 +1,94 @@ +package com.tencent.map.vector.demo.marker; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.PixelFormat; +import android.graphics.drawable.Drawable; + +import cc.winboll.studio.positions.R; + + +public class PetalDrawable extends Drawable { + + private Context mContext; + private int[] mDrawableIds; + private int imageHeight; + private int imageWidth; + private float scalRate; + + public PetalDrawable(Context context, int[] drawableIds) { + mContext = context.getApplicationContext(); + mDrawableIds = drawableIds; + Bitmap b = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.petal_red); + imageHeight = b.getHeight(); + imageWidth = b.getWidth(); + scalRate = (float) drawableIds.length / 10; + scalRate = scalRate < 0.8f ? 0.8f : scalRate; + imageHeight *= scalRate; + imageWidth *= scalRate; + if (mDrawableIds.length < 3) { + //两张图片,分别向两边倾斜60度 + int width = (int) ((imageHeight * 1 / 2 + imageWidth * 1.732 / 2) * 2); + int height = (int) (Math.sin(Math.PI / 3 + Math.atan(imageWidth / imageHeight)) * + Math.pow(imageWidth * imageWidth + imageHeight * imageHeight, 0.5)); + setBounds(0, 0, width, height); + } else { + setBounds(0, 0, imageHeight * 2, imageHeight * 2); + } + } + + @Override + public void draw(Canvas canvas) { + float stepAngle = 360 / mDrawableIds.length; + Matrix matrix = new Matrix(); + matrix.postScale(scalRate, scalRate); + if (mDrawableIds.length < 3 && mDrawableIds.length > 1) { + Bitmap b1 = BitmapFactory.decodeResource(mContext.getResources(), mDrawableIds[0]); + matrix.postRotate(-90, imageWidth, 0); + matrix.postTranslate(-imageWidth / 4, 0); + canvas.drawBitmap(b1, matrix, null); + Bitmap b2 = BitmapFactory.decodeResource(mContext.getResources(), mDrawableIds[1]); + matrix.reset(); + matrix.postScale(scalRate, scalRate); + matrix.postRotate(90, imageWidth, imageHeight); + matrix.postTranslate(imageWidth * 3 / 4, imageWidth / 4); + canvas.drawBitmap(b2, matrix, null); + return; + } + matrix.postTranslate(imageHeight / 2, 0); + for (int i = 0; i < mDrawableIds.length; i++) { + Bitmap b = BitmapFactory.decodeResource(mContext.getResources(), mDrawableIds[i]); + matrix.postRotate(stepAngle, imageWidth / 2 + imageHeight / 2, imageHeight); + canvas.drawBitmap(b, matrix, null); + } + } + + @Override + public int getIntrinsicWidth() { + return getBounds().width(); + } + + @Override + public int getIntrinsicHeight() { + return getBounds().height(); + } + + @Override + public void setAlpha(int i) { + + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + + } + + @Override + public int getOpacity() { + return PixelFormat.UNKNOWN; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/marker/SimpleMarkerActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/marker/SimpleMarkerActivity.java new file mode 100644 index 0000000..aa0a96b --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/marker/SimpleMarkerActivity.java @@ -0,0 +1,107 @@ +package com.tencent.map.vector.demo.marker; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import androidx.annotation.Nullable; + +import com.tencent.map.vector.demo.AbsMapActivity; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.AlphaAnimation; +import com.tencent.tencentmap.mapsdk.maps.model.Animation; +import com.tencent.tencentmap.mapsdk.maps.model.AnimationListener; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class SimpleMarkerActivity extends AbsMapActivity { + + private TencentMap mTencentMap; + private Marker mSimpleMarker; + private Marker mCustomMarker; + + private boolean mMarkerAdded; + @Override + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) { + super.onCreate(savedInstanceState, pTencentMap); + mTencentMap = pTencentMap; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.simple_marker, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add).setVisible(!mMarkerAdded); + menu.findItem(R.id.menu_delete).setVisible(mMarkerAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_add_marker_simple: + if (mSimpleMarker == null) { + LatLng position = new LatLng(40.011313,116.391907); + mSimpleMarker = mTencentMap.addMarker(new MarkerOptions(position)); + mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position)); + mMarkerAdded = true; + } + break; + case R.id.menu_add_marker_custom: + + if (mCustomMarker == null) { + LatLng position = new LatLng(40.011313,116.391907); + BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker); + mCustomMarker = mTencentMap.addMarker(new MarkerOptions(position) + .icon(custom) + .alpha(0.7f) + .flat(true) + .clockwise(false) + .rotation(30) + ); + + Animation animation = new AlphaAnimation(0.7f, 0f); + animation.setDuration(2000); + animation.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationStart() { + + } + + @Override + public void onAnimationEnd() { + mCustomMarker.setAlpha(1); + } + }); + mCustomMarker.setAnimation(animation); + mCustomMarker.startAnimation(); + mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position)); + mMarkerAdded = true; + } + break; + case R.id.menu_delete: + if (mSimpleMarker != null) { + mSimpleMarker.remove(); + mSimpleMarker = null; + } + + if (mCustomMarker != null) { + mCustomMarker.remove(); + mCustomMarker = null; + } + + mMarkerAdded = false; + break; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/poi/PoiClickActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/poi/PoiClickActivity.java new file mode 100644 index 0000000..b73ac77 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/poi/PoiClickActivity.java @@ -0,0 +1,59 @@ +package com.tencent.map.vector.demo.poi; + +import android.os.Bundle; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MapPoi; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class PoiClickActivity extends SupportMapFragmentActivity implements TencentMap.OnMapPoiClickListener { + private Switch poiSwitch; + private Marker marker; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + poiSwitch = findViewById(R.id.switch_poi); + poiSwitch.setVisibility(View.VISIBLE); + poiSwitch.setText("Poi显示"); + tencentMap.setOnMapPoiClickListener(this); + poiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b){ + tencentMap.setPoisEnabled(true); + }else{ + tencentMap.setPoisEnabled(false); + if (marker != null) + marker.remove(); + } + } + }); + } + + @Override + public void onClicked(MapPoi mapPoi) { + setMarker(mapPoi.getPosition(), mapPoi.getName()); + } + + /** + * 设置标注 + */ + private void setMarker(LatLng latLng, String name){ + + if(marker != null) + marker.remove(); + MarkerOptions options = new MarkerOptions().position(latLng); + //设置infowindow + options.title("地址:"); + options.snippet(name); + marker = tencentMap.addMarker(options); + marker.showInfoWindow(); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polygon/DrawPolygonActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polygon/DrawPolygonActivity.java new file mode 100644 index 0000000..479d2c5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polygon/DrawPolygonActivity.java @@ -0,0 +1,38 @@ +package com.tencent.map.vector.demo.polygon; + +import android.os.Bundle; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Polygon; +import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions; + +public class DrawPolygonActivity extends SupportMapFragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LatLng[] latLngs = { + new LatLng(39.984864, 116.305756), + new LatLng(39.983618, 116.305848), + new LatLng(39.982347, 116.305966), + new LatLng(39.982412, 116.308111), + new LatLng(39.984122, 116.308224), + new LatLng(39.984955, 116.308099), + new LatLng(39.984864, 116.305756) + }; + Polygon polygon = tencentMap.addPolygon(new PolygonOptions(). + add(latLngs). + fillColor(getResources().getColor(R.color.style)). + strokeColor(getResources().getColor(R.color.colorPrimary)). + strokeWidth(1)); + tencentMap.setOnPolygonClickListener(new TencentMap.OnPolygonClickListener() { + @Override + public void onPolygonClick(Polygon polygon, LatLng latLng) { + + } + }); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polygon/PolylonOptionsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polygon/PolylonOptionsActivity.java new file mode 100644 index 0000000..a47ccd4 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polygon/PolylonOptionsActivity.java @@ -0,0 +1,73 @@ +package com.tencent.map.vector.demo.polygon; + +import android.os.Bundle; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.Polygon; +import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions; + +import java.util.ArrayList; +import java.util.List; + +public class PolylonOptionsActivity extends SupportMapFragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Polygon polygon = tencentMap.addPolygon(polygonOptions); + polygon.setPoints(transferArrayToList(latLngs)); //Options中设置顶点 + Polygon newPolygon = tencentMap.addPolygon(newPolygonOptions); + newPolygon.setOptions(newPolygonOptions); //重新设置Options + newPolygon.setClickable(true); //设置可点击 + newPolygon.setFillColor(0xaa324354); + newPolygon.setPoints(transferArrayToList(newLatLngs)); //设置坐标 + newPolygon.setTag(tencentMap.addMarker(new MarkerOptions().position(new LatLng(39.984866, 116.305759)).title("设置标注").draggable(true))); + + + } + + private List transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换 + List list = new ArrayList<>(); + if (latLngs == null) + return list; + for (int i = 0; i < latLngs.length; i++) + list.add(latLngs[i]); + + return list; + + } + private LatLng[] latLngs = { + new LatLng(39.984864, 116.305756), + new LatLng(39.983618, 116.305848), + new LatLng(39.982347, 116.305966), + new LatLng(39.982412, 116.308111), + new LatLng(39.984122, 116.308224), + new LatLng(39.984955, 116.308099), + new LatLng(39.984864, 116.305756) + }; + + private LatLng[] newLatLngs = { + new LatLng(39.984864, 116.305756), + new LatLng(39.983618, 116.305848), + new LatLng(39.982347, 116.305966), + new LatLng(39.982412, 116.308111), + new LatLng(39.984122, 116.308224), + new LatLng(39.984955, 116.308099), + new LatLng(39.984864, 116.305756) + }; + + + private PolygonOptions polygonOptions = new PolygonOptions(). + add(latLngs). // 添加图形坐标点 + fillColor(0x56643313). //填充颜色 + strokeColor(0xfa349012). //描边颜色 + strokeWidth(1). //描边宽度 + visible(true). //是否可见 + zIndex(0). //堆叠顺序,越大优先级越高 + clickable(true); // 是否可点击 + + private PolygonOptions newPolygonOptions = new PolygonOptions(). + addAll(transferArrayToList(newLatLngs)); //设置批量添加顶点 +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polygon/TileOverlayActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polygon/TileOverlayActivity.java new file mode 100644 index 0000000..09544c6 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polygon/TileOverlayActivity.java @@ -0,0 +1,178 @@ +package com.tencent.map.vector.demo.polygon; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.Tile; +import com.tencent.tencentmap.mapsdk.maps.model.TileOverlay; +import com.tencent.tencentmap.mapsdk.maps.model.TileOverlayOptions; +import com.tencent.tencentmap.mapsdk.maps.model.TileProvider; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class TileOverlayActivity extends AppCompatActivity { + private MapView mapView; + private TencentMap tencentMap; + private boolean mMarkerAdded; + private TileOverlay mTileOverlay; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tile_overlay); + initView(); + } + + private void initView() { + mapView = findViewById(R.id.mapView); + tencentMap = mapView.getMap(); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.917505, 116.397657), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.markercol, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded); + menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_open_collisionsmap: + mMarkerAdded = true; + if (mTileOverlay == null) { + mTileOverlay = tencentMap.addTileOverlay( + new TileOverlayOptions(). + tileProvider(new LocalTileProvider())); + } + + break; + case R.id.menu_close_collisionsmap: + mMarkerAdded = false; + if (mTileOverlay != null) { + mTileOverlay.clearTileCache(); + mTileOverlay.remove(); + mTileOverlay = null; + } + break; + } + + supportInvalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + class LocalTileProvider implements TileProvider { + + @Override + public Tile getTile(int x, int y, int zoom) { + LatLng latLng = new LatLng(39.917505, 116.397657); + int iZ = 16; + double n = Math.pow(2, iZ); + int iX = (int) (((latLng.getLongitude() + 180) / 360) * n); + int iY = (int) ((1 - (Math.log(Math.tan(Math.toRadians(latLng.getLatitude())) + + (1 / Math.cos(Math.toRadians(latLng.getLatitude())))) / Math.PI)) / 2 * n); + if (iX == x && iY == y && iZ == zoom) { + Log.e("tile", "zoom:" + zoom + " x:" + x + " y:" + y); + return new Tile(256, 256, tileData()); + } + return TileProvider.NO_TILE; + } + + byte[] tileData() { + InputStream is = null; + ByteArrayOutputStream baos = null; + try { + is = getApplicationContext().getAssets().open("gugong.jpg"); + baos = new ByteArrayOutputStream(); + byte[] byteBuffer = new byte[1024]; + int count = 0; + while ((count = is.read(byteBuffer)) != -1) { + baos.write(byteBuffer, 0, count); + } + return baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (baos != null) { + try { + baos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polyline/DrawLineActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polyline/DrawLineActivity.java new file mode 100644 index 0000000..1783595 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polyline/DrawLineActivity.java @@ -0,0 +1,194 @@ +package com.tencent.map.vector.demo.polyline; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import androidx.annotation.Nullable; + +import com.tencent.map.vector.demo.AbsMapActivity; +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.ArrayList; +import java.util.List; + +public class DrawLineActivity extends AbsMapActivity { + private int typeSimple = 0; + private int typeImage = 1; + private int typeColor = 2; + private int typeArrow = 3; + private int typeGradient = 4; + + private TencentMap mTencentMap; + private boolean mHasAdded; + private boolean mHasEnableText; + private Polyline polyline; + private PolylineOptions.Text mPolylineText; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) { + super.onCreate(savedInstanceState, tencentMap); + mTencentMap = tencentMap; + tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15)); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.polyline, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_add).setVisible(!mHasAdded); + menu.findItem(R.id.menu_text).setTitle(mHasEnableText ? "关闭路名" : "开启路名").setVisible(mHasAdded); + menu.findItem(R.id.menu_delete).setVisible(mHasAdded); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_add_line_simple: + mTencentMap.clear(); + polyline = mTencentMap.addPolyline(setLineStyle(typeSimple)); + mHasAdded = true; + break; + + case R.id.menu_add_line_dash: + mTencentMap.clear(); + polyline = mTencentMap.addPolyline(setLineStyle(typeImage)); + mHasAdded = true; + break; + case R.id.menu_add_line_segment: + mTencentMap.clear(); + polyline = mTencentMap.addPolyline(setLineStyle(typeColor)); + int[] color = {0, 1, 2, 3, 4}; + int[] index = {0, 1, 2, 3, 4, 5}; + polyline.setColors(color, index); + mHasAdded = true; + break; + case R.id.menu_add_line_texture: + mTencentMap.clear(); + polyline = mTencentMap.addPolyline(setLineStyle((typeArrow))); + mHasAdded = true; + break; + case R.id.menu_add_line_gradient: + mTencentMap.clear(); + polyline = mTencentMap.addPolyline(setLineStyle((typeGradient))); + int[] indexes = {0, 1, 2, 3, 4}; +// 设置每段索引之间的颜色,这个颜色同样支持纹理颜色,即 PolylineOptions.Colors 中定义的 [0, 10] 值 + int[] colors = { + 0xff00ff00, // 线上点 [0, 1] 之间为绿色 + 0xffffff00, // 线上点 [1, 2] 之间为黄色 + 0xffff0000, // 线上点 [2, 3] 之间为红色 + 0xff131313, // 线上点 [3, 4] 之间为黄色 + 0xff1033f6 // 线上点 [4, 最后一个点] 之间为绿色 + }; + polyline.setColors(colors, indexes); + mHasAdded = true; + break; + case R.id.menu_text: + mHasEnableText = !mHasEnableText; + if (mHasEnableText) { + if (mPolylineText == null) { + mPolylineText = generateText(); + //设置显示优先级,可选项有HIGH或NORMAL + mPolylineText.setPriority(PolylineOptions.TextPriority.HIGH); + //设置字体大小 + mPolylineText.setTextSize(10); + //设置填充颜色 + mPolylineText.setStrokeColor(Color.WHITE); + //设置文字颜色 + mPolylineText.setTextColor(Color.BLACK); + } + + polyline.setText(mPolylineText); + } else { + polyline.setText(null); + } + + break; + + case R.id.menu_delete: + if (polyline != null) { + polyline.remove(); + polyline = null; + mHasAdded = false; + mHasEnableText = false; + + } + break; + } + return super.onOptionsItemSelected(item); + } + + private PolylineOptions setLineStyle(int type) { + PolylineOptions polylineOptions = new PolylineOptions().addAll(getLatlons()).lineCap(true); + switch (type) { + case 0: + //设置折线颜色、宽度 + polylineOptions + .color(0xff00ff00) + .width(5f); + break; + case 1: + List list = new ArrayList<>(); + list.add(35); + list.add(20); + polylineOptions + .lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE) + .width(10) + .pattern(list); + break; + case 2: + //线路颜色值纹理图片里的颜色索引 + polylineOptions + .colorType(PolylineOptions.ColorType.LINE_COLOR_TEXTURE) + .color(PolylineOptions.Colors.GREEN) + .colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png")); + break; + case 3: + polylineOptions + .arrow(true) + .arrowSpacing(30) + .arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png")); + break; + case 4: + polylineOptions + .gradient(true) + .lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE) + .width(20); + break; + + } + return polylineOptions; + } + + private PolylineOptions.Text generateText() { + List segmentTexts = new ArrayList<>(); + //参数分别表示坐标路径数组起点index,终点index,动态路名文字 + segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街")); + segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路")); + segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路")); + return new PolylineOptions.Text.Builder(segmentTexts).build(); + } + + private List getLatlons() { + List latLngs = new ArrayList(); + latLngs.add(new LatLng(39.984864, 116.305756)); + latLngs.add(new LatLng(39.983618, 116.305848)); + latLngs.add(new LatLng(39.982347, 116.305966)); + latLngs.add(new LatLng(39.982412, 116.308111)); + latLngs.add(new LatLng(39.984122, 116.308224)); + latLngs.add(new LatLng(39.984955, 116.308099)); + return latLngs; + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polyline/LineTextActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polyline/LineTextActivity.java new file mode 100644 index 0000000..1fda4de --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polyline/LineTextActivity.java @@ -0,0 +1,132 @@ +package com.tencent.map.vector.demo.polyline; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.Switch; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.ArrayList; +import java.util.List; + +public class LineTextActivity extends SupportMapFragmentActivity { + private Polyline polyline; + private static List mPoints = new ArrayList<>(); + private Switch switch_style; + private Switch switch_off; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + tencentMap.moveCamera(CameraUpdateFactory.zoomTo(16)); + switch_style.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + if (polyline == null) { + return; + } + + PolylineOptions.Text text = polyline.getText(); + removeText(); + if (checked) { + //设置显示优先级,可选项有HIGH或NORMAL + text.setPriority(PolylineOptions.TextPriority.HIGH); + //设置字体大小 + text.setTextSize(10); + //设置填充颜色 + text.setStrokeColor(Color.WHITE); + //设置文字颜色 + text.setTextColor(Color.BLACK); + } else { + //设置显示优先级,可选项有HIGH或NORMAL + text.setPriority(PolylineOptions.TextPriority.NORMAL); + //设置字体大小 + text.setTextSize(8); + //设置填充颜色 + text.setStrokeColor(Color.WHITE); + //设置文字颜色 + text.setTextColor(Color.GRAY); + + } + + polyline.setText(text); + } + }); + + switch_off.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + if (checked) { + polyline = createLineWithText(); + } else { + removeText(); + polyline.remove(); + polyline = null; + } + } + }); + } + + + private void initView() { + //文字 + switch_style = (Switch) findViewById(R.id.switch_style); + switch_style.setVisibility(View.VISIBLE); + switch_off = (Switch) findViewById(R.id.switch_off); + switch_off.setVisibility(View.VISIBLE); + } + + public Polyline addLine() { + Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(mPoints).color(0x22ff0000)); + + return polyline; + } + + + //生成坐标点路径 + private List generateLatLngs() { + if (mPoints.size() != 0) + mPoints = new ArrayList<>(); + //苏州街 + mPoints.add(new LatLng(39.982382, 116.305883)); + //北四环西路辅路 + mPoints.add(new LatLng(39.984914, 116.305690)); + //彩和坊路 + mPoints.add(new LatLng(39.985045, 116.308136)); + mPoints.add(new LatLng(39.983570, 116.308088)); + mPoints.add(new LatLng(39.980063, 116.308297)); + return mPoints; + } + + private PolylineOptions.Text generateText() { + List segmentTexts = new ArrayList<>(); + //参数分别表示坐标路径数组起点index,终点index,动态路名文字 + segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街")); + segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路")); + segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路")); + + return new PolylineOptions.Text.Builder(segmentTexts).build(); + } + + + private Polyline createLineWithText() { + Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(generateLatLngs()).text(generateText())); + PolylineOptions.Text text = polyline.getText(); + return polyline; + } + + + private void removeText() { + polyline.setText(null); + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polyline/MutablePolylineActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polyline/MutablePolylineActivity.java new file mode 100644 index 0000000..678ce1d --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polyline/MutablePolylineActivity.java @@ -0,0 +1,291 @@ +package com.tencent.map.vector.demo.polyline; + +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.view.Menu; +import android.view.MenuItem; +import android.view.SubMenu; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.NonNull; + +/** + * @version v1.0 + * @since 2020/6/11 + */ +public class MutablePolylineActivity extends SupportMapFragmentActivity { + private boolean mIsAdd; + private Polyline mPolyline; + + private final static Object[][] sData = { + {"更新1"}, + {"更新2"}, + {"重置"}, + {"删除"}, + }; + + private List mAppendPoints = new ArrayList<>(); + private int mAppendIndex; + + private Handler sHandler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + + if (msg.what == 1 && mPolyline != null && mAppendIndex < mAppendPoints.size()) { + mPolyline.appendPoint(mAppendPoints.get(mAppendIndex)); + mAppendIndex++; + + sendEmptyMessageDelayed(1, 300); + } + } + }; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_polyline_items, menu); + + MenuItem actionMenu = menu.findItem(R.id.menu_actions); + SubMenu actionSubMenu = actionMenu.getSubMenu(); + + for (int i = 0; i < sData.length; i++) { + Object[] indoor = sData[i]; + actionSubMenu.add(0, i, 0, String.valueOf(indoor[0])); + } + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_actions).setVisible(mIsAdd); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + + int itemId = item.getItemId(); + + if (mPolyline != null && itemId >= 0 && itemId < sData.length) { + if (itemId == 3) { + mPolyline.remove(); + mIsAdd = false; + mAppendIndex = 0; + invalidateOptionsMenu(); + } else if (itemId == 2) { + mPolyline.setPoints(getPoints(itemId)); + } else { + mPolyline.appendPoints(getPoints(itemId)); + } + return true; + } + + List pattern = new ArrayList<>(); + pattern.add(35); + pattern.add(20); + + PolylineOptions options = new PolylineOptions() + .addAll(getCreatePoints()) + .width(15); + + switch (item.getItemId()) { + case R.id.menu_add: + if (mIsAdd) { + break; + } + mIsAdd = true; + mPolyline = tencentMap.addPolyline(options); + break; + case R.id.menu_add_anim: + if (mIsAdd) { + break; + } + mIsAdd = true; + + mPolyline = tencentMap.addPolyline(options); + + sHandler.sendEmptyMessage(1); + break; + + } + invalidateOptionsMenu(); + return super.onOptionsItemSelected(item); + } + + private static List getCreatePoints() { + List listPoints = new ArrayList<>(); + addLine(listPoints); + return listPoints; + } + + private static List getPoints(int itemId) { + List listPoints = new ArrayList(); + if (itemId == 0) { + addLine1(listPoints); + } else if (itemId == 1) { + addLine2(listPoints); + } else if (itemId == 2) { + addLine(listPoints); + } + + return listPoints; + } + + private static void addLine(List listPoints) { + listPoints.add(new LatLng(39.981787, 116.306649)); + listPoints.add(new LatLng(39.982021, 116.306739)); + listPoints.add(new LatLng(39.982351, 116.306883)); + listPoints.add(new LatLng(39.98233, 116.306047)); + listPoints.add(new LatLng(39.982324, 116.305867)); + listPoints.add(new LatLng(39.981918, 116.305885)); + listPoints.add(new LatLng(39.981298, 116.305921)); + listPoints.add(new LatLng(39.981091, 116.305939)); + listPoints.add(new LatLng(39.980506, 116.305975)); + listPoints.add(new LatLng(39.980148, 116.306002)); + listPoints.add(new LatLng(39.980121, 116.306002)); + listPoints.add(new LatLng(39.979708, 116.306038)); + listPoints.add(new LatLng(39.979205, 116.306074)); + listPoints.add(new LatLng(39.979205, 116.306074)); + listPoints.add(new LatLng(39.978813, 116.306101)); + listPoints.add(new LatLng(39.978015, 116.306182)); + listPoints.add(new LatLng(39.977299, 116.306227)); + listPoints.add(new LatLng(39.976996, 116.306245)); + listPoints.add(new LatLng(39.976913, 116.306245)); + listPoints.add(new LatLng(39.97597, 116.306308)); + listPoints.add(new LatLng(39.97575, 116.306326)); + listPoints.add(new LatLng(39.97564, 116.306335)); + listPoints.add(new LatLng(39.975178, 116.306371)); + listPoints.add(new LatLng(39.975185, 116.306514)); + listPoints.add(new LatLng(39.97564, 116.306272)); + listPoints.add(new LatLng(39.975633, 116.306272)); + listPoints.add(new LatLng(39.975715, 116.307997)); + listPoints.add(new LatLng(39.975819, 116.311545)); + listPoints.add(new LatLng(39.975936, 116.314878)); + listPoints.add(new LatLng(39.975998, 116.317528)); + listPoints.add(new LatLng(39.976025, 116.318785)); + listPoints.add(new LatLng(39.976108, 116.321714)); + listPoints.add(new LatLng(39.976259, 116.326843)); + listPoints.add(new LatLng(39.976328, 116.328622)); + listPoints.add(new LatLng(39.976397, 116.330356)); + listPoints.add(new LatLng(39.9765, 116.333967)); + listPoints.add(new LatLng(39.976459, 116.341019)); + listPoints.add(new LatLng(39.976473, 116.341674)); + listPoints.add(new LatLng(39.976473, 116.341944)); + listPoints.add(new LatLng(39.976473, 116.342546)); + listPoints.add(new LatLng(39.976479, 116.345295)); + listPoints.add(new LatLng(39.976197, 116.353829)); + listPoints.add(new LatLng(39.976459, 116.369926)); + listPoints.add(new LatLng(39.97672, 116.381353)); + } + + private static void addLine2(List listPoints) { + listPoints.add(new LatLng(39.91254, 116.41786)); + listPoints.add(new LatLng(39.911258, 116.417905)); + listPoints.add(new LatLng(39.910459, 116.417923)); + listPoints.add(new LatLng(39.908557, 116.418049)); + listPoints.add(new LatLng(39.908337, 116.418058)); + listPoints.add(new LatLng(39.90824, 116.418067)); + listPoints.add(new LatLng(39.90669, 116.418148)); + listPoints.add(new LatLng(39.904795, 116.418283)); + listPoints.add(new LatLng(39.903416, 116.418265)); + listPoints.add(new LatLng(39.901218, 116.418408)); + listPoints.add(new LatLng(39.900805, 116.418417)); + listPoints.add(new LatLng(39.900805, 116.418426)); + listPoints.add(new LatLng(39.901335, 116.417968)); + listPoints.add(new LatLng(39.901342, 116.417968)); + listPoints.add(new LatLng(39.901342, 116.418004)); + listPoints.add(new LatLng(39.901197, 116.418193)); + listPoints.add(new LatLng(39.901204, 116.418426)); + listPoints.add(new LatLng(39.901218, 116.418552)); + listPoints.add(new LatLng(39.901087, 116.418624)); + listPoints.add(new LatLng(39.901053, 116.41884)); + listPoints.add(new LatLng(39.901004, 116.419028)); + listPoints.add(new LatLng(39.900922, 116.419388)); + listPoints.add(new LatLng(39.900839, 116.419774)); + listPoints.add(new LatLng(39.900749, 116.420043)); + listPoints.add(new LatLng(39.900722, 116.420178)); + listPoints.add(new LatLng(39.900667, 116.42034)); + listPoints.add(new LatLng(39.900619, 116.420519)); + listPoints.add(new LatLng(39.900557, 116.420744)); + listPoints.add(new LatLng(39.900515, 116.420915)); + listPoints.add(new LatLng(39.900488, 116.421067)); + listPoints.add(new LatLng(39.900467, 116.421274)); + listPoints.add(new LatLng(39.900467, 116.421301)); + listPoints.add(new LatLng(39.900467, 116.421301)); + listPoints.add(new LatLng(39.900674, 116.428856)); + listPoints.add(new LatLng(39.900681, 116.429287)); + listPoints.add(new LatLng(39.900674, 116.429287)); + listPoints.add(new LatLng(39.900694, 116.429745)); + listPoints.add(new LatLng(39.900736, 116.43173)); + listPoints.add(new LatLng(39.900729, 116.433132)); + listPoints.add(new LatLng(39.900729, 116.433267)); + listPoints.add(new LatLng(39.900743, 116.433545)); + } + + private static void addLine1(List listPoints) { + listPoints.add(new LatLng(39.976748, 116.382314)); + listPoints.add(new LatLng(39.976851, 116.388045)); + listPoints.add(new LatLng(39.976892, 116.393597)); + listPoints.add(new LatLng(39.976906, 116.394199)); + listPoints.add(new LatLng(39.976906, 116.394298)); + listPoints.add(new LatLng(39.976996, 116.405949)); + listPoints.add(new LatLng(39.977016, 116.407692)); + listPoints.add(new LatLng(39.97701, 116.417564)); + listPoints.add(new LatLng(39.97701, 116.417564)); + listPoints.add(new LatLng(39.977127, 116.417591)); + listPoints.add(new LatLng(39.977127, 116.417582)); + listPoints.add(new LatLng(39.969017, 116.417932)); + listPoints.add(new LatLng(39.968549, 116.417977)); + listPoints.add(new LatLng(39.9666, 116.418094)); + listPoints.add(new LatLng(39.965099, 116.418193)); + listPoints.add(new LatLng(39.963957, 116.418256)); + listPoints.add(new LatLng(39.961533, 116.418301)); + listPoints.add(new LatLng(39.959343, 116.418301)); + listPoints.add(new LatLng(39.95422, 116.418732)); + listPoints.add(new LatLng(39.952375, 116.418858)); + listPoints.add(new LatLng(39.952106, 116.418876)); + listPoints.add(new LatLng(39.95192, 116.418849)); + listPoints.add(new LatLng(39.951693, 116.418696)); + listPoints.add(new LatLng(39.951528, 116.418525)); + listPoints.add(new LatLng(39.951383, 116.41822)); + listPoints.add(new LatLng(39.95128, 116.417941)); + listPoints.add(new LatLng(39.951239, 116.417609)); + listPoints.add(new LatLng(39.951218, 116.417312)); + listPoints.add(new LatLng(39.951218, 116.417088)); + listPoints.add(new LatLng(39.951197, 116.416899)); + listPoints.add(new LatLng(39.951115, 116.416675)); + listPoints.add(new LatLng(39.950984, 116.416513)); + listPoints.add(new LatLng(39.950839, 116.416378)); + listPoints.add(new LatLng(39.950639, 116.41627)); + listPoints.add(new LatLng(39.950426, 116.416217)); + listPoints.add(new LatLng(39.950095, 116.416243)); + listPoints.add(new LatLng(39.948835, 116.416486)); + listPoints.add(new LatLng(39.948697, 116.416486)); + listPoints.add(new LatLng(39.945557, 116.416648)); + listPoints.add(new LatLng(39.941686, 116.416791)); + listPoints.add(new LatLng(39.941005, 116.4168)); + listPoints.add(new LatLng(39.938442, 116.416944)); + listPoints.add(new LatLng(39.936045, 116.417016)); + listPoints.add(new LatLng(39.933662, 116.417142)); + listPoints.add(new LatLng(39.929247, 116.417295)); + listPoints.add(new LatLng(39.927683, 116.417393)); + listPoints.add(new LatLng(39.926553, 116.417438)); + listPoints.add(new LatLng(39.924583, 116.417492)); + listPoints.add(new LatLng(39.924369, 116.417492)); + listPoints.add(new LatLng(39.921779, 116.417573)); + listPoints.add(new LatLng(39.919044, 116.417654)); + listPoints.add(new LatLng(39.917404, 116.417708)); + listPoints.add(new LatLng(39.917287, 116.417717)); + listPoints.add(new LatLng(39.916233, 116.417825)); + listPoints.add(new LatLng(39.913904, 116.417807)); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/polyline/PolylineOptionsActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/polyline/PolylineOptionsActivity.java new file mode 100644 index 0000000..8e953e5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/polyline/PolylineOptionsActivity.java @@ -0,0 +1,87 @@ +package com.tencent.map.vector.demo.polyline; + +import android.os.Bundle; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.ArrayList; +import java.util.List; + +public class PolylineOptionsActivity extends SupportMapFragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Polyline polyline = tencentMap.addPolyline(polylineOptions); + Polyline newPolyline = tencentMap.addPolyline(newPolylineOptions); + polyline.pattern(patternLine(patterns)); //设置虚线样式 + } + + private int[] patterns = {10, 15, 20}; + private List patternLine(int [] patterns){ + List patternLine = new ArrayList<>(); + if (patterns == null) + return patternLine; + for (int i = 0; i < patterns.length; i++) + patternLine.add(patterns[i]); + return patternLine; + } + + + private List transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换 + List list = new ArrayList<>(); + if (latLngs == null) + return list; + for (int i = 0; i < latLngs.length; i++) + list.add(latLngs[i]); + + return list; + + } + + private LatLng[] latLngs = { + new LatLng(39.984864, 116.305756), + new LatLng(39.983618, 116.305848), + new LatLng(39.982347, 116.305966), + new LatLng(39.982412, 116.308111), + new LatLng(39.984122, 116.308224), + new LatLng(39.984955, 116.308099), + new LatLng(39.984864, 116.305756) + }; + + private LatLng[] newLatLngs = { + new LatLng(39.984864, 116.305756), + new LatLng(39.983618, 116.305848), + new LatLng(39.982347, 116.305966), + new LatLng(39.982412, 116.308111), + new LatLng(39.984122, 116.308224), + new LatLng(39.984955, 116.308099), + new LatLng(39.984864, 116.305756) + }; + private PolylineOptions polylineOptions = new PolylineOptions(). + addAll(transferArrayToList(latLngs)). //添加顶点 + alpha(0.5f). //设置透明度 + arrow(true). //导航用 接口 + arrowSpacing(110). // 设置方向箭头间距 + arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png")). // 设置箭头纹理 + borderColor(0xaa323456). //设置描边颜色 + borderWidth(1f). //设置描边宽度 + clickable(true). //可点击 + color(PolylineOptions.Colors.LIGHT_BLUE). //线的颜色 + colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png")). //颜色纹理 + lineCap(true). //路线是否显示半圆端点 + lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE). //设置线的类型 + visible(true). //设置折线可见性 + width(10f). //设置线的宽度 + zIndex(0); //堆叠顺序,越大优先级越高 + + + private PolylineOptions newPolylineOptions = new PolylineOptions().add(newLatLngs). + lineType(PolylineOptions.LineType.LINE_TYPE_DOTTEDLINE). + visible(true). + pattern(patternLine(patterns)). + zIndex(1); +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/CoordianteTransferActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/CoordianteTransferActivity.java new file mode 100644 index 0000000..6adef05 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/CoordianteTransferActivity.java @@ -0,0 +1,101 @@ +//package com.tencent.map.vector.demo.search; +// +//import android.content.Context; +//import android.os.Bundle; +//import android.widget.EditText; +//import android.widget.Spinner; +//import android.widget.Toast; +// +//import cc.winboll.studio.positions.R; +//import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +//import com.tencent.lbssearch.TencentSearch; +//import com.tencent.lbssearch.httpresponse.BaseObject; +//import com.tencent.lbssearch.httpresponse.HttpResponseListener; +//import com.tencent.lbssearch.object.param.TranslateParam; +//import com.tencent.lbssearch.object.result.TranslateResultObject; +//import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +// +//public class CoordianteTransferActivity extends SupportMapFragmentActivity { +// +// private EditText etCoordinate; +// private Spinner spCoordinate; +// @Override +// protected void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// initView(); +// } +// +// private void initView(){ +// etCoordinate = (EditText) findViewById(R.id.et_search_poi); +// spCoordinate +// } +// /** +// * 由字符串获取坐标 +// * @param context +// * @param str +// * @return +// */ +// public static LatLng str2Coordinate(Context context, String str) { +// if (!str.contains(",")) { +// Toast.makeText(context, "经纬度用\",\"分割", Toast.LENGTH_SHORT).show(); +// return null; +// } +// String[] strs = str.split(","); +// double lat = 0; +// double lng = 0; +// try { +// lat = Double.parseDouble(strs[0]); +// lng = Double.parseDouble(strs[1]); +// } catch (NumberFormatException e) { +// Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show(); +// return null; +// } +// return new LatLng(lat, lng); +// } +// +// private static final String[] coorTypes = { +// TranslateParam.CoordType.GPS.name(), +// TranslateParam.CoordType.SOGOU.name(), +// TranslateParam.CoordType.BAIDU.name(), +// TranslateParam.CoordType.MAPBAR.name(), +// TranslateParam.CoordType.STANDARD.name(), +// TranslateParam.CoordType.SOGOUMERCATOR.name() +// }; +// +// /** +// * 坐标转换 +// */ +// protected void coorTranslate() { +// String str = etCoordinate.getText().toString().trim(); +// LatLng latLng = str2Coordinate(this, str); +// if (latLng == null) { +// return; +// } +// TencentSearch tencentSearch = new TencentSearch(this); +// TranslateParam translateParam = new TranslateParam(); +// translateParam.addLocation(latLng); +// translateParam.coordType(TranslateParam.CoordType.valueOf(coorTypes[spCoordinate.getSelectedItemPosition()])); +// tencentSearch.translate(translateParam, new HttpResponseListener() { +// +// @Override +// public void onSuccess(int arg0, BaseObject arg1) { +// // TODO Auto-generated method stub +// if (arg1 == null) { +// return; +// } +// TranslateResultObject obj = (TranslateResultObject) arg1; +// StringBuilder sb = new StringBuilder(); +// sb.append("\n latLng:" + obj.latLngs.toString()); +// printResult(sb.toString()); +// } +// +// @Override +// public void onFailure(int arg0, String arg1, Throwable arg2) { +// // TODO Auto-generated method stub +// printResult(arg1); +// } +// }); +// } +// +// +//} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/DistrictActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/DistrictActivity.java new file mode 100644 index 0000000..209455b --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/DistrictActivity.java @@ -0,0 +1,174 @@ +package com.tencent.map.vector.demo.search; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import android.widget.TextView; +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.BaseObject; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.DistrictChildrenParam; +import com.tencent.lbssearch.object.result.DistrictResultObject; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import java.util.ArrayList; +import java.util.List; + +public class DistrictActivity extends SupportMapFragmentActivity { + private Spinner spProvince; + private Spinner spCity; + private Spinner spDistrict; + private TextView tvResult; + private List latLngs = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + initSpinner(); + } + + protected void initView() { + spProvince = (Spinner) findViewById(R.id.sp_province); + spCity = (Spinner) findViewById(R.id.sp_city); + spDistrict = (Spinner) findViewById(R.id.sp_district); + tvResult = (TextView) findViewById(R.id.tv_result); + spProvince.setVisibility(View.VISIBLE); + spCity.setVisibility(View.VISIBLE); + spDistrict.setVisibility(View.VISIBLE); + tvResult.setVisibility(View.VISIBLE); + } + + protected void initSpinner() { + + //初始化行政区划,像北京市等只有市和区两级的数据,可能会输出错误id + getDistrict(0, R.id.sp_province); + AdapterView.OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + switch (parent.getId()) { + case R.id.sp_province: + getDistrict(((List) parent.getTag()). + get(position).intValue(), R.id.sp_city); + break; + case R.id.sp_city: + getDistrict(((List) parent.getTag()). + get(position).intValue(), R.id.sp_district); + break; + case R.id.sp_district: + getDistrict(((List) parent.getTag()). + get(position).intValue(), R.id.sp_district); + tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLngs.get(position), 15f, 0, 0))); + default: + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }; + spProvince.setOnItemSelectedListener(onItemSelectedListener); + spCity.setOnItemSelectedListener(onItemSelectedListener); + spDistrict.setOnItemSelectedListener(onItemSelectedListener); + } + + /** + * 获取行政区划 + */ + protected void getDistrict(int pDistrict, final int spId) { + TencentSearch tencentSearch = new TencentSearch(this); + DistrictChildrenParam districtChildrenParam = new DistrictChildrenParam(); + Log.d("eqrwqeqewr", "getDistrict: " + spId); + //如果不设置id,则获取全部数据 + if (spId != R.id.sp_province && spId == R.id.sp_city) { + districtChildrenParam.id(pDistrict); + } + if (spId != R.id.sp_province && spId != R.id.sp_city) { + districtChildrenParam.id(pDistrict); + } + + tencentSearch.getDistrictChildren(districtChildrenParam, new HttpResponseListener() { + + @Override + public void onSuccess(int arg0, BaseObject arg1) { + // TODO Auto-generated method stub + if (arg1 == null) { + return; + } + DistrictResultObject obj = (DistrictResultObject) arg1; + switch (spId) { + case R.id.sp_province: + setDistrictAdapter(spProvince, obj); + break; + case R.id.sp_city: + setDistrictAdapter(spCity, obj); + break; + case R.id.sp_district: + setDistrictAdapter(spDistrict, obj); + break; + + default: + break; + } + } + + @Override + public void onFailure(int arg0, String arg1, Throwable arg2) { + // TODO Auto-generated method stub + // printResult(arg1); + } + }); + } + + /** + * 设置行政区划的adapter + * + * @param spinner 要设置adapter的spinner + * @param obj 用于填充adapter的数据源 + */ + protected void setDistrictAdapter(Spinner spinner, final DistrictResultObject obj) { + List names = new ArrayList(); + List ids = new ArrayList(); + latLngs.clear(); + final List districtResults = obj.result.get(0); + for (final DistrictResultObject.DistrictResult result : districtResults) { + names.add(result.fullname); + ids.add(result.id); + latLngs.add(result.latLng); + Log.d("位置", "setDistrictAdapter: " + result.fullname); + + } + ArrayAdapter adapter = new ArrayAdapter(this, + android.R.layout.simple_spinner_item, names); + spinner.setAdapter(adapter); + //将行政区划编码附到spinner方便后续查询 + spinner.setTag(ids); + + } + + + protected void printResult(final String result) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + tvResult.setText(result); + } + }); + } + +} + diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/DrivingRouteActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/DrivingRouteActivity.java new file mode 100644 index 0000000..a2ce36a --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/DrivingRouteActivity.java @@ -0,0 +1,75 @@ +package com.tencent.map.vector.demo.search; + +import android.os.Bundle; +import android.util.Log; + +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.DrivingParam; +import com.tencent.lbssearch.object.result.DrivingResultObject; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.List; + +public class DrivingRouteActivity extends SupportMapFragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(24.66493, 117.09568), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + getDrivingRoute(); + } + + private LatLng fromPoint = new LatLng(24.66493, 117.09568); // 起点坐标 + private LatLng toPoint = new LatLng(26.8857, 120.00514); //终点坐标 + + /** + * 获取驾车路线规划 + */ + private void getDrivingRoute() { + long l = (System.currentTimeMillis() / 1000)+1000; + Log.d("时间戳", "getDrivingRoute: " + l); + DrivingParam drivingParam = new DrivingParam(fromPoint, toPoint); //创建导航参数 + drivingParam.roadType(DrivingParam.RoadType.ON_MAIN_ROAD_BELOW_BRIDGE); + drivingParam.heading(90); + drivingParam.accuracy(30); + //drivingParam.departureTime(l) + TencentSearch tencentSearch = new TencentSearch(this); + tencentSearch.getRoutePlan(drivingParam, new HttpResponseListener() { + + @Override + public void onSuccess(int i, DrivingResultObject drivingResultObject) { + if (drivingResultObject == null) { + return; + } + for (DrivingResultObject.Route route : drivingResultObject.result.routes) { + List lines = route.polyline; + tencentMap.addPolyline(new PolylineOptions().addAll(lines).color(0x22ff0000)); + tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder() + .include(route.polyline).build(), 100)); + tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder() + .include(lines).build(), 100)); + } + } + + @Override + public void onFailure(int i, String s, Throwable throwable) { + + } + }); + } + +} + diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/GeoCoderActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/GeoCoderActivity.java new file mode 100644 index 0000000..44ed8aa --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/GeoCoderActivity.java @@ -0,0 +1,186 @@ +package com.tencent.map.vector.demo.search; + +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.BaseObject; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.httpresponse.Poi; +import com.tencent.lbssearch.object.param.Address2GeoParam; +import com.tencent.lbssearch.object.param.Geo2AddressParam; +import com.tencent.lbssearch.object.result.Address2GeoResultObject; +import com.tencent.lbssearch.object.result.Geo2AddressResultObject; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +public class GeoCoderActivity extends SupportMapFragmentActivity { + + private EditText etGeocoder; + private Button btnGeocoder; + private EditText etRegeocoder; + private Button btnRegeocoder; + private TextView tvResult; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + } + + + private void initView(){ + etGeocoder = (EditText) findViewById(R.id.et_geocoder); + btnGeocoder = (Button) findViewById(R.id.btn_geocoder); + etRegeocoder = (EditText) findViewById(R.id.et_regeocoder); + btnRegeocoder = (Button) findViewById(R.id.btn_regeocoder); + etGeocoder.setVisibility(View.VISIBLE); + btnGeocoder.setVisibility(View.VISIBLE); + etRegeocoder.setVisibility(View.VISIBLE); + btnRegeocoder.setVisibility(View.VISIBLE); + tvResult = (TextView) findViewById(R.id.tv_result); + tvResult.setVisibility(View.VISIBLE); + btnGeocoder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + geocoder(); + } + }); + + btnRegeocoder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + reGeocoder(); + } + }); + } + /** + *地理编码 + */ + protected void geocoder() { + TencentSearch tencentSearch = new TencentSearch(this); + String address = etGeocoder.getText().toString(); + Address2GeoParam address2GeoParam = + new Address2GeoParam(address).region("北京"); + tencentSearch.address2geo(address2GeoParam, new HttpResponseListener() { + + @Override + public void onSuccess(int arg0, BaseObject arg1) { + // TODO Auto-generated method stub + if (arg1 == null) { + return; + } + Address2GeoResultObject obj = (Address2GeoResultObject)arg1; + StringBuilder sb = new StringBuilder(); + sb.append("地址解析"); + if (obj.result.latLng != null) { + sb.append("\n坐标:" + obj.result.latLng.toString()); + } else { + sb.append("\n无坐标"); + } + printResult(sb.toString()); + tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.result.latLng,15f, 0, 0))); + tencentMap.addMarker(new MarkerOptions() + .position(obj.result.latLng)); + } + + @Override + public void onFailure(int arg0, String arg1, Throwable arg2) { + // TODO Auto-generated method stub + printResult(arg1); + } + }); + } + + /** + * 逆地理编码 + */ + protected void reGeocoder() { + String str = etRegeocoder.getText().toString().trim(); + LatLng latLng = str2Coordinate(this, str); + if (latLng == null) { + return; + } + TencentSearch tencentSearch = new TencentSearch(this); + //还可以传入其他坐标系的坐标,不过需要用coord_type()指明所用类型 + //这里设置返回周边poi列表,可以在一定程度上满足用户获取指定坐标周边poi的需求 + Geo2AddressParam geo2AddressParam = new Geo2AddressParam(latLng).getPoi(true) + .setPoiOptions(new Geo2AddressParam.PoiOptions() + .setRadius(1000).setCategorys("面包") + .setPolicy(Geo2AddressParam.PoiOptions.POLICY_O2O)); + tencentSearch.geo2address(geo2AddressParam, new HttpResponseListener() { + + @Override + public void onSuccess(int arg0, BaseObject arg1) { + // TODO Auto-generated method stub + if (arg1 == null) { + return; + } + Geo2AddressResultObject obj = (Geo2AddressResultObject)arg1; + StringBuilder sb = new StringBuilder(); + sb.append("逆地址解析"); + sb.append("\n地址:" + obj.result.address); + sb.append("\npois:"); + for (Poi poi : obj.result.pois) { + sb.append("\n\t" + poi.title); + tencentMap.addMarker(new MarkerOptions() + .position(poi.latLng) //标注的位置 + .title(poi.title) //标注的InfoWindow的标题 + .snippet(poi.address) //标注的InfoWindow的内容 + ); + } + //printResult(sb.toString()); + } + + @Override + public void onFailure(int arg0, String arg1, Throwable arg2) { + // TODO Auto-generated method stub + printResult(arg1); + } + }); + } + + + /** + * 由字符串获取坐标 + * @param context + * @param str + * @return + */ + public static LatLng str2Coordinate(Context context, String str) { + if (!str.contains(",")) { + Toast.makeText(context, "经纬度用\",\"分割", Toast.LENGTH_SHORT).show(); + return null; + } + String[] strs = str.split(","); + double lat = 0; + double lng = 0; + try { + lat = Double.parseDouble(strs[0]); + lng = Double.parseDouble(strs[1]); + } catch (NumberFormatException e) { + Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show(); + return null; + } + return new LatLng(lat, lng); + } + protected void printResult(final String result) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + tvResult.setText(result); + } + }); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/SearchBasicActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/SearchBasicActivity.java new file mode 100644 index 0000000..b7b2c9b --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/SearchBasicActivity.java @@ -0,0 +1,305 @@ +package com.tencent.map.vector.demo.search; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.BaseObject; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.SearchParam; +import com.tencent.lbssearch.object.param.SuggestionParam; +import com.tencent.lbssearch.object.result.SearchResultObject; +import com.tencent.lbssearch.object.result.SuggestionResultObject; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +import java.lang.ref.WeakReference; +import java.util.List; + +public class SearchBasicActivity extends SupportMapFragmentActivity { + private EditText etSearch; + private Button btnSearch; + private ListView lvSuggesion; + private SuggestionAdapter suggestionAdapter; + private final int MSG_SUGGESTION = 10000; + private final MyHandler handler = new MyHandler(this); + + private static class MyHandler extends Handler { + private final WeakReference mActivity; + + public MyHandler(SearchBasicActivity activity) { + // TODO Auto-generated constructor stub + mActivity = new WeakReference<>(activity); + } + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + SearchBasicActivity activity = mActivity.get(); + if (activity != null) { + activity.handleMessage(msg); + } + } + } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + } + + protected void initView(){ + etSearch = (EditText) findViewById(R.id.et_search_poi); + btnSearch = (Button) findViewById(R.id.btn_search_poi); + etSearch.setVisibility(View.VISIBLE); + btnSearch.setVisibility(View.VISIBLE); + lvSuggesion = (ListView) findViewById(R.id.lv_suggestions); + + etSearch.addTextChangedListener(textWatcher); + etSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + // TODO Auto-generated method stub + if (!etSearch.hasFocus()) { + lvSuggesion.setVisibility(View.GONE); + } + } + }); + + lvSuggesion.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + etSearch.removeTextChangedListener(textWatcher); + CharSequence cs = + ((TextView)view.findViewById(R.id.label)).getText(); + etSearch.setText(cs); + lvSuggesion.setVisibility(View.GONE); + etSearch.addTextChangedListener(textWatcher); + } + }); + + btnSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + searchPoi(); + } + }); + } + + final TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stub + suggestion(s.toString()); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + + } + }; + + + + /** + * poi检索 + */ + protected void searchPoi() { + TencentSearch tencentSearch = new TencentSearch(this); + String keyWord = etSearch.getText().toString().trim(); + //城市搜索 + SearchParam.Region region = new SearchParam.Region("北京").//设置搜索城市 + autoExtend(false);//设置搜索范围不扩大 + //圆形范围搜索 + LatLng latLng1 = new LatLng(39.984154, 116.307490); + SearchParam.Nearby nearBy = new SearchParam.Nearby(latLng1, 1000); + //矩形搜索,这里的范围是故宫 + LatLng latLng2 = new LatLng(39.913127, 116.392164); + LatLng latLng3 = new LatLng(39.923034, 116.402078); + SearchParam.Rectangle rectangle = new SearchParam.Rectangle(latLng2, latLng3); + + //filter()方法可以设置过滤类别, + //search接口还提供了排序方式、返回条目数、返回页码具体用法见文档, + //同时也可以参考官网的webservice对应接口的说明 + SearchParam searchParam = new SearchParam(keyWord, region);//.pageIndex(0).pageSize(20).filter("大学,中学"); + tencentSearch.search(searchParam, new HttpResponseListener() { + + @Override + public void onFailure(int arg0, String arg2, + Throwable arg3) { + Toast.makeText(getApplicationContext(), arg2, Toast.LENGTH_LONG).show(); + } + + @Override + public void onSuccess(int arg0, BaseObject arg1) { + if (arg1 == null) { + return; + } + SearchResultObject obj = (SearchResultObject) arg1; + if(obj.data == null){ + return; + } + tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.data.get(0).latLng,15f, 0, 0))); + for(SearchResultObject.SearchResultData data : obj.data){ + Log.v("SearchDemo","title:"+data.title + ";" + data.address); + tencentMap.addMarker(new MarkerOptions() + .position(data.latLng) //标注的位置 + .title(data.title) //标注的InfoWindow的标题 + .snippet(data.address) //标注的InfoWindow的内容 + ); + + } + } + }); + } + + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_SUGGESTION: + showAutoComplete((SuggestionResultObject)msg.obj); + break; + + default: + break; + } + } + + /** + * 显示完整ListView + * @param obj + */ + protected void showAutoComplete(SuggestionResultObject obj) { + if (obj.data.size() == 0) { + lvSuggesion.setVisibility(View.GONE); + return; + } + if (suggestionAdapter == null) { + suggestionAdapter = new SuggestionAdapter(obj.data); + lvSuggesion.setAdapter(suggestionAdapter); + } else { + suggestionAdapter.setDatas(obj.data); + suggestionAdapter.notifyDataSetChanged(); + } + lvSuggesion.setVisibility(View.VISIBLE); + } + /** + * 关键字提示 + * @param keyword + */ + protected void suggestion(String keyword) { + if (keyword.trim().length() == 0) { + lvSuggesion.setVisibility(View.GONE); + return; + } + TencentSearch tencentSearch = new TencentSearch(this); + SuggestionParam suggestionParam = new SuggestionParam(keyword, "北京"); + //suggestion也提供了filter()方法和region方法 + //具体说明见文档,或者官网的webservice对应接口 + tencentSearch.suggestion(suggestionParam, new HttpResponseListener() { + + @Override + public void onSuccess(int arg0, BaseObject arg1) { + if (arg1 == null || + etSearch.getText().toString().trim().length() == 0) { + lvSuggesion.setVisibility(View.GONE); + return; + } + + Message msg = new Message(); + msg.what = MSG_SUGGESTION; + msg.obj = arg1; + handler.sendMessage(msg); + } + + @Override + public void onFailure(int arg0, String arg1, Throwable arg2) { + //printResult(arg1); + } + }); + } + + class SuggestionAdapter extends BaseAdapter { + + List mSuggestionDatas; + + public SuggestionAdapter(List suggestionDatas) { + // TODO Auto-generated constructor stub + setDatas(suggestionDatas); + } + + public void setDatas(List suggestionDatas) { + mSuggestionDatas = suggestionDatas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mSuggestionDatas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mSuggestionDatas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (convertView == null) { + convertView = View.inflate(SearchBasicActivity.this, + R.layout.suggestion_list_item, null); + viewHolder = new ViewHolder(); + viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.label); + viewHolder.tvAddress = (TextView) convertView.findViewById(R.id.desc); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + viewHolder.tvTitle.setText(mSuggestionDatas.get(position).title); + viewHolder.tvAddress.setText(mSuggestionDatas.get(position).address); + return convertView; + } + + private class ViewHolder{ + TextView tvTitle; + TextView tvAddress; + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/TransitRouteActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/TransitRouteActivity.java new file mode 100644 index 0000000..c9eddc1 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/TransitRouteActivity.java @@ -0,0 +1,93 @@ +package com.tencent.map.vector.demo.search; + +import android.os.Bundle; +import android.util.Log; + +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.TransitParam; +import com.tencent.lbssearch.object.result.TransitResultObject; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.List; + +public class TransitRouteActivity extends SupportMapFragmentActivity { + private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标 + private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //移动地图 + tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(40.080287, 116.244949), + 12, + 0f, + 0f))); + getTransitRoute(); + tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { + @Override + public void onMapClick(LatLng latLng) { + Log.d("TAG", "onMapClick: "+latLng); + } + }); + } + + /** + * 获取公交路径规划 + * TransitResultObject中的Segment是抽象类,要转换成具体的子类才能获取数据 + */ + private void getTransitRoute() { + TransitParam transitParam = new TransitParam(fromPoint, toPoint); + TencentSearch tencentSearch = new TencentSearch(this); + transitParam.policy(TransitParam.Policy.LEAST_WALKING, TransitParam.Preference.NO_SUBWAY); + tencentSearch.getRoutePlan(transitParam, new HttpResponseListener() { + + @Override + public void onSuccess(int i, TransitResultObject transitResultObject) { + if (transitResultObject == null) { + Log.i("TAG", "baseObject为空"); + return; + } + showTransitRoute(transitResultObject); + + } + + @Override + public void onFailure(int i, String s, Throwable throwable) { + Log.d("TransitRouteActivity", "onFailure: " + s); + } + }); + } + + private void showTransitRoute(TransitResultObject transitResultObject) { + tencentMap.clearAllOverlays(); + if (transitResultObject.result != null && transitResultObject.result.routes != null && transitResultObject.result.routes.size() > 0) { + for (int i = 0; i < transitResultObject.result.routes.size(); i++) { + TransitResultObject.Route route = transitResultObject.result.routes.get(i); + + List steps = route.steps; + for (int j = 0; j < steps.size(); j++) { + TransitResultObject.Segment segment = steps.get(j); + if (segment instanceof TransitResultObject.Transit) { + TransitResultObject.Transit transit = (TransitResultObject.Transit) segment; + tencentMap.addPolyline(new PolylineOptions().addAll(transit.lines.get(0).polyline).color(i + 1).width(20)); + + } else if (segment instanceof TransitResultObject.Walking) { + TransitResultObject.Walking walking = (TransitResultObject.Walking) segment; + tencentMap.addPolyline(new PolylineOptions().addAll(walking.polyline).color(j + 1).lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE).width(20)); + } + + } + } + + } else { + Log.i("TAG", "路线结果为空"); + } + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/TruckingRouteActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/TruckingRouteActivity.java new file mode 100644 index 0000000..9b47eff --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/TruckingRouteActivity.java @@ -0,0 +1,77 @@ +package com.tencent.map.vector.demo.search; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.util.Log; + +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.TransitParam; +import com.tencent.lbssearch.object.param.TruckingParam; +import com.tencent.lbssearch.object.result.RoutePlanningObject; +import com.tencent.lbssearch.object.result.TransitResultObject; +import com.tencent.lbssearch.object.result.TruckingResultObject; +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + +import java.util.List; + +public class TruckingRouteActivity extends SupportMapFragmentActivity { + private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标 + private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(40.040219, 116.273348), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + geTruckingRoute(); + } + + private void geTruckingRoute() { + TruckingParam truckingParam = new TruckingParam(); + truckingParam.from(fromPoint); + truckingParam.to(toPoint); + truckingParam.setMultRoute(1); + // truckingParam.setNoPolyline(1); + truckingParam.trafficSpeed(true); + TencentSearch tencentSearch = new TencentSearch(this); + tencentSearch.getRoutePlan(truckingParam, new HttpResponseListener() { + + @Override + public void onSuccess(int i, TruckingResultObject truckingResultObject) { + if (null != truckingResultObject.result && null != truckingResultObject.result.routes && truckingResultObject.result.routes.size() > 0) { + for (int j = 0; j < truckingResultObject.result.routes.size(); j++) { + TruckingResultObject.Result result = truckingResultObject.result; + TruckingResultObject.Route route = result.routes.get(j); + // List steps = route.steps; + tencentMap.addPolyline(new PolylineOptions().addAll(route.polyline).color(i + 1).width(20)); + tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder() + .include(route.polyline).build(), 100)); + + } + } + } + + @Override + public void onFailure(int i, String s, Throwable throwable) { + Log.d("TruckingRouteActivity", "onFailure: " + s); + + } + }); + + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/search/WalkingRouteActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/search/WalkingRouteActivity.java new file mode 100644 index 0000000..d8d0da4 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/search/WalkingRouteActivity.java @@ -0,0 +1,76 @@ +package com.tencent.map.vector.demo.search; + +import android.os.Bundle; +import android.util.Log; + +import com.tencent.lbssearch.object.result.RoutePlanningObject; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.lbssearch.TencentSearch; +import com.tencent.lbssearch.httpresponse.HttpResponseListener; +import com.tencent.lbssearch.object.param.WalkingParam; +import com.tencent.lbssearch.object.result.WalkingResultObject; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; + + +public class WalkingRouteActivity extends SupportMapFragmentActivity { + + private LatLng fromPoint = new LatLng(40.040219, 116.273348); // 起点坐标 + private LatLng toPoint = new LatLng(40.048055, 116.281166); //终点坐标 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWalkingRoute(); + } + + /** + * 获取步行路线规划 + */ + private void getWalkingRoute() { + WalkingParam walkingParam = new WalkingParam(); + walkingParam.from(fromPoint); + walkingParam.to(toPoint); + TencentSearch tencentSearch = new TencentSearch(getApplicationContext()); + Log.i("TAG", "checkParams:" + walkingParam.checkParams()); + tencentSearch.getRoutePlan(walkingParam, new HttpResponseListener() { + @Override + public void onSuccess(int statusCode, WalkingResultObject object) { + if (object == null) { + Log.i("TAG", "baseObject为空"); + return; + } + showWalkingRoute(object); + Log.i("TAG", "message:" + object.message); + } + + @Override + public void onFailure(int statusCode, String responseString, Throwable throwable) { + Log.i("TAG:", statusCode + " " + responseString); + } + }); + } + + private void showWalkingRoute(WalkingResultObject object) { + tencentMap.clearAllOverlays(); + if (object.result != null && object.result.routes != null && object.result.routes.size() > 0) { + for (int i = 0; i < object.result.routes.size(); i++) { + WalkingResultObject.Route result = object.result.routes.get(i); + tencentMap.addPolyline(new PolylineOptions().addAll(result.polyline).color(i + 1).width(20)); + Log.i("TAG", "distance:" + result.distance + " duration:" + result.duration + + " mode:" + result.mode + " direction:" + result.direction); + for (RoutePlanningObject.Step step : result.steps) { + Log.i("TAG", "step:" + step.road_name + " " + step.distance + " " + + step.instruction + " " + step.act_desc + " " + step.dir_desc); + } + tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder() + .include(result.polyline).build(), 100)); + } + + } else { + Log.i("TAG", "路线结果为空"); + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/smooth/SmoothMoveActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/smooth/SmoothMoveActivity.java new file mode 100644 index 0000000..cfa5cce --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/smooth/SmoothMoveActivity.java @@ -0,0 +1,251 @@ +package com.tencent.map.vector.demo.smooth; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.drawable.RoundedBitmapDrawable; +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; + +import cc.winboll.studio.positions.R; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; +import com.tencent.tencentmap.mapsdk.maps.model.Marker; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.tencent.tencentmap.mapsdk.maps.model.Polyline; +import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; +import com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Timer; +import java.util.TimerTask; + +import static com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator.MarkerTranslateStatusListener.AnimationStatus.AnimationComplete; + +public class SmoothMoveActivity extends AppCompatActivity implements View.OnClickListener { + private MapView mapView; + private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697"; + private TencentMap map; + private Polyline mPolyline; + private Marker mCarMarker; + private LatLng[] mCarLatLngArray; + private MarkerTranslateAnimator mAnimator; + private Polyline polyline; + private ArrayList skews; + private ArrayList roates; + private String parentPath; + private ImageView imageView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_smooth_move); + mapView = findViewById(R.id.map); + map = mapView.getMap(); + //解析路线 + init(); + Button btLin = findViewById(R.id.button_set); + Button btStart = findViewById(R.id.satrt); + Button btStop = findViewById(R.id.stop); + btLin.setOnClickListener(this); + btStart.setOnClickListener(this); + btStop.setOnClickListener(this); + } + + private void init() { + String[] linePointsStr = mLine.split(","); + mCarLatLngArray = new LatLng[linePointsStr.length / 4]; + skews = new ArrayList<>(); + roates = new ArrayList<>(); + + for (int i = 0; i < mCarLatLngArray.length; i++) { + double latitude = Double.parseDouble(linePointsStr[i * 4]); + double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]); + // float skew = Float.parseFloat(linePointsStr[i * 4 + 2]); + // float roate = Float.parseFloat(linePointsStr[i * 4 + 3]); + mCarLatLngArray[i] = new LatLng(latitude, longitude); + // skews.add(skew); + // roates.add(roate); + } + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onRestart() { + super.onRestart(); + mapView.onRestart(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.button_set: + if (polyline == null && mCarMarker == null) { + //添加小车路线 + polyline = map.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorPrimaryDark)); + LatLng carLatLng = mCarLatLngArray[0]; + mCarMarker = map.addMarker( + new MarkerOptions(carLatLng) + .anchor(0.5f, 0.5f) + .title("即将到达终点") + .icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.taxi))) + .flat(true) + .clockwise(false)); + //调整最佳视界 + map.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50)); + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + if (polyline != null) { + snapshot(); + } + + } + }; + Timer timer = new Timer(); + timer.schedule(timerTask, 800); + } + break; + case R.id.satrt: + if (mAnimator == null) { + //创建移动动画 + mAnimator = new MarkerTranslateAnimator(mCarMarker, 100 * 1000, mCarLatLngArray, true, new MarkerTranslateAnimator.MarkerTranslateStatusListener() { + private CameraUpdate cameraSigma; + + @Override + public void onInterpolatePoint(LatLng latLng, int i, AnimationStatus animationStatus) { + //路线擦出 + polyline.setEraseable(true); + polyline.eraseTo(i, latLng); + + /* CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBoundsWithMapCenter(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), latLng, 10); + map.animateCamera(cameraUpdate);*/ + if (mCarMarker.getRotation() < 90 && mCarMarker.getRotation() > 0) { + cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + latLng, + 18, + 60, + mCarMarker.getRotation() + 180)); + } else if (mCarMarker.getRotation() >= 90 && mCarMarker.getRotation() <= 180) { + cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + latLng, + 18, + 60, + -mCarMarker.getRotation())); + } else { + cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + latLng, + 18, + 60, + -mCarMarker.getRotation())); + } + + //移动地图 + map.moveCamera(cameraSigma); + map.enableMultipleInfowindow(true); + if (i == 41) { + mCarMarker.startAnimation(); + mCarMarker.showInfoWindow(); + } + if (animationStatus == AnimationComplete) { + mCarMarker.setTitle("到达目的地"); + } + } + }); + + + //开启动画 + mAnimator.startAnimation(); + } + break; + case R.id.stop: + if (mAnimator != null && polyline != null && mCarMarker != null) { + mAnimator.endAnimation(); + //mAnimator.cancelAnimation(); + polyline.remove(); + polyline = null; + mCarMarker.remove(); + mCarMarker = null; + mAnimator = null; + } + + + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + private void snapshot() { + imageView = findViewById(R.id.iv); + + map.snapshot(new TencentMap.SnapshotReadyCallback() { + @Override + public void onSnapshotReady(Bitmap bitmap) { + RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap); + roundedBitmapDrawable.setCircular(true); + imageView.setImageDrawable(roundedBitmapDrawable); + } + }, Bitmap.Config.ARGB_8888); + } + + //设置图片 + private Bitmap getBitMap(int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int newWidth = 100; + int newHeight = 150; + float widthScale = ((float) newWidth) / width; + float heightScale = ((float) newHeight) / height; + Matrix matrix = new Matrix(); + matrix.postScale(widthScale, heightScale); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); + return bitmap; + } +} \ No newline at end of file diff --git a/positions/src/main/java/com/tencent/map/vector/demo/transaction/AnimateCameraActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/transaction/AnimateCameraActivity.java new file mode 100644 index 0000000..a485ce5 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/transaction/AnimateCameraActivity.java @@ -0,0 +1,61 @@ +package com.tencent.map.vector.demo.transaction; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class AnimateCameraActivity extends SupportMapFragmentActivity implements View.OnClickListener { + + private Button btn; + private boolean flag; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + btn = findViewById(R.id.btn_bottom); + btn.setVisibility(View.VISIBLE); + btn.setText("以动画的方式改变地图视图"); + btn.setOnClickListener(this); + + flag = true; + } + + /** + * 改变地图视图 + * @param v + */ + @Override + public void onClick(View v) { + if(flag){ + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.977290,116.337000), //新的中心点坐标 + 19, //新的缩放级别 + 40f, //俯仰角 0~45° (垂直地图时为0) + 45f)); //偏航角 0~360° (正北方为0) + //移动地图 + tencentMap.animateCamera(cameraSigma); + flag = !flag; + }else { + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.877290,116.437000), //新的中心点坐标 + 18, //新的缩放级别 + 0f, //俯仰角 0~45° (垂直地图时为0) + 0f)); //偏航角 0~360° (正北方为0) + //移动地图 + tencentMap.animateCamera(cameraSigma); + flag = !flag; + } + + } + +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/transaction/MoveCameraActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/transaction/MoveCameraActivity.java new file mode 100644 index 0000000..8586b4f --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/transaction/MoveCameraActivity.java @@ -0,0 +1,61 @@ +package com.tencent.map.vector.demo.transaction; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; + +public class MoveCameraActivity extends SupportMapFragmentActivity implements View.OnClickListener { + + + private Button btn; + private boolean flag; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + btn = findViewById(R.id.btn_bottom); + btn.setVisibility(View.VISIBLE); + btn.setText("以移动的方式改变地图视图"); + btn.setOnClickListener(this); + + flag = true; + } + + /** + * 改变地图视图 + * @param v + */ + @Override + public void onClick(View v) { + if(flag){ + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.977290,116.337000), //新的中心点坐标 + 19, //新的缩放级别 + 40f, //俯仰角 0~45° (垂直地图时为0) + 45f)); //偏航角 0~360° (正北方为0) + //移动地图 + tencentMap.moveCamera(cameraSigma); + flag = !flag; + }else { + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(39.877290,116.437000), //新的中心点坐标 + 18, //新的缩放级别 + 0f, //俯仰角 0~45° (垂直地图时为0) + 0f)); //偏航角 0~360° (正北方为0) + //移动地图 + tencentMap.moveCamera(cameraSigma); + flag = !flag; + } + + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/transaction/RotateMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/transaction/RotateMapActivity.java new file mode 100644 index 0000000..7fda144 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/transaction/RotateMapActivity.java @@ -0,0 +1,28 @@ +package com.tencent.map.vector.demo.transaction; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; + +public class RotateMapActivity extends SupportMapFragmentActivity { + private Button btn; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + btn = findViewById(R.id.btn_bottom); + btn.setVisibility(View.VISIBLE); + btn.setText("旋转地图"); + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CameraUpdate cameraUpdate = CameraUpdateFactory.rotateTo(90f,1.5f); + tencentMap.animateCamera(cameraUpdate); + } + }); + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/transaction/ScollMapActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/transaction/ScollMapActivity.java new file mode 100644 index 0000000..73b2e8d --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/transaction/ScollMapActivity.java @@ -0,0 +1,82 @@ +package com.tencent.map.vector.demo.transaction; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.LinearLayout; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; + +public class ScollMapActivity extends SupportMapFragmentActivity implements View.OnClickListener { + private static final int SCROLL_BY_PX = 100; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LinearLayout linearLayout = findViewById(R.id.ll); + linearLayout.setVisibility(View.VISIBLE); + Button scrollLeft = (Button) findViewById(R.id.scroll_left); + scrollLeft.setOnClickListener(this); + + Button scrollRight = (Button) findViewById(R.id.scroll_right); + scrollRight.setOnClickListener(this); + + Button scrollUp = (Button) findViewById(R.id.scroll_up); + scrollUp.setOnClickListener(this); + + Button scrollDown = (Button) findViewById(R.id.scroll_down); + scrollDown.setOnClickListener(this); + + /* btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CameraUpdate cameraUpdate = CameraUpdateFactory.scrollBy(50f,50f); + tencentMap.animateCamera(cameraUpdate); + } + });*/ + } + + + // 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区域 + + private void changeCamera(CameraUpdate update, TencentMap.CancelableCallback callback) { + boolean animated = ((CompoundButton) findViewById(R.id.animate)) + .isChecked(); + if (animated) { + tencentMap.animateCamera(update, 1000, callback); + } else { + tencentMap.moveCamera(update); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + //点击向左移动按钮响应事件,camera将向左边移动 + + case R.id.scroll_left: + changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX, 0), null); + break; + // 点击向右移动按钮响应事件,camera将向右边移动 + case R.id.scroll_right: + changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX, 0), null); + break; + // 点击向上移动按钮响应事件,camera将向上边移动 + case R.id.scroll_up: + changeCamera(CameraUpdateFactory.scrollBy(0, -SCROLL_BY_PX), null); + break; + // 点击向下移动按钮响应事件,camera将向下边移动 + case R.id.scroll_down: + changeCamera(CameraUpdateFactory.scrollBy(0, SCROLL_BY_PX), null); + break; + + default: + break; + } + } +} diff --git a/positions/src/main/java/com/tencent/map/vector/demo/transaction/ZoomCalulateActivity.java b/positions/src/main/java/com/tencent/map/vector/demo/transaction/ZoomCalulateActivity.java new file mode 100644 index 0000000..62d7059 --- /dev/null +++ b/positions/src/main/java/com/tencent/map/vector/demo/transaction/ZoomCalulateActivity.java @@ -0,0 +1,73 @@ +package com.tencent.map.vector.demo.transaction; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import cc.winboll.studio.positions.R; +import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; +import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; + +import java.util.ArrayList; + +public class ZoomCalulateActivity extends SupportMapFragmentActivity { + + private Button btn; + private int leftpadding = 50,rightpadding =50, toppadding = 50, bottompadding=50; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + btn = findViewById(R.id.btn_bottom); + btn.setVisibility(View.VISIBLE); + btn.setText("根据点集缩放地图"); + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(addMarker()); + tencentMap.moveCamera(cameraUpdate); + } + }); + } + + + private CameraPosition addMarker(){ + ArrayList points = new ArrayList<>(); + points.add(new LatLng(39.984059,116.307621)); + points.add(new LatLng(39.984049,116.307631)); +// points.add(new LatLng(39.981527,116.308994)); +// points.add(new LatLng(39.984026,116.316419)); +// points.add(new LatLng(39.978501,116.311827)); + //根据markers计算缩放级别 + for(int i=0; i + + + + + + + + + + diff --git a/positions/src/main/res/drawable/ic_launcher_background.xml b/positions/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/positions/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/positions/src/main/res/drawable/ic_location_searching.xml b/positions/src/main/res/drawable/ic_location_searching.xml new file mode 100644 index 0000000..f009b89 --- /dev/null +++ b/positions/src/main/res/drawable/ic_location_searching.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/positions/src/main/res/drawable/ic_my_location.xml b/positions/src/main/res/drawable/ic_my_location.xml new file mode 100644 index 0000000..6c00b88 --- /dev/null +++ b/positions/src/main/res/drawable/ic_my_location.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/positions/src/main/res/drawable/location_icon.png b/positions/src/main/res/drawable/location_icon.png new file mode 100644 index 0000000..afd491d Binary files /dev/null and b/positions/src/main/res/drawable/location_icon.png differ diff --git a/positions/src/main/res/drawable/marker.png b/positions/src/main/res/drawable/marker.png new file mode 100644 index 0000000..2bf4a9e Binary files /dev/null and b/positions/src/main/res/drawable/marker.png differ diff --git a/positions/src/main/res/drawable/navi_marker_location.png b/positions/src/main/res/drawable/navi_marker_location.png new file mode 100644 index 0000000..0663838 Binary files /dev/null and b/positions/src/main/res/drawable/navi_marker_location.png differ diff --git a/positions/src/main/res/drawable/radius.xml b/positions/src/main/res/drawable/radius.xml new file mode 100644 index 0000000..c30908c --- /dev/null +++ b/positions/src/main/res/drawable/radius.xml @@ -0,0 +1,16 @@ + + + //这里是Linearlayout布局的背景颜色 + + //这里是设置边框线的粗细和颜色 + + + //角的话,里边有参数可以单独设置 + + \ No newline at end of file diff --git a/positions/src/main/res/drawable/road.jpeg b/positions/src/main/res/drawable/road.jpeg new file mode 100644 index 0000000..2fda1e9 Binary files /dev/null and b/positions/src/main/res/drawable/road.jpeg differ diff --git a/positions/src/main/res/drawable/taxi.png b/positions/src/main/res/drawable/taxi.png new file mode 100644 index 0000000..f5a90cf Binary files /dev/null and b/positions/src/main/res/drawable/taxi.png differ diff --git a/positions/src/main/res/layout/activity_aggregation_overlay_design.xml b/positions/src/main/res/layout/activity_aggregation_overlay_design.xml new file mode 100644 index 0000000..dea6cdc --- /dev/null +++ b/positions/src/main/res/layout/activity_aggregation_overlay_design.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_aoi_layer.xml b/positions/src/main/res/layout/activity_aoi_layer.xml new file mode 100644 index 0000000..b3e5af8 --- /dev/null +++ b/positions/src/main/res/layout/activity_aoi_layer.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_arc.xml b/positions/src/main/res/layout/activity_arc.xml new file mode 100644 index 0000000..3a06c21 --- /dev/null +++ b/positions/src/main/res/layout/activity_arc.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_arc_line_layer_design.xml b/positions/src/main/res/layout/activity_arc_line_layer_design.xml new file mode 100644 index 0000000..d60379b --- /dev/null +++ b/positions/src/main/res/layout/activity_arc_line_layer_design.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_custom_render.xml b/positions/src/main/res/layout/activity_custom_render.xml new file mode 100644 index 0000000..0bf6a6f --- /dev/null +++ b/positions/src/main/res/layout/activity_custom_render.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_demomain.xml b/positions/src/main/res/layout/activity_demomain.xml new file mode 100644 index 0000000..0c983d0 --- /dev/null +++ b/positions/src/main/res/layout/activity_demomain.xml @@ -0,0 +1,23 @@ + + + + + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_g_l_model.xml b/positions/src/main/res/layout/activity_g_l_model.xml new file mode 100644 index 0000000..e47a54a --- /dev/null +++ b/positions/src/main/res/layout/activity_g_l_model.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/positions/src/main/res/layout/activity_gridmap.xml b/positions/src/main/res/layout/activity_gridmap.xml new file mode 100644 index 0000000..af33111 --- /dev/null +++ b/positions/src/main/res/layout/activity_gridmap.xml @@ -0,0 +1,69 @@ + + + +