From 71dab4d22b11e2b124a919c5536ed9522f6f872c Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Mon, 22 May 2023 17:48:20 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20=E4=BB=A5submodule=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E5=BC=95=E5=85=A5vtm=E6=BA=90=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E5=90=8E=E7=BB=AD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 ++ .../java/com/navinfo/omqs/rule/LeftPanel.kt | 5 -- build.gradle | 11 ++-- collect-library/build.gradle | 52 ++++++++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 41 +++++++++++++++ vtm | 1 + 7 files changed, 88 insertions(+), 27 deletions(-) create mode 100644 .gitmodules delete mode 100644 app/src/main/java/com/navinfo/omqs/rule/LeftPanel.kt create mode 160000 vtm diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..5c54078a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vtm"] + path = vtm + url = git@github.com:mapsforge/vtm.git diff --git a/app/src/main/java/com/navinfo/omqs/rule/LeftPanel.kt b/app/src/main/java/com/navinfo/omqs/rule/LeftPanel.kt deleted file mode 100644 index e4214c05..00000000 --- a/app/src/main/java/com/navinfo/omqs/rule/LeftPanel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.navinfo.omqs.rule - -class LeftPanel { - -} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0a318d80..5900d1f1 100644 --- a/build.gradle +++ b/build.gradle @@ -8,9 +8,14 @@ buildscript { } } plugins { - id 'com.android.application' version '7.3.1' apply false - id 'com.android.library' version '7.3.1' apply false + id 'com.android.application' version '7.4.2' apply false + id 'com.android.library' version '7.4.2' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false id 'com.google.dagger.hilt.android' version '2.44' apply false - } +static def androidCompileSdk() { return 33 } +allprojects { + ext.gdxVersion = "1.11.0" + ext.gwtVersion = "2.8.2" + ext.slf4jVersion = "1.7.28" +} \ No newline at end of file diff --git a/collect-library/build.gradle b/collect-library/build.gradle index 85910984..eb29aaa7 100644 --- a/collect-library/build.gradle +++ b/collect-library/build.gradle @@ -45,6 +45,12 @@ android { sourceSets { main { jniLibs.srcDirs = ['libs'] + file("../vtm/vtm-android/natives").eachDir() { dir -> + jniLibs.srcDirs += "${dir.path}/lib" + } + file("../vtm/vtm-android-gdx/natives").eachDir() { dir -> + jniLibs.srcDirs += "${dir.path}/lib" + } } } } @@ -72,25 +78,34 @@ dependencies { // VTM依赖 implementation "net.sf.kxml:kxml2:2.3.0" implementation 'org.slf4j:slf4j-api:2.0.7' - api "org.mapsforge:vtm:$vtmVersion" - implementation "org.mapsforge:vtm-themes:$vtmVersion" - implementation "org.mapsforge:vtm-android:$vtmVersion" - runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-armeabi-v7a" - runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-arm64-v8a" - runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86" - runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86_64" - implementation "org.mapsforge:vtm-http:$vtmVersion" + implementation project(":vtm-themes") + implementation project(":vtm-android") + implementation project(':vtm-extras') + implementation project(":vtm-http") +// implementation "org.mapsforge:vtm-themes:$vtmVersion" +// implementation "org.mapsforge:vtm-android:$vtmVersion" +// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-armeabi-v7a" +// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-arm64-v8a" +// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86" +// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86_64" +// implementation "org.mapsforge:vtm-http:$vtmVersion" - implementation "org.mapsforge:vtm-json:$vtmVersion" - implementation "org.mapsforge:vtm-gdx:$vtmVersion" - implementation "org.mapsforge:vtm-android-mvt:$vtmVersion" - implementation "org.mapsforge:vtm-mvt:$vtmVersion" + implementation project(":vtm-json") +// implementation project(":vtm-gdx") +// implementation project(":vtm-gdx-poi3d") + implementation project(":vtm-android-mvt") + implementation project(":vtm-mvt") +// implementation "org.mapsforge:vtm-json:$vtmVersion" +// implementation "org.mapsforge:vtm-gdx:$vtmVersion" +// implementation "org.mapsforge:vtm-android-mvt:$vtmVersion" +// implementation "org.mapsforge:vtm-mvt:$vtmVersion" - runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-armeabi-v7a" - runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-arm64-v8a" - runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86" - runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86_64" - implementation "org.mapsforge:vtm-android-gdx:$vtmVersion" +// implementation project(":vtm-android-gdx") +// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-armeabi-v7a" +// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-arm64-v8a" +// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86" +// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86_64" +// implementation "org.mapsforge:vtm-android-gdx:$vtmVersion" implementation "com.google.protobuf:protobuf-java:3.6.1" implementation "com.wdtinc:mapbox-vector-tile:3.1.0" @@ -98,7 +113,8 @@ dependencies { implementation "com.badlogicgames.gdx:gdx:1.11.0" implementation "com.badlogicgames.gdx:gdx-backend-android:1.11.0" implementation "com.caverock:androidsvg:1.4" - api "org.mapsforge:vtm-jts:$vtmVersion" +// api "org.mapsforge:vtm-jts:$vtmVersion" + api project(":vtm-jts") api 'org.locationtech.jts:jts-core:1.19.0' implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.11' implementation 'com.squareup.okio:okio:3.3.0' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fce747eb..690a555d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Mar 21 10:15:37 CST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index b39629d4..edc00b4f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -30,5 +30,46 @@ dependencyResolutionManagement { } } rootProject.name = "OMQualityInspection" + include ':app' include ':collect-library' +//include ':vtm:vtm' +//include ':vtm:vtm-android' +//include ':vtm:vtm-android-gdx' +//include ':vtm:vtm-android-mvt' +//include ':vtm:vtm-extras' +//include ':vtm:vtm-gdx' +//include ':vtm:vtm-gdx-poi3d' +//include ':vtm:vtm-http' +//include ':vtm:vtm-json' +//include ':vtm:vtm-jts' +//include ':vtm:vtm-models' +//include ':vtm:vtm-mvt' +//include ':vtm:vtm-theme-comparator' +//include ':vtm:vtm-themes' +include ':vtm' +include ':vtm-models' +include ':vtm-themes' +include ':vtm-android-mvt' +include ':vtm-android-gdx' +include ':vtm-android' +include ':vtm-mvt' +include ':vtm-gdx' +include ':vtm-jts' +include ':vtm-http' +include ':vtm-json' +include ':vtm-extras' +include ':vtm-gdx-poi3d' +project(':vtm').projectDir = new File(rootDir, 'vtm/vtm/') +project(':vtm-models').projectDir = new File(rootDir, 'vtm/vtm-models/') +project(':vtm-themes').projectDir = new File(rootDir, 'vtm/vtm-themes/') +project(':vtm-android-mvt').projectDir = new File(rootDir, 'vtm/vtm-android-mvt/') +project(':vtm-android-gdx').projectDir = new File(rootDir, 'vtm/vtm-android-gdx/') +project(':vtm-android').projectDir = new File(rootDir, 'vtm/vtm-android/') +project(':vtm-mvt').projectDir = new File(rootDir, 'vtm/vtm-mvt/') +project(':vtm-gdx').projectDir = new File(rootDir, 'vtm/vtm-gdx/') +project(':vtm-jts').projectDir = new File(rootDir, 'vtm/vtm-jts/') +project(':vtm-http').projectDir = new File(rootDir, 'vtm/vtm-http/') +project(':vtm-json').projectDir = new File(rootDir, 'vtm/vtm-json/') +project(':vtm-extras').projectDir = new File(rootDir, 'vtm/vtm-extras/') +project(':vtm-gdx-poi3d').projectDir = new File(rootDir, 'vtm/vtm-gdx-poi3d/') diff --git a/vtm b/vtm new file mode 160000 index 00000000..1ee201a4 --- /dev/null +++ b/vtm @@ -0,0 +1 @@ +Subproject commit 1ee201a41f78f169873848209a3f3bdac36f185a From d0c0eb97ba73c367981de22e39ebb91f10b624df Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Tue, 23 May 2023 15:37:12 +0800 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0git=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8ccc4f86..4e2ca589 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ .externalNativeBuild .cxx local.properties +./vtm/ \ No newline at end of file From f4ddc2768d31d9abf6ec0db53ed1e386873f5915 Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Tue, 23 May 2023 15:39:11 +0800 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0git=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4e2ca589..3e0cedc7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,4 @@ .externalNativeBuild .cxx local.properties -./vtm/ \ No newline at end of file +/vtm/ \ No newline at end of file From 7f6ae65e62bac16b71fe788f8a2ee281a7cb726d Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Tue, 23 May 2023 15:41:36 +0800 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0geometry=E5=8F=B3?= =?UTF-8?q?=E7=A7=BB=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/navinfo/omqs/db/ImportPreProcess.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index ba4a91d7..dfdf88ea 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -1,6 +1,11 @@ package com.navinfo.omqs.db import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.utils.GeometryTools +import org.locationtech.jts.algorithm.Angle +import org.locationtech.jts.geom.Coordinate +import org.locationtech.jts.geom.Geometry + class ImportPreProcess { /** @@ -11,4 +16,38 @@ class ImportPreProcess { renderEntity.properties["foo"] = "bar" return renderEntity } + + /** + * 计算指定数据指定方向的坐标 + * */ + fun translateRight(renderEntity: RenderEntity): RenderEntity { + // 获取当前renderEntity的geometry + val geometry = renderEntity.wkt + var angle = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 + var point = Coordinate(geometry?.coordinate) + if (Geometry.TYPENAME_POINT == geometry?.geometryType) { + angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! + } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { + val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2) + val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1) + // 计算线段的方向 + angle = Angle.angle(p1, p2) + point = p2 + } + + // 将角度转换为弧度 + val radian = Math.toRadians(angle) + + // 计算偏移距离 + val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian) + val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian) + + // 计算偏移后的点 + val coord = + Coordinate(point.getX() + dy, point.getY() - dx) + + // 将这个点记录在数据中 + renderEntity.properties["geometry"] = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)).toString() + return renderEntity + } } \ No newline at end of file From 47495bd6ef6958435c833f21b29e9e37bd571816 Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Tue, 23 May 2023 15:42:45 +0800 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0vtm=E5=AD=90?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vtm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vtm b/vtm index 1ee201a4..ab81b783 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 1ee201a41f78f169873848209a3f3bdac36f185a +Subproject commit ab81b7838c8659e650ac30cd052bb807e445b317 From f160f1dd006a9e1042fe856fb04fc9ed92a4640f Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Tue, 23 May 2023 15:44:41 +0800 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9git=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 3e0cedc7..f6c5d058 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,4 @@ /build /captures .externalNativeBuild -.cxx -local.properties -/vtm/ \ No newline at end of file +.cxx \ No newline at end of file From 4d579d87c4cb48cc23ebdc08199cc0e196bf484d Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Wed, 24 May 2023 14:04:11 +0800 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E5=8F=B3=E5=81=8F?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=A7=92=E5=BA=A6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 13 +++---- .../com/navinfo/omqs/bean/ImportConfig.kt | 34 ++++++++++--------- .../com/navinfo/omqs/db/ImportPreProcess.kt | 31 +++++++++++++---- .../personalcenter/PersonalCenterFragment.kt | 2 +- vtm | 2 +- 5 files changed, 51 insertions(+), 31 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 411acf54..a3937a5c 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -25,6 +25,12 @@ "v": "0", "klib": "maxSpeed", "vlib": "限" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" } ] }, @@ -76,12 +82,7 @@ "code": 2041, "name": "车道数", "transformer": [ - { - "k": "laneS2e", - "v": "~", - "klib": "left_00", - "vlib": "laneNumLeft00()" - } + ] } } diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index ed5ba35a..1e15ce0d 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -32,23 +32,25 @@ class ImportConfig { } // 开始解析key和value,并对数据进行匹配 m@ for (k in processKeyOrValue(key)) { - for (v in processKeyOrValue(value)) { - if ("~" == v &&renderEntity.properties.containsKey(k)) { // ~符可以匹配任意元素 - if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 - val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") } - method.call(preProcess, renderEntity) - } else { - renderEntity.properties[keylib] = valuelib + if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据 + for (v in processKeyOrValue(value)) { + if ("~" == v ) { // ~符可以匹配任意元素 + if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 + val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") } + method.call(preProcess, renderEntity) + } else { + renderEntity.properties[keylib] = valuelib + } + break@m + } else if (renderEntity.properties[k] == v) { // 完全匹配 + if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 + val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") } + method.call(preProcess, renderEntity) + } else { + renderEntity.properties[keylib] = valuelib + } + break@m } - break@m - } else if (renderEntity.properties[k] == v) { - if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 - val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") } - method.call(preProcess, renderEntity) - } else { - renderEntity.properties[keylib] = valuelib - } - break@m } } } diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index dfdf88ea..1ce234b4 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -23,21 +23,19 @@ class ImportPreProcess { fun translateRight(renderEntity: RenderEntity): RenderEntity { // 获取当前renderEntity的geometry val geometry = renderEntity.wkt - var angle = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 + var radian = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 var point = Coordinate(geometry?.coordinate) if (Geometry.TYPENAME_POINT == geometry?.geometryType) { - angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! + val angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! + radian = Math.toRadians(angle) } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2) val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1) // 计算线段的方向 - angle = Angle.angle(p1, p2) + radian = Angle.angle(p1, p2) point = p2 } - // 将角度转换为弧度 - val radian = Math.toRadians(angle) - // 计算偏移距离 val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian) val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian) @@ -47,7 +45,26 @@ class ImportPreProcess { Coordinate(point.getX() + dy, point.getY() - dx) // 将这个点记录在数据中 - renderEntity.properties["geometry"] = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)).toString() + val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)) + renderEntity.geometry = geometryTranslate.toString() return renderEntity } + + fun addAngleFromGeometry(renderEntity: RenderEntity): String { + renderEntity.properties.put("angle", "0") + if (renderEntity.wkt!=null) { + val geometry = renderEntity.wkt + if (geometry?.numPoints!!>=2) { + val p1: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 2)!! + val p2: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 1)!! + val angle = Angle.angle(p1, p2).toString() + // 计算线段的方向 + renderEntity.properties["angle"] = angle + return angle + } else { + renderEntity.properties["angle"] = "90" + } + } + return "0" + } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index b0d14d37..52b16caa 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -111,7 +111,7 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks { viewModel.readRealmData() // 定位到指定位置 niMapController.mMapView.vtmMap.animator() - .animateTo(GeoPoint(40.1012346774074730, 116.25571303257621)) + .animateTo(GeoPoint(30.26491197757836, 113.8408333015833 )) } R.id.personal_center_menu_task_list -> { findNavController().navigate(R.id.TaskManagerFragment) diff --git a/vtm b/vtm index ab81b783..dd13e533 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit ab81b7838c8659e650ac30cd052bb807e445b317 +Subproject commit dd13e533c38b5738ab404c2737d7ccadeff01323 From 80b8b60556fc6515043c5575790c534d27582e2c Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Wed, 24 May 2023 17:12:34 +0800 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/navinfo/omqs/db/ImportPreProcess.kt | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index 1ce234b4..5091a0ab 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -51,18 +51,21 @@ class ImportPreProcess { } fun addAngleFromGeometry(renderEntity: RenderEntity): String { - renderEntity.properties.put("angle", "0") - if (renderEntity.wkt!=null) { - val geometry = renderEntity.wkt - if (geometry?.numPoints!!>=2) { - val p1: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 2)!! - val p2: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 1)!! - val angle = Angle.angle(p1, p2).toString() + if (!renderEntity.properties.containsKey("angle")) { + if (renderEntity.wkt!=null) { + val geometry = renderEntity.wkt + var angle: String = "90" + if (geometry?.numPoints!!>=2) { + val p1: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 2)!! + val p2: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 1)!! + // 弧度转角度 + angle = Math.toDegrees(Angle.angle(p1, p2)).toString() + } else { + angle = "90" + } // 计算线段的方向 renderEntity.properties["angle"] = angle return angle - } else { - renderEntity.properties["angle"] = "90" } } return "0" From 22f52429f4def5591d5c32f3451ed3081f9eb959 Mon Sep 17 00:00:00 2001 From: xiaoyan <xiaoyan159@163.com> Date: Fri, 26 May 2023 13:46:32 +0800 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E4=BA=A4=E9=99=90=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 2 +- .../com/navinfo/omqs/db/ImportPreProcess.kt | 41 ++++++++++++++++++- collect-library/resources/rendertheme.xsd | 1 + .../src/main/assets/editormarker.xml | 17 ++++---- .../library/data/entity/RenderEntity.kt | 2 +- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index ce84ea34..d7ac2a91 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -131,7 +131,7 @@ "k": "geometry", "v": "~", "klib": "geometry", - "vlib": "translateRight()" + "vlib": "translateRightWithAngle()" } ] }, diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index 5091a0ab..51bebc84 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -5,6 +5,7 @@ import com.navinfo.collect.library.utils.GeometryTools import org.locationtech.jts.algorithm.Angle import org.locationtech.jts.geom.Coordinate import org.locationtech.jts.geom.Geometry +import org.oscim.core.GeoPoint class ImportPreProcess { @@ -37,8 +38,8 @@ class ImportPreProcess { } // 计算偏移距离 - val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian) - val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian) + val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian) + val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian) // 计算偏移后的点 val coord = @@ -50,6 +51,42 @@ class ImportPreProcess { return renderEntity } + /** + * 将要素按照点位角度的垂直方向右移5米,并生成一个按照垂直角度指向方向的线段,用以显示有方向的图标 + * */ + fun translateRightWithAngle(renderEntity: RenderEntity): RenderEntity { + // 获取当前renderEntity的geometry + val geometry = renderEntity.wkt + var radian = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 + var point = Coordinate(geometry?.coordinate) + if (Geometry.TYPENAME_POINT == geometry?.geometryType) { + val angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! + radian = Math.toRadians(angle) + } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { + val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2) + val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1) + // 计算线段的方向 + radian = Angle.angle(p1, p2) + point = p2 + } + + // 根据角度计算偏移距离 + val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian) + val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian) + + // 计算偏移后的点 +// val coordMid = +// Coordinate(point.getX() + dy, point.getY() - dx) + val pointStart = GeoPoint(point.getY() - dx, point.getX() + dy) +// val pointStart = GeoPoint(pointMid.latitude-dy, pointMid.longitude-dx) + val pointEnd = GeoPoint(pointStart.latitude- dx, pointStart.longitude+ dy) + + // 将这个线记录在数据中 + val geometryTranslate: Geometry = GeometryTools.createLineString(listOf(pointStart, pointEnd)) + renderEntity.geometry = geometryTranslate.toString() + return renderEntity + } + fun addAngleFromGeometry(renderEntity: RenderEntity): String { if (!renderEntity.properties.containsKey("angle")) { if (renderEntity.wkt!=null) { diff --git a/collect-library/resources/rendertheme.xsd b/collect-library/resources/rendertheme.xsd index d77fee4f..3d4d76c5 100644 --- a/collect-library/resources/rendertheme.xsd +++ b/collect-library/resources/rendertheme.xsd @@ -94,6 +94,7 @@ <xs:enumeration value="name"/> <xs:enumeration value="maxSpeed"/><!--最高速度--> <xs:enumeration value="minSpeed"/><!--最低速度--> + <xs:enumeration value="angle"/><!--角度--> <xs:enumeration value="ref"/> </xs:restriction> </xs:simpleType> diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index afc8a751..d8d52cf1 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1730,7 +1730,7 @@ stroke-width="1.0"></caption> </m> <m v="1"> - <caption k="maxSpeed" fill="#000000" priority="0" size="16" stroke="#ffffff" + <caption k="maxSpeed" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> <symbol src="assets:omdb/icon_4002_1.png" symbol-width="46" symbol-height="46"></symbol> <!-- <circle fill="#ffffff" radius="28" scale-radius="true" stroke="#00ff00" stroke-width="6"/>--> @@ -1818,14 +1818,14 @@ <m k="speedFlag"> <m v="0"> <!-- <symbol src="assets:omdb/round_speedlimit.svg" symbol-width="30" symbol-height="30"></symbol>--> - <caption k="maxSpeed" fill="#000000" priority="0" size="16" stroke="#ffffff" + <caption k="maxSpeed" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> <symbol src="assets:omdb/icon_4003_0.png" symbol-width="46" symbol-height="46"></symbol> <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> </m> <m v="1"> - <caption k="maxSpeed" fill="#000000" priority="0" size="16" stroke="#ffffff" + <caption k="maxSpeed" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> <symbol src="assets:omdb/icon_4003_1.png" symbol-width="46" symbol-height="46"></symbol> <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff" @@ -1837,14 +1837,14 @@ <m v="OMDB_SPEEDLIMIT_VAR"> <m v="0"> <!-- <symbol src="assets:omdb/round_speedlimit.svg" symbol-width="30" symbol-height="30"></symbol>--> - <caption k="maxSpeed" fill="#000000" priority="0" size="16" stroke="#ffffff" + <caption k="maxSpeed" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> <symbol src="assets:omdb/icon_4004_0.png" symbol-width="46" symbol-height="46"></symbol> <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> </m> <m v="1"> - <caption k="maxSpeed" fill="#000000" priority="0" size="16" stroke="#ffffff" + <caption k="maxSpeed" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0"></caption> <symbol src="assets:omdb/icon_4004_1.png" symbol-width="46" symbol-height="46"></symbol> <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff" @@ -1860,7 +1860,7 @@ <m k="direct"> <m v="2"> <!-- <lineSymbol src="assets:omdb/oneway_right.svg"></lineSymbol>--> - <symbol src="assets:omdb/oneway_right.svg" ></symbol> + <lineSymbol src="assets:omdb/oneway_right.svg" ></lineSymbol> </m> <m v="3"> <!-- <lineSymbol src="assets:omdb/oneway_left.svg"></lineSymbol>--> @@ -1874,7 +1874,10 @@ </m> <!--普通交限--> <m v="OMDB_RESTRICTION"> - <symbol src="assets:omdb/icon_4006_0.png" repeat="false" symbol-width="46" symbol-height="46" rotate="false"></symbol> + <symbol src="assets:omdb/icon_4006_0.png" repeat="false" symbol-width="35" symbol-height="35" rotate="true" repeat-start="0" ></symbol> +<!-- <line stroke="#14582c" width="0.1"/>--> +<!-- <caption k="angle" fill="#000000" priority="0" size="14" stroke="#ffffff"--> +<!-- stroke-width="1.0"></caption>--> </m> </m> </rendertheme> \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt index 853ab265..a799e01c 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt @@ -22,7 +22,7 @@ open class RenderEntity() : RealmObject() { lateinit var name: String //要素名 lateinit var table: String //要素表名 var code: Int = 0 // 要素编码 - var geometry: String = "" + var geometry: String = "" // 要素渲染参考的geometry,该数据可能会在导入预处理环节被修改,原始geometry会保存在properties的geometry字段下 get() { wkt = GeometryTools.createGeometry(field) return field