From 22f52429f4def5591d5c32f3451ed3081f9eb959 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Fri, 26 May 2023 13:46:32 +0800 Subject: [PATCH] =?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 @@ + 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"> - @@ -1818,14 +1818,14 @@ - - - - - + @@ -1874,7 +1874,10 @@ - + + + + \ 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