From e9c11906375053a8d2006b4c703e2e04cf503848 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 25 Oct 2023 09:21:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=AB=8B?= =?UTF-8?q?=E4=BA=A4=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 18 +++++++++++++ .../com/navinfo/omqs/db/ImportPreProcess.kt | 27 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index c09975d4..d33b093a 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -550,6 +550,24 @@ } ] }, + "4016": { + "table": "OMDB_ZLEVEL", + "code": 4016, + "name": "立交", + "zoomMin": 15, + "zoomMax": 17, + "filterData": true, + "catch": true, + "checkLinkId": false, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "obtainZLevelReference()" + } + ] + }, "4022": { "table": "OMDB_TRAFFICLIGHT", "code": 4022, 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 78dd5815..c980a445 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -995,4 +995,31 @@ class ImportPreProcess { renderEntity.properties["ref"] = "${renderEntity.properties["maxSpeed"]}|${renderEntity.properties["minSpeed"]}" } } + + /** + * 生成立交的辅助图层数据 + * */ + fun obtainZLevelReference(renderEntity: RenderEntity) { + if(renderEntity!=null) { + // 判断当前数据的startEnd,如果是0则向前和向后都绘制线,如果是1(起点)则只绘制前两个点组成的线,如果是2(终点)则只绘制后两个点组成的线 + val zLevelReference = ReferenceEntity() + zLevelReference.renderEntityId = renderEntity.id + zLevelReference.name = "${renderEntity.name}参考点" + zLevelReference.code = renderEntity.code + zLevelReference.table = renderEntity.table + zLevelReference.zoomMin = renderEntity.zoomMin + zLevelReference.zoomMax = renderEntity.zoomMax + zLevelReference.taskId = renderEntity.taskId + zLevelReference.enable = renderEntity.enable + // 辅助图层的geometry是指定点和相邻点计算方向,延伸 + if (renderEntity.wkt!=null) { + renderEntity.wkt?.coordinates[renderEntity.properties] + } + zLevelReference.geometry = + GeometryTools.createGeometry(renderEntity.geometry).toString() + zLevelReference.properties["qi_table"] = renderEntity.table + zLevelReference.properties["type"] = "zlevel" + zLevelReference.properties["ZLevel"] = renderEntity.properties["zLevel"] + } + } } \ No newline at end of file From 261812b8703392e63bdd808ce51cba6f4c8d365c Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Thu, 26 Oct 2023 09:52:47 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt | 2 +- vtm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 f1167537..db29db17 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 @@ -182,7 +182,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? // 定位到指定位置 niMapController.mMapView.vtmMap.animator() // .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708 )) - .animateTo(GeoPoint(31.205913609396507, 121.56955739056055 )) + .animateTo(GeoPoint(40.07245537956604,116.239638575623)) } R.id.personal_center_menu_open_all_layer -> { diff --git a/vtm b/vtm index 9e0cc6dc..6a6bb9ab 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc +Subproject commit 6a6bb9ab5eaf6bb4c05b3110c612c32ef4c6ef3d From 5df2ba7cd0107e8bb26d1c0836f7aeb2b561aa5a Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Fri, 3 Nov 2023 15:28:28 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=BD=A6?= =?UTF-8?q?=E9=81=93=E7=B1=BB=E5=9E=8B=E6=B8=B2=E6=9F=93?= 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/db/ImportPreProcess.kt | 147 +++++++++++++++--- .../personalcenter/PersonalCenterFragment.kt | 2 +- .../src/main/assets/editormarker.xml | 33 +++- .../src/main/assets/omdb/icon_2092_acc_e.svg | 1 + .../src/main/assets/omdb/icon_2092_acc_s.svg | 1 + .../src/main/assets/omdb/icon_2092_dec_e.svg | 1 + .../src/main/assets/omdb/icon_2092_dec_s.svg | 1 + .../src/main/assets/omdb/icon_2092_e.svg | 1 - .../src/main/assets/omdb/icon_2092_s.svg | 1 - vtm | 2 +- 11 files changed, 164 insertions(+), 34 deletions(-) create mode 100644 collect-library/src/main/assets/omdb/icon_2092_acc_e.svg create mode 100644 collect-library/src/main/assets/omdb/icon_2092_acc_s.svg create mode 100644 collect-library/src/main/assets/omdb/icon_2092_dec_e.svg create mode 100644 collect-library/src/main/assets/omdb/icon_2092_dec_s.svg delete mode 100644 collect-library/src/main/assets/omdb/icon_2092_e.svg delete mode 100644 collect-library/src/main/assets/omdb/icon_2092_s.svg diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index d4a3640a..80729987 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -163,6 +163,12 @@ "zoomMin": 18, "zoomMax": 20, "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "filterLaneTypeAccess()" + }, { "k": "geometry", "v": "~", @@ -561,7 +567,7 @@ "code": 4016, "name": "立交", "zoomMin": 15, - "zoomMax": 17, + "zoomMax": 20, "filterData": true, "catch": true, "checkLinkId": false, 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 b6d524b2..276c137f 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -226,12 +226,26 @@ class ImportPreProcess { insertData(listResult) } + /** + * 过滤车道类型数据,只保留加速车道、减速车道和自行车道 + * */ + fun filterLaneTypeAccess(renderEntity: RenderEntity): Boolean { + if (renderEntity.properties["laneType"]!!.toInt() and (0b1100) > 0 || renderEntity.properties["laneType"]!!.toInt() and (0b1 shl 19) > 0) { // 是加速车道/减速车道/自行车道 + // 如果是自行车道,需要在properties中增加新的属性,用于渲染自行车道的特殊线型 + if (renderEntity.properties["laneType"]!!.toInt() and (0b1 shl 19) > 0) { + renderEntity.properties["bike"] = "true" + } + return true + } + return false + } + /** * 生成车道类型起终点参考数据 * */ fun generateLaneTypeAccessS2ERefPoint(renderEntity: RenderEntity) { - // 如果车道类型非常规车道(第0bit的数据),则需要生成辅助数据 - if (renderEntity.properties["laneType"]!!.toInt()>0) { + // 只需要生成加速车道和减速车道的起终点辅助数据 + if (renderEntity.properties["laneType"]!!.toInt() and (0b1100) > 0) { // 是加速车道或者减速车道 val geometry = GeometryTools.createGeometry(renderEntity.properties["geometry"]) val pointEnd = geometry!!.coordinates[geometry.numPoints - 1] // 获取这个geometry对应的结束点坐标 @@ -253,7 +267,7 @@ class ImportPreProcess { startReference.geometry = GeometryTools.createGeometry(GeoPoint(pointStart.y, pointStart.x)).toString() startReference.properties["qi_table"] = renderEntity.table - startReference.properties["type"] = "s_2_p" + startReference.properties["type"] = "s${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}" startReference.properties["geometry"] = startReference.geometry listResult.add(startReference) @@ -271,7 +285,7 @@ class ImportPreProcess { endReference.geometry = GeometryTools.createGeometry(GeoPoint(pointEnd.y, pointEnd.x)).toString() endReference.properties["qi_table"] = renderEntity.table - endReference.properties["type"] = "e_2_p" + endReference.properties["type"] = "e${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}" endReference.properties["geometry"] = endReference.geometry listResult.add(endReference) @@ -1067,26 +1081,113 @@ class ImportPreProcess { * 生成立交的辅助图层数据 * */ fun obtainZLevelReference(renderEntity: RenderEntity) { - if(renderEntity!=null) { - // 判断当前数据的startEnd,如果是0则向前和向后都绘制线,如果是1(起点)则只绘制前两个点组成的线,如果是2(终点)则只绘制后两个点组成的线 - val zLevelReference = ReferenceEntity() - zLevelReference.renderEntityId = renderEntity.id - zLevelReference.name = "${renderEntity.name}参考点" - zLevelReference.code = renderEntity.code - zLevelReference.table = renderEntity.table - zLevelReference.zoomMin = renderEntity.zoomMin - zLevelReference.zoomMax = renderEntity.zoomMax - zLevelReference.taskId = renderEntity.taskId - zLevelReference.enable = renderEntity.enable - // 辅助图层的geometry是指定点和相邻点计算方向,延伸 - if (renderEntity.wkt!=null) { - renderEntity.wkt?.coordinates[renderEntity.properties] + if(renderEntity!=null&&renderEntity.properties.containsKey("zlevelList")) { + // 获取ZLevelList数据 + val zLevelList = JSONArray(renderEntity.properties["zlevelList"]) + for (i in 0 until zLevelList.length()) { + val zLevelObject = zLevelList.getJSONObject(i) + // 获取ZLevelObject的startEnd字段值 + val startEnd = zLevelObject.optInt("startEnd", 0) + val zLevel = zLevelObject.optInt("zlevel", 0) + val shpSeqNum = zLevelObject.optInt("shpSeqNum", 0) + val linkGeometry = GeometryTools.createGeometry(zLevelObject.optString("linkGeometry")) + val coordinates = linkGeometry!!.coordinates + val referenceEntityList = mutableListOf() + // 判断当前数据的startEnd,如果是0则向前和向后都绘制线,如果是1(起点)则只绘制前两个点组成的线,如果是2(终点)则只绘制后两个点组成的线 + if (startEnd == 0 || startEnd == 1) { // 处理向后的线 + val zLevelReference = createZLevelReference(renderEntity) + zLevelReference.properties["type"] = "zlevelLine" +// zLevelReference.properties["name"] = zLevel.toString() + // 根据shpSeqNum获取对应的点位 + if (shpSeqNum < coordinates.size-1) { + val currentCoordinate = coordinates[shpSeqNum] + var nextCoordinate = coordinates[shpSeqNum+1] + // 计算两个点的距离,如果小于指定阈值,程序按照方向计算延长线 +// if (GeometryTools.getDistance(currentCoordinate.y, currentCoordinate.x, nextCoordinate.y, nextCoordinate.x) < 3.0) { + // 获取当前点到下一个点的线方向 + val angle = Angle.angle(currentCoordinate, nextCoordinate) + // 计算偏移距离 + val dx: Double = GeometryTools.convertDistanceToDegree( + 3.0, + currentCoordinate.y!! + ) * Math.cos(angle) + val dy: Double = GeometryTools.convertDistanceToDegree( + 3.0, + currentCoordinate.y!! + ) * Math.sin(angle) + + // 计算偏移后的点 + nextCoordinate = + Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy) +// } + zLevelReference.geometry = GeometryTools.createLineString(arrayListOf(GeoPoint(currentCoordinate.y, currentCoordinate.x), GeoPoint(nextCoordinate.y, nextCoordinate.x))).toString() + + referenceEntityList.add(zLevelReference) + + val zLevelNameReference = createZLevelReference(renderEntity) + zLevelNameReference.properties["type"] = "zlevelName" + zLevelNameReference.properties["name"] = zLevel.toString() + zLevelNameReference.geometry = GeometryTools.createGeometry(GeoPoint(nextCoordinate.y, nextCoordinate.x)).toString() + referenceEntityList.add(zLevelNameReference) + } + } + + if (startEnd == 0 || startEnd == 2) { // 处理向前的线 + val zLevelReference = createZLevelReference(renderEntity) + zLevelReference.properties["type"] = "zlevelLine" +// zLevelReference.properties["name"] = zLevel.toString() + // 根据shpSeqNum获取对应的点位 + if (shpSeqNum < coordinates.size&&shpSeqNum>0) { + val currentCoordinate = coordinates[shpSeqNum] + var preCoordinate = coordinates[shpSeqNum-1] + // 计算两个点的距离,如果小于指定阈值,程序按照方向计算延长线 +// if (GeometryTools.getDistance(currentCoordinate.y, currentCoordinate.x, preCoordinate.y, preCoordinate.x) < 3.0) { + // 获取当前点到下一个点的线方向 + val angle = Angle.angle(currentCoordinate, preCoordinate) + // 计算偏移距离 + val dx: Double = GeometryTools.convertDistanceToDegree( + 3.0, + currentCoordinate.y!! + ) * Math.cos(angle) + val dy: Double = GeometryTools.convertDistanceToDegree( + 3.0, + currentCoordinate.y!! + ) * Math.sin(angle) + + // 计算偏移后的点 + preCoordinate = + Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy) +// } + zLevelReference.geometry = GeometryTools.createLineString(arrayListOf(GeoPoint(currentCoordinate.y, currentCoordinate.x), GeoPoint(preCoordinate.y, preCoordinate.x))).toString() + referenceEntityList.add(zLevelReference) + + val zLevelNameReference = createZLevelReference(renderEntity) + zLevelNameReference.properties["type"] = "zlevelName" + zLevelNameReference.properties["name"] = zLevel.toString() + zLevelNameReference.geometry = GeometryTools.createGeometry(GeoPoint(preCoordinate.y, preCoordinate.x)).toString() + referenceEntityList.add(zLevelNameReference) + } + } + + insertData(referenceEntityList) + // 移除zlevelList,减小原始数据大小 + renderEntity.properties.remove("zlevelList") } - zLevelReference.geometry = - GeometryTools.createGeometry(renderEntity.geometry).toString() - zLevelReference.properties["qi_table"] = renderEntity.table - zLevelReference.properties["type"] = "zlevel" - zLevelReference.properties["ZLevel"] = renderEntity.properties["zLevel"] } } + + private fun createZLevelReference(renderEntity: RenderEntity): ReferenceEntity { + val zLevelReference = ReferenceEntity() + zLevelReference.renderEntityId = renderEntity.id + zLevelReference.name = "${renderEntity.name}参考点" + zLevelReference.code = renderEntity.code + zLevelReference.table = renderEntity.table + zLevelReference.zoomMin = renderEntity.zoomMin + zLevelReference.zoomMax = renderEntity.zoomMax + zLevelReference.taskId = renderEntity.taskId + zLevelReference.enable = renderEntity.enable + + zLevelReference.properties["qi_table"] = renderEntity.table + return zLevelReference + } } \ 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 db29db17..8ddf24ea 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 @@ -182,7 +182,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? // 定位到指定位置 niMapController.mMapView.vtmMap.animator() // .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708 )) - .animateTo(GeoPoint(40.07245537956604,116.239638575623)) + .animateTo(GeoPoint(39.63769191655024, 115.58991663847937)) } R.id.personal_center_menu_open_all_layer -> { diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index bc9bbb97..d201f8c2 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -2059,17 +2059,38 @@ + + + + + + + + + + + + + - - + + - - + - - + + + + + + + diff --git a/collect-library/src/main/assets/omdb/icon_2092_acc_e.svg b/collect-library/src/main/assets/omdb/icon_2092_acc_e.svg new file mode 100644 index 00000000..0dec78b2 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2092_acc_e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2092_acc_s.svg b/collect-library/src/main/assets/omdb/icon_2092_acc_s.svg new file mode 100644 index 00000000..662697c9 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2092_acc_s.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2092_dec_e.svg b/collect-library/src/main/assets/omdb/icon_2092_dec_e.svg new file mode 100644 index 00000000..5657b2cd --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2092_dec_e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2092_dec_s.svg b/collect-library/src/main/assets/omdb/icon_2092_dec_s.svg new file mode 100644 index 00000000..b9f5ec97 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2092_dec_s.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2092_e.svg b/collect-library/src/main/assets/omdb/icon_2092_e.svg deleted file mode 100644 index 96006c66..00000000 --- a/collect-library/src/main/assets/omdb/icon_2092_e.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2092_s.svg b/collect-library/src/main/assets/omdb/icon_2092_s.svg deleted file mode 100644 index 83a60267..00000000 --- a/collect-library/src/main/assets/omdb/icon_2092_s.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vtm b/vtm index 6a6bb9ab..ee88167c 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 6a6bb9ab5eaf6bb4c05b3110c612c32ef4c6ef3d +Subproject commit ee88167c7de989b3f7c71ae00d9580ff91fd3bf6