From b3bb83032b4746337e32ab0a5f5e57bc68f815af Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Tue, 22 Aug 2023 13:54:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20omdb=5Fconfig=E5=A2=9E=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=BC=95=E5=85=A53D=20Z=E8=BD=B4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=8D=E5=BC=95?= =?UTF-8?q?=E5=85=A5=EF=BC=8C=E5=A6=82=E6=9E=9C=E5=BC=95=E5=85=A5=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8C=89=E7=85=A73D=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=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 | 33 +++++++++++++++++++ .../com/navinfo/omqs/bean/ImportConfig.kt | 1 + .../com/navinfo/omqs/db/ImportOMDBHelper.kt | 24 ++++++++++++-- .../library/data/entity/RenderEntity.kt | 3 +- .../library/map/source/OMDBDataDecoder.java | 2 +- .../map/source/OMDBReferenceDecoder.java | 2 +- 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 5a0c499c..a44618ba 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -129,6 +129,39 @@ "zoomMax": 20, "transformer2Code": "" }, + "3005":{ + "table": "OMDB_TRAFFIC_SIGN", + "code": 3005, + "name": "交通标牌", + "is3D": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "normalizationTrafficSignHeight()" + },{ + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine('', 0.2)" + } + ] + }, + "3006":{ + "table": "OMDB_POLE", + "code": 3006, + "name": "杆状物", + "is3D": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "normalizationPoleHeight()" + } + ] + }, "3012":{ "table": "OMDB_FILL_AREA", "code": 3012, 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 e58488f2..43adbc9f 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -125,6 +125,7 @@ class TableInfo { val name: String = "" var checked : Boolean = true var transformer: MutableList = mutableListOf() + var is3D : Boolean = false // 是否支持3D,默认情况下都不支持3D,在数据导入阶段会自动抹去Z轴高程信息 } class Transform { diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt index 3460f39c..c098506e 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -12,6 +12,7 @@ import com.google.gson.reflect.TypeToken import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.enums.DataCodeEnum +import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.db.deep.LinkList @@ -23,6 +24,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.withContext +import org.locationtech.jts.geom.Geometry import org.spatialite.database.SQLiteDatabase import java.io.File import javax.inject.Inject @@ -173,8 +175,6 @@ class ImportOMDBHelper @AssistedInject constructor( .toMutableMap() map["qi_table"] = currentConfig.table map["qi_name"] = currentConfig.name - map["qi_code"] = - if (currentConfig.code == 0) currentConfig.code else currentEntry.key map["qi_code"] = if (currentConfig.code == 0) currentConfig.code else currentEntry.key map["qi_zoomMin"] = currentConfig.zoomMin map["qi_zoomMax"] = currentConfig.zoomMax @@ -189,8 +189,26 @@ class ImportOMDBHelper @AssistedInject constructor( renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt() renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt() - // 其他数据插入到Properties中 renderEntity.geometry = map["geometry"].toString() + // 其他数据插入到Properties中 + if (!currentConfig.is3D) { // 如果是非3d要素,则自动将Z轴坐标全部置为0 + val coordinates = renderEntity.wkt?.coordinates?.map { + coordinate -> coordinate.z = 0.0 + coordinate + }?.toTypedArray() + var newGeometry: Geometry? = null + if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POINT) { + newGeometry = GeometryTools.createPoint(coordinates!![0].x, coordinates!![0].y) + } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_LINESTRING) { + newGeometry = GeometryTools.createLineString(coordinates) + } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POLYGON) { + newGeometry = GeometryTools.createLineString(coordinates) + } + if (newGeometry!=null) { + renderEntity.geometry = newGeometry.toString() + } + } + for ((key, value) in map) { when (value) { is String -> renderEntity.properties.put(key, value) 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 df1dc506..c389d360 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 @@ -25,8 +25,7 @@ open class RenderEntity() : RealmObject(), Parcelable { lateinit var name: String //要素名 lateinit var table: String //要素表名 var code: String = "0" // 要素编码 - var geometry: String = - "" // 要素渲染参考的geometry,该数据可能会在导入预处理环节被修改,原始geometry会保存在properties的geometry字段下 + var geometry: String = "" // 要素渲染参考的geometry,该数据可能会在导入预处理环节被修改,原始geometry会保存在properties的geometry字段下 get() { wkt = GeometryTools.createGeometry(field) return field diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java index 08146a9b..892764bb 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java @@ -146,7 +146,7 @@ public class OMDBDataDecoder extends TileDecoder { for (int i = 0; i < length; i++) { // double z = longitudeToX(MercatorProjection.pixelXToLongitudeWithScale(MercatorProjection.metersToPixelsWithScale((float) coordinates[i].z, coordinates[i].y, mTileScale), mTileScale))* mTileScale/8; mMapElement.addPoint((float) ((longitudeToX(coordinates[i].x) - mTileX) * mTileScale), - (float) ((latitudeToY(coordinates[i].y) - mTileY) * mTileScale), 0); + (float) ((latitudeToY(coordinates[i].y) - mTileY) * mTileScale), (float) coordinates[i].z); } // int length = removeLast ? coordinates.length - 1 : coordinates.length; diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java index cc4d43dd..9eedf666 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java @@ -143,7 +143,7 @@ public class OMDBReferenceDecoder extends TileDecoder { // 将Z坐标的米转换为屏幕像素坐标 // double z = longitudeToX(MercatorProjection.pixelXToLongitudeWithScale(MercatorProjection.metersToPixelsWithScale((float) coordinates[i].z, coordinates[i].y, mTileScale), mTileScale))* mTileScale/8; mMapElement.addPoint((float) ((longitudeToX(coordinates[i].x) - mTileX) * mTileScale), - (float) ((latitudeToY(coordinates[i].y) - mTileY) * mTileScale), 0); + (float) ((latitudeToY(coordinates[i].y) - mTileY) * mTileScale), (float) coordinates[i].z); } // int length = removeLast ? coordinates.length - 1 : coordinates.length;