From 8551ce43a7665ffadf8dc2bf233cfa1b05808634 Mon Sep 17 00:00:00 2001
From: xiaoyan <xiaoyan159@163.com>
Date: Mon, 26 Jun 2023 14:56:29 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E8=B7=AF=E5=8F=A3?=
 =?UTF-8?q?=E5=92=8C=E7=94=B5=E5=AD=90=E7=9C=BC=E6=B8=B2=E6=9F=93=E6=A0=B7?=
 =?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/src/main/assets/omdb_config.json          |   8 +-
 .../com/navinfo/omqs/bean/ImportConfig.kt     |  14 ++-
 .../com/navinfo/omqs/db/ImportPreProcess.kt   | 108 ++----------------
 .../omqs/ui/activity/map/MainActivity.kt      |   2 +-
 .../personalcenter/PersonalCenterFragment.kt  |   2 +-
 .../src/main/assets/editormarker.xml          |   6 +-
 6 files changed, 23 insertions(+), 117 deletions(-)

diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json
index db3273a8..a211f51e 100644
--- a/app/src/main/assets/omdb_config.json
+++ b/app/src/main/assets/omdb_config.json
@@ -224,7 +224,7 @@
 					"k": "geometry",
 					"v": "~",
 					"klib": "geometry",
-					"vlib": "generateDirectReferenceLine()"
+					"vlib": "generateDirectReferenceLine(direct=3)"
 				},
 				{
 					"k": "geometry",
@@ -239,12 +239,6 @@
 			"code": 4022,
 			"name": "交通灯",
 			"transformer": [
-				{
-					"k": "angle",
-					"v": "~",
-					"klib": "angle",
-					"vlib": "0"
-				}
 			]
 		},
 		"4601":{
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 1d74d315..5c6683b2 100644
--- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt
+++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt
@@ -38,7 +38,7 @@ class ImportConfig {
                 if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据
                     for (v in processKeyOrValue(value)) {
                         if ("~" == v ) { // ~符可以匹配任意元素
-                            if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
+                            if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
                                 // 获取方法名
                                 val methodName = valuelib.substringBefore("(")
                                 // 获取参数
@@ -51,8 +51,9 @@ class ImportConfig {
                                     methodParams[1] to renderEntity
                                 )
                                 for ((index, value) in params.withIndex()) {
-                                    if (methodParams.size>index+1) {
-                                        callByParams[methodParams[index+1]] = value
+                                    // 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置
+                                    if (methodParams.size>index+2) {
+                                        callByParams[methodParams[index+2]] = value
                                     }
                                 }
                                 when(val result = method.callBy(callByParams)) { // 如果方法返回的数据类型是boolean,且返回为false,则该数据不处理
@@ -66,7 +67,7 @@ class ImportConfig {
                             }
                             break@m
                         } else if (renderEntity.properties[k] == v) { // 完全匹配
-                            if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
+                            if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
                                 // 获取方法名
                                 val methodName = valuelib.substringBefore("(")
                                 // 获取参数
@@ -79,8 +80,9 @@ class ImportConfig {
                                     methodParams[1] to renderEntity
                                 )
                                 for ((index, value) in params.withIndex()) {
-                                    if (methodParams.size>index+1) {
-                                        callByParams[methodParams[index+1]] = value
+                                    // 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置
+                                    if (methodParams.size>index+2) {
+                                        callByParams[methodParams[index+2]] = value
                                     }
                                 }
                                 when(val result = method.callBy(callByParams)) {
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 f556e19c..de475584 100644
--- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt
+++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt
@@ -26,7 +26,7 @@ class ImportPreProcess {
         Log.d("checkCircleRoad", "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${linkOutEntity?.properties?.get("enodePid")}")
         // 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false
         if (linkInEntity!=null&&linkOutEntity!=null) {
-            if ((linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"]) || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"]
+            if (linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"]
                 || linkInEntity.properties["snodePid"] == linkOutEntity.properties["snodePid"]|| linkInEntity.properties["enodePid"] == linkOutEntity.properties["enodePid"])
             return false
         }
@@ -48,11 +48,13 @@ class ImportPreProcess {
                 isReverse = true;
             }
         }
-        if (Geometry.TYPENAME_POINT == geometry?.geometryType) {
+        if (Geometry.TYPENAME_POINT == geometry?.geometryType) { // angle为与正北方向的顺时针夹角
             var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
             if (isReverse) {
                 angle += 180
             }
+            // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
+            angle=(450-angle)%360
             radian = Math.toRadians(angle)
         } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
             var coordinates = geometry.coordinates
@@ -99,6 +101,8 @@ class ImportPreProcess {
             if (isReverse) {
                 angle += 180
             }
+            // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
+            angle=(450-angle)%360
             radian = Math.toRadians(angle)
         } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
             var coordinates = geometry.coordinates
@@ -169,6 +173,8 @@ class ImportPreProcess {
             if (isReverse) {
                 angle += 180
             }
+            // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
+            angle=(450-angle)%360
             radian = Math.toRadians(angle)
         } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
             var coordinates = geometry.coordinates
@@ -186,7 +192,7 @@ class ImportPreProcess {
         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 coorEnd = Coordinate(point.getX() + dy, point.getY() - dx)
+        val coorEnd = Coordinate(point.getX() + dx, point.getY() + dy)
 
         val angleReference = ReferenceEntity()
         angleReference.renderEntityId = renderEntity.id
@@ -249,102 +255,6 @@ class ImportPreProcess {
     }
 
 
-    /**
-     * 自动生成普通交限的参考数据
-     * */
-    fun generateRestrictionRerference(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) {
-            var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
-            radian = Math.toRadians(angle)
-        }
-
-        // 计算偏移距离
-        val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian)
-        val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian)
-
-        // 计算偏移后的点
-        val pointTranS =
-            GeoPoint(point.getY() - dx, point.getX() + dy) // 向右偏移的点
-
-        // 计算与原有方向平行的终点坐标
-        val pointTranE = GeoPoint(pointTranS.latitude + dy, pointTranS.longitude + dx)
-
-        renderEntity.geometry = GeometryTools.createGeometry(pointTranS).toString()
-
-        // 将这个点记录在数据中
-        val startEndReference = ReferenceEntity()
-        startEndReference.renderEntityId = renderEntity.id
-        startEndReference.name = "普通交限参考线"
-        startEndReference.table = renderEntity.table
-        // 起终点坐标组成的线
-        startEndReference.geometry = GeometryTools.createLineString(listOf(GeoPoint(point.y, point.x), pointTranS)).toString()
-        startEndReference.properties["qi_table"] = renderEntity.table
-        startEndReference.properties["type"] = "s_2_e"
-        Realm.getDefaultInstance().insert(startEndReference)
-
-        val angleReference = ReferenceEntity()
-        angleReference.renderEntityId = renderEntity.id
-        angleReference.name = "普通交限参考方向"
-        angleReference.table = renderEntity.table
-        // 与原有方向指向平行的线
-        angleReference.geometry = GeometryTools.createLineString(listOf(pointTranS, pointTranE)).toString()
-        angleReference.properties["qi_table"] = renderEntity.table
-        angleReference.properties["type"] = "angle"
-        Realm.getDefaultInstance().insert(angleReference)
-    }
-
-    /**
-     * 自动生成电子眼的参考数据
-     * */
-    fun generateElectronicEyeRerference(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) {
-            var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
-            radian = Math.toRadians(angle)
-        }
-
-        // 计算偏移距离
-        val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian)
-        val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian)
-
-        // 计算偏移后的点
-        val pointTranS =
-            GeoPoint(point.getY() - dx, point.getX() + dy) // 向右偏移的点
-
-        // 计算与原有方向平行的终点坐标
-        val pointTranE = GeoPoint(pointTranS.latitude + dy, pointTranS.longitude + dx)
-
-        renderEntity.geometry = GeometryTools.createGeometry(pointTranS).toString()
-
-        // 记录参考数据,绘制电子眼方向
-        val startEndReference = ReferenceEntity()
-        startEndReference.renderEntityId = renderEntity.id
-        startEndReference.name = "电子眼参考线"
-        startEndReference.table = renderEntity.table
-        // 起终点坐标组成的线
-        startEndReference.geometry = GeometryTools.createLineString(listOf(GeoPoint(point.y, point.x), pointTranS)).toString()
-        startEndReference.properties["qi_table"] = renderEntity.table
-        startEndReference.properties["type"] = "s_2_e"
-        Realm.getDefaultInstance().insert(startEndReference)
-
-        val angleReference = ReferenceEntity()
-        angleReference.renderEntityId = renderEntity.id
-        angleReference.name = "电子眼参考方向"
-        angleReference.table = renderEntity.table
-        // 与原有方向指向平行的线
-        angleReference.geometry = GeometryTools.createLineString(listOf(pointTranS, pointTranE)).toString()
-        angleReference.properties["qi_table"] = renderEntity.table
-        angleReference.properties["type"] = "angle"
-        Realm.getDefaultInstance().insert(angleReference)
-    }
-
 
     /**
      * 生成默认道路名数据
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
index c46932f7..d1a82fbd 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
@@ -230,7 +230,7 @@ class MainActivity : BaseActivity() {
         }
         //监听地图中点变化
         viewModel.liveDataCenterPoint.observe(this) {
-            Log.e("qj", "${it.longitude}")
+//            Log.e("qj", "${it.longitude}")
             try {
                 if (it != null && it.longitude != null && it.latitude != null) {
                     binding.mainActivityGeometry.text = "经纬度:${
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 69881185..3c687be0 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
@@ -112,7 +112,7 @@ class PersonalCenterFragment(private var backListener: (() -> Unit?)? = null) :
                     viewModel.readRealmData()
                     // 定位到指定位置
                     niMapController.mMapView.vtmMap.animator()
-                        .animateTo(GeoPoint( 39.80130797136839, 116.51808677349096    ))
+                        .animateTo(GeoPoint( 39.799624915997725, 116.51407667184905     ))
                 }
 //                R.id.personal_center_menu_task_list -> {
 //                    findNavController().navigate(R.id.TaskManagerFragment)
diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml
index 543f0a22..29d2d7b1 100644
--- a/collect-library/src/main/assets/editormarker.xml
+++ b/collect-library/src/main/assets/editormarker.xml
@@ -1809,6 +1809,7 @@
                 <symbol repeat="false" repeat-start="0" rotate="false"
                     src="assets:symbols/volcano.svg" symbol-height="69" symbol-width="69"></symbol>
             </m>
+            <caption k="name" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0" dy="-30"></caption>
             <m k="type" v="angle">
                 <symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true"
                     src="assets:omdb/icon_arrow_right.svg" symbol-height="76"
@@ -1817,9 +1818,8 @@
             <m k="type" v="s_2_e">
                 <line use="s2e" />
             </m>
-            <text use="road" dy="30"></text>
-        </m>
-        <!-- 路口 -->
+    </m>
+    <!-- 路口 -->
         <m v="OMDB_INTERSECTION">
             <m k="type" v="node">
                 <symbol src="assets:symbols/dot_blue_dark.svg"></symbol>