From 57ccf8584b3114efcf6cb1d2d968286fc65b2539 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 10 Aug 2023 10:51:22 +0800 Subject: [PATCH 1/7] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E4=B8=9A=E5=8A=A12.?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=B8=8B=E8=BD=BDomdb=E5=90=8E=E4=B8=8D?= =?UTF-8?q?=E5=8F=8A=E6=97=B6=E6=B8=B2=E6=9F=93=E9=97=AE=E9=A2=983.?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=89=E4=BB=BB=E5=8A=A1=E5=8F=8Alink?= =?UTF-8?q?=E5=85=B3=E8=81=94=E6=B8=B2=E6=9F=93=E4=B8=9A=E5=8A=A14.?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=AD=E5=A2=9E=E5=8A=A0=E6=8C=89=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/assets/omdb_config.json | 78 +++--- .../main/java/com/navinfo/omqs/Constant.kt | 4 +- .../com/navinfo/omqs/db/ImportOMDBHelper.kt | 249 ++++++++++-------- .../com/navinfo/omqs/db/ImportPreProcess.kt | 2 + .../com/navinfo/omqs/db/RealmOperateHelper.kt | 35 ++- .../java/com/navinfo/omqs/db/deep/LinkList.kt | 6 + .../http/taskdownload/TaskDownloadScope.kt | 5 +- .../omqs/ui/activity/map/MainActivity.kt | 51 ++-- .../omqs/ui/activity/map/MainViewModel.kt | 72 ++++- .../omqs/ui/activity/map/SearchEnum.kt | 5 + .../EvaluationResultViewModel.kt | 2 +- .../qsrecordlist/QsRecordListViewModel.kt | 6 +- .../ui/fragment/tasklist/TaskViewModel.kt | 5 +- .../main/res/layout/dialog_view_edittext.xml | 44 ++++ collect-library/build.gradle | 4 + .../src/main/assets/navdefault.xml | 1 - .../library/map/handler/AnimationHandler.kt | 3 + .../map/handler/LayerManagerHandler.kt | 44 +++- .../map/source/OMDBReferenceDataSource.java | 15 +- .../map/source/OMDBReferenceTileSource.java | 16 +- .../map/source/OMDBTileDataSource.java | 17 +- .../library/map/source/OMDBTileSource.java | 16 +- .../library/map/source/RealmDBTileSource.java | 3 + .../collect/library/system/Constant.java | 7 +- .../library/utils/RealmDBParamUtils.java | 13 + 26 files changed, 494 insertions(+), 210 deletions(-) create mode 100644 app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt create mode 100644 app/src/main/java/com/navinfo/omqs/ui/activity/map/SearchEnum.kt create mode 100644 collect-library/src/main/java/com/navinfo/collect/library/utils/RealmDBParamUtils.java diff --git a/app/build.gradle b/app/build.gradle index f6479027..8c735ae7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -80,6 +80,7 @@ android { dependencies { api project(':collect-library') + implementation project(path: ':vtm-android') testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 74dd2ae1..9d2a0bf8 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -4,45 +4,45 @@ "table": "OMDB_CHECKPOINT", "code": 1012, "name": "检查点", - "zoomMin": 16, + "zoomMin": 15, "zoomMax": 19 }, "2001": { "table": "OMDB_RD_LINK", "code": 2001, "name": "道路线", - "zoomMin": 16, + "zoomMin": 15, "zoomMax": 17 }, "2002": { "table": "OMDB_RD_LINK_FUNCTION_CLASS", "code": 2002, "name": "道路功能等级", - "zoomMin": 16, - "zoomMax": 19 + "zoomMin": 15, + "zoomMax": 17 }, "2008": { "table": "OMDB_RD_LINK_KIND", "code": 2008, "name": "道路种别", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 20, "checkLinkId": false }, "2010": { "table": "OMDB_LINK_DIRECT", "code": 2010, "name": "道路方向", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 17, "checkLinkId": false }, "2011": { "table": "OMDB_LINK_NAME", "code": 2011, "name": "道路名", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 17, "checkLinkId": false, "transformer": [ { @@ -58,7 +58,7 @@ "code": 2013, "name": "车道边界类型", "zoomMin": 18, - "zoomMax": 21, + "zoomMax": 20, "checkLinkId": false, "transformer": [ { @@ -73,22 +73,22 @@ "table": "OMDB_LINK_SPEEDLIMIT", "code": 2019, "name": "常规线限速", - "zoomMin": 16, - "zoomMax": 19 + "zoomMin": 15, + "zoomMax": 17 }, "2020": { "table": "OMDB_LINK_SPEEDLIMIT_COND", "code": 2020, "name": "条件线限速", - "zoomMin": 16, - "zoomMax": 19 + "zoomMin": 15, + "zoomMax": 17 }, "2021": { "table": "OMDB_LINK_SPEEDLIMIT_VAR", "code": 2021, "name": "可变线限速", - "zoomMin": 16, - "zoomMax": 19 + "zoomMin": 15, + "zoomMax": 17 }, "2022": { "table": "OMDB_CON_ACCESS", @@ -115,15 +115,15 @@ "code": 2083, "name": "道路边界类型", "zoomMin": 18, - "zoomMax": 21, + "zoomMax": 20, "checkLinkId": false }, "2201":{ "table": "OMDB_BRIDGE", "code": 2201, "name": "桥", - "zoomMin": 16, - "zoomMax": 21, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "geometry", @@ -137,8 +137,8 @@ "table": "OMDB_TUNNEL", "code": 2202, "name": "隧道", - "zoomMin": 16, - "zoomMax": 21, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "geometry", @@ -152,8 +152,8 @@ "table": "OMDB_INTERSECTION", "code": 4001, "name": "路口", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 17, "transformer": [ { "k": "geometry", @@ -167,8 +167,8 @@ "table": "OMDB_SPEEDLIMIT", "code": 4002, "name": "常规点限速", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "maxSpeed", @@ -188,8 +188,8 @@ "table": "OMDB_SPEEDLIMIT_COND", "code": 4003, "name": "条件点限速", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "maxSpeed", @@ -203,8 +203,8 @@ "table": "OMDB_SPEEDLIMIT_VAR", "code": 4004, "name": "可变点限速", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "location", @@ -230,8 +230,8 @@ "table": "OMDB_RESTRICTION", "code": 4006, "name": "普通交限", - "zoomMin": 16, - "zoomMax": 21, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "geometry", @@ -269,8 +269,8 @@ "table": "OMDB_ELECTRONICEYE", "code": 4010, "name": "电子眼", - "zoomMin": 16, - "zoomMax": 21, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ { "k": "geometry", @@ -302,8 +302,8 @@ "table": "OMDB_TRAFFICLIGHT", "code": 4022, "name": "交通灯", - "zoomMin": 16, - "zoomMax": 21, + "zoomMin": 15, + "zoomMax": 20, "transformer": [ ] }, @@ -311,8 +311,8 @@ "table": "OMDB_LANEINFO", "code": 4601, "name": "车信", - "zoomMin": 16, - "zoomMax": 19, + "zoomMin": 15, + "zoomMax": 17, "transformer": [ { "k": "geometry", @@ -339,7 +339,7 @@ "code": 5001, "name": "车道中心线", "zoomMin": 18, - "zoomMax": 21, + "zoomMax": 20, "transformer": [ { "k": "geometry", diff --git a/app/src/main/java/com/navinfo/omqs/Constant.kt b/app/src/main/java/com/navinfo/omqs/Constant.kt index b4042a1f..f7f77cce 100644 --- a/app/src/main/java/com/navinfo/omqs/Constant.kt +++ b/app/src/main/java/com/navinfo/omqs/Constant.kt @@ -65,9 +65,9 @@ class Constant { const val DEBUG = true /** - * 地图最多缩放级别23 + * 地图最多缩放级别20 */ - const val MAX_ZOOM = 22 + const val MAX_ZOOM = 20 /** * 是否自动定位 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 1d357452..29f8a4a5 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -14,6 +14,7 @@ import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.ImportConfig +import com.navinfo.omqs.db.deep.ListList import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory import dagger.assisted.Assisted import dagger.assisted.AssistedInject @@ -102,13 +103,10 @@ class ImportOMDBHelper @AssistedInject constructor( FIELD_TYPE_NULL -> rowMap[columnName] = "" FIELD_TYPE_INTEGER -> rowMap[columnName] = getInt(columnIndex) - FIELD_TYPE_FLOAT -> rowMap[columnName] = getFloat(columnIndex) - FIELD_TYPE_BLOB -> rowMap[columnName] = String(getBlob(columnIndex), Charsets.UTF_8) - else -> rowMap[columnName] = getString(columnIndex) } } @@ -127,132 +125,155 @@ class ImportOMDBHelper @AssistedInject constructor( * @param omdbZipFile omdb数据抽取生成的Zip文件 * @param configFile 对应的配置文件 * */ - suspend fun importOmdbZipFile(omdbZipFile: File, task: TaskBean): Flow = - withContext(Dispatchers.IO) { - val unZipFolder = File(omdbZipFile.parentFile, "result") - flow { - if (unZipFolder.exists()) { - unZipFolder.deleteRecursively() - } - unZipFolder.mkdirs() - // 开始解压zip文件 - val unZipFiles = ZipUtils.unzipFile(omdbZipFile, unZipFolder) - // 将listResult数据插入到Realm数据库中 - val realm = Realm.getDefaultInstance() - realm.beginTransaction() - try { - // 遍历解压后的文件,读取该数据返回 - for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) { - val currentConfig = currentEntry.value - val txtFile = unZipFiles.find { - it.name == currentConfig.table - } + suspend fun importOmdbZipFile(omdbZipFile: File, task: TaskBean): Flow = withContext(Dispatchers.IO) { + val unZipFolder = File(omdbZipFile.parentFile, "result") + flow { + if (unZipFolder.exists()) { + unZipFolder.deleteRecursively() + } + unZipFolder.mkdirs() + // 开始解压zip文件 + val unZipFiles = ZipUtils.unzipFile(omdbZipFile, unZipFolder) + // 将listResult数据插入到Realm数据库中 + val realm = Realm.getDefaultInstance() + realm.beginTransaction() + try { + // 遍历解压后的文件,读取该数据返回 + for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) { + val currentConfig = currentEntry.value + val txtFile = unZipFiles.find { + it.name == currentConfig.table + } - val listResult = mutableListOf() - currentConfig?.let { - val list = FileIOUtils.readFile2List(txtFile, "UTF-8") - Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}") - if (list != null) { - // 将list数据转换为map - for ((index, line) in list.withIndex()) { - if (line == null || line.trim() == "") { - continue + val listResult = mutableListOf() + currentConfig?.let { + val list = FileIOUtils.readFile2List(txtFile, "UTF-8") + Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}") + if (list != null) { + // 将list数据转换为map + for ((index, line) in list.withIndex()) { + if (line == null || line.trim() == "") { + continue + } + Log.d("ImportOMDBHelper", "解析第:${index+1}行") + val map = gson.fromJson>(line, object:TypeToken>(){}.getType()) + .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 + + // 先查询这个mesh下有没有数据,如果有则跳过即可 + // val meshEntity = Realm.getDefaultInstance().where(RenderEntity::class.java).equalTo("properties['mesh']", map["mesh"].toString()).findFirst() + val renderEntity = RenderEntity() + renderEntity.code = map["qi_code"].toString().toInt() + renderEntity.name = map["qi_name"].toString() + renderEntity.table = map["qi_table"].toString() + renderEntity.taskId = task.id + renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt() + renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt() + + // 其他数据插入到Properties中 + renderEntity.geometry = map["geometry"].toString() + for ((key, value) in map) { + when (value) { + is String -> renderEntity.properties.put(key, value) + is Int -> renderEntity.properties.put( + key, + value.toInt().toString() + ) + is Double -> renderEntity.properties.put( + key, + value.toDouble().toString() + ) + else -> renderEntity.properties.put(key, value.toString()) } - Log.d("ImportOMDBHelper", "解析第:${index + 1}行") - val map = gson.fromJson>( - line, - object : TypeToken>() {}.getType() - ) - .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 - - // 先查询这个mesh下有没有数据,如果有则跳过即可 - // val meshEntity = Realm.getDefaultInstance().where(RenderEntity::class.java).equalTo("properties['mesh']", map["mesh"].toString()).findFirst() - val renderEntity = RenderEntity() - renderEntity.code = map["qi_code"].toString().toInt() - renderEntity.name = map["qi_name"].toString() - renderEntity.table = map["qi_table"].toString() - renderEntity.taskId = task.id - renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt() - renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt() - - // 其他数据插入到Properties中 - renderEntity.geometry = map["geometry"].toString() - - for ((key, value) in map) { - when (value) { - - is String -> renderEntity.properties[key] = value - - is Int -> renderEntity.properties[key] = value.toInt().toString() - - is Double -> renderEntity.properties[key] = value.toDouble().toString() - - else -> renderEntity.properties[key] = value.toString() - } - } - - //如果要素不包括linkPid,需要从其他字段获得 - if(!renderEntity.properties.containsKey("linkPid")){ - //交限从进入线获取 - if(renderEntity.properties.containsKey("linkIn")){ - renderEntity.properties["linkPid"]= renderEntity.properties["linkIn"] - } - } - - //遍历判断只显示与任务Link相关的任务数据 - if (currentConfig.checkLinkId && renderEntity.properties.containsKey("linkPid")) { - - var currentLinkPid = renderEntity.properties["linkPid"] - - task.hadLinkDvoList.forEach { - if (it.linkPid == currentLinkPid) { + } + //遍历判断只显示与任务Link相关的任务数据 + if(currentConfig.checkLinkId){ + if(renderEntity.properties.containsKey("linkPid")&&renderEntity.properties["linkPid"]!=null){ + task.hadLinkDvoList.forEach{ + if(it.linkPid==renderEntity.properties["linkPid"]){ renderEntity.enable = 1 - Log.e("qj", "${renderEntity.name}==包括任务link") + Log.e("qj","${renderEntity.name}==包括任务link") return@forEach } } - } else { + }else if(renderEntity.table == "OMDB_RESTRICTION" && renderEntity.properties.containsKey("linkIn")){ + if (renderEntity.properties["linkIn"] != null) { + + var currentLinkPid = renderEntity.properties["linkIn"] + + task.hadLinkDvoList.forEach{ + if(it.linkPid==renderEntity.properties["linkPid"]){ + renderEntity.enable = 1 + Log.e("qj","${renderEntity.name}==包括任务link") + return@forEach + } + } + } + }else if(renderEntity.table == "OMDB_INTERSECTION" &&renderEntity.properties.containsKey("type")&& renderEntity.properties.containsKey("linkList")){ + if (renderEntity.properties["type"]!=null&&renderEntity.properties["linkList"] != null) { + + val type = renderEntity.properties["type"] + + if(type=="1"){ + + if (renderEntity.properties["linkList"] != null) { + + val list: List = gson.fromJson(renderEntity.properties["linkList"], object : TypeToken>() {}.type) + + if (list != null) { + m@for (link in list){ + for(hadLink in task.hadLinkDvoList){ + if (link.featureType == 1 && hadLink.linkPid == link.linkPid) { + renderEntity.enable = 1 + Log.e("qj", "${renderEntity.name}==包括任务link") + break@m + } + } + } + } + } + } + } + }else{ renderEntity.enable = 2 - Log.e("qj", "${renderEntity.name}==不包括任务linkPid") + Log.e("qj","${renderEntity.name}==不包括任务linkPid") } - - listResult.add(renderEntity) - - // 对renderEntity做预处理后再保存 - val resultEntity = importConfig.transformProperties(renderEntity) - - if (resultEntity != null) { - realm.insert(renderEntity) - } - + }else{ + renderEntity.enable = 2 + Log.e("qj","${renderEntity.name}==不包括任务linkPid") + } + listResult.add(renderEntity) + // 对renderEntity做预处理后再保存 + val resultEntity = importConfig.transformProperties(renderEntity) + if (resultEntity != null) { + realm.insert(renderEntity) } } } - // 1个文件发送一次flow流 - emit("${index + 1}/${importConfig.tableMap.size}") - // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 - if (currentConfig.table == "OMDB_RD_LINK") { - importConfig.preProcess.cacheRdLink = - listResult.associateBy { it.properties["linkPid"] } - } } - realm.commitTransaction() - realm.close() - } catch (e: Exception) { - realm.cancelTransaction() - throw e + // 1个文件发送一次flow流 + emit("${index + 1}/${importConfig.tableMap.size}") + // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 + if (currentConfig.table == "OMDB_RD_LINK") { + importConfig.preProcess.cacheRdLink = + listResult.associateBy { it.properties["linkPid"] } + } } - emit("finish") + realm.commitTransaction() + realm.close() + } catch (e: Exception) { + realm.cancelTransaction() + throw e } + emit("finish") } + } // 获取指定数据表的列名 fun getColumns(db: SQLiteDatabase, tableName: String): List { 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 1cdec869..4c5ad593 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -433,6 +433,8 @@ class ImportPreProcess { referenceEntity.renderEntityId = renderEntity.id referenceEntity.name = "${renderEntity.name}参考方向" referenceEntity.table = renderEntity.table + referenceEntity.enable = renderEntity.enable + referenceEntity.taskId = renderEntity.taskId // 与原数据使用相同的geometry referenceEntity.geometry = renderEntity.geometry.toString() referenceEntity.properties["qi_table"] = renderEntity.table diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 69ec2c9e..bde70a57 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -4,11 +4,14 @@ import android.os.Build import android.util.Log import androidx.annotation.RequiresApi import com.navinfo.collect.library.data.entity.HadLinkDvoBean +import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.RenderEntity.Companion.LinkTable import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryToolsKt +import com.navinfo.collect.library.utils.RealmDBParamUtils +import com.navinfo.omqs.bean.QRCodeBean import io.realm.Realm import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -60,7 +63,7 @@ class RealmOperateHelper() { val realmList = realm.where(RenderEntity::class.java) .equalTo("table", "OMDB_RD_LINK") .and() - .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd") + .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd").and().equalTo("taskId",RealmDBParamUtils.getTaskId()) .findAll() // 将获取到的数据和查询的polygon做相交,只返回相交的数据 val dataList = realm.copyFromRealm(realmList) @@ -85,9 +88,7 @@ class RealmOperateHelper() { return result } - suspend fun captureTaskLink( - taskId: Int, point: GeoPoint, buffer: Double = DEFAULT_BUFFER, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, @@ -101,7 +102,7 @@ class RealmOperateHelper() { val realm = Realm.getDefaultInstance() val realmList = realm.where(HadLinkDvoBean::class.java) - .equalTo("taskId", taskId) + .equalTo("taskId",RealmDBParamUtils.getTaskId()) .findAll() var linkBean: HadLinkDvoBean? = null var nearLast: Double = 99999.99 @@ -125,7 +126,7 @@ class RealmOperateHelper() { val realmR = realm.where(RenderEntity::class.java) .equalTo("table", "OMDB_RD_LINK") .and() - .equalTo("properties['${LinkTable.linkPid}']", linkPid) + .equalTo("properties['${LinkTable.linkPid}']", linkPid).and().equalTo("taskId",RealmDBParamUtils.getTaskId()) .findFirst() if (realmR != null) { link = realm.copyFromRealm(realmR) @@ -133,13 +134,31 @@ class RealmOperateHelper() { return link } + /** + * 根据markid查询获取对应数据 + * @param markId + * */ + suspend fun queryQcRecordBean(markId: String): QsRecordBean? { + var qsRecordBean: QsRecordBean? = null + val realm = Realm.getDefaultInstance() + val realmR = realm.where(QsRecordBean::class.java) + .equalTo("table", "QsRecordBean") + .and() + .equalTo("id", markId).and().equalTo("taskId",RealmDBParamUtils.getTaskId()) + .findFirst() + if (realmR != null) { + qsRecordBean = realm.copyFromRealm(realmR) + } + return qsRecordBean + } + suspend fun queryLinkToMutableRenderEntityList(linkPid: String): MutableList? { val resultList = mutableListOf() val realm = Realm.getDefaultInstance() val realmR = realm.where(RenderEntity::class.java) - .equalTo("properties['${LinkTable.linkPid}']", linkPid) + .equalTo("properties['${LinkTable.linkPid}']", linkPid).and().equalTo("taskId",RealmDBParamUtils.getTaskId()) .findAll() val dataList = realm.copyFromRealm(realmR) @@ -184,7 +203,7 @@ class RealmOperateHelper() { val realmList = realm.where(RenderEntity::class.java) .notEqualTo("table", "OMDB_RD_LINK") .and() - .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd") + .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd").and().equalTo("taskId",RealmDBParamUtils.getTaskId()) .findAll() // 将获取到的数据和查询的polygon做相交,只返回相交的数据 val queryResult = realmList?.stream()?.filter { @@ -214,7 +233,7 @@ class RealmOperateHelper() { val realmList = realm.where(RenderEntity::class.java) .notEqualTo("table", "OMDB_RD_LINK") .and() - .equalTo("properties['${LinkTable.linkPid}']", linkPid) + .equalTo("properties['${LinkTable.linkPid}']", linkPid).and().equalTo("taskId",RealmDBParamUtils.getTaskId()) .findAll() result.addAll(realm.copyFromRealm(realmList)) return result diff --git a/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt b/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt new file mode 100644 index 00000000..e7cc83da --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt @@ -0,0 +1,6 @@ +package com.navinfo.omqs.db.deep + +data class ListList( + var featureType: Int = -1, + var linkPid: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index 61d6135b..428c0653 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -1,7 +1,6 @@ package com.navinfo.omqs.http.taskdownload import android.util.Log -import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer @@ -10,10 +9,10 @@ import com.navinfo.omqs.Constant import com.navinfo.omqs.db.ImportOMDBHelper import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus -import com.navinfo.omqs.ui.other.BaseViewHolder import com.navinfo.omqs.util.DateTimeUtil import io.realm.Realm import kotlinx.coroutines.* +import org.oscim.android.theme.AssetsRenderTheme import java.io.File import java.io.IOException import java.io.InputStream @@ -144,7 +143,7 @@ class TaskDownloadScope( if (it == "finish") { change(FileDownloadStatus.DONE) withContext(Dispatchers.Main) { - downloadManager.mapController.mMapView.updateMap(true) + downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer() } } else { change(FileDownloadStatus.IMPORTING, it) 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 63029bb0..c3a6fc33 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 @@ -19,8 +19,8 @@ import androidx.navigation.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.tabs.TabLayout import com.navinfo.collect.library.map.NIMapController -import com.navinfo.collect.library.map.NIMapOptions import com.navinfo.omqs.Constant import com.navinfo.omqs.R import com.navinfo.omqs.bean.ImportConfig @@ -41,6 +41,7 @@ import com.navinfo.omqs.util.FlowEventBus import com.navinfo.omqs.util.SpeakMode import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch +import org.oscim.android.theme.AssetsRenderTheme import org.oscim.core.GeoPoint import org.oscim.renderer.GLViewport import org.videolan.vlc.Util @@ -406,31 +407,49 @@ class MainActivity : BaseActivity() { this ).setTitle("坐标定位").setView(view) val editText = view.findViewById(R.id.dialog_edittext) - editText.hint = "请输入经纬度例如:116.1234567,39.1234567" + val tabItemLayout = view.findViewById(R.id.search_tab_layout) + editText.hint = "请输入LinkPid例如:12345678" + var index:Int = 0 + tabItemLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabReselected(p0: TabLayout.Tab) { + + } + + override fun onTabUnselected(p0: TabLayout.Tab) { + + } + + override fun onTabSelected(p0: TabLayout.Tab) { + index = p0.position + editText.text = null + //清理已绘制线 + mapController.lineHandler.removeLine() + when (p0.position) { + 0 -> editText.hint = "请输入LinkPid例如:12345678" + 1 -> editText.hint = "请输入MarkId例如:123456789" + 2 -> editText.hint = "请输入经纬度例如:116.1234567,39.1234567" + } + } + }) inputDialog.setNegativeButton("取消") { dialog, _ -> dialog.dismiss() } inputDialog.setPositiveButton("确定") { dialog, _ -> if (editText.text.isNotEmpty()) { try { - val parts = editText.text.toString().split("[,,\\s]".toRegex()) - if (parts.size == 2) { - val x = parts[0].toDouble() - val y = parts[1].toDouble() - mapController.animationHandler.animationByLatLon(y, x) - } else { - Toast.makeText(this, "输入格式不正确", Toast.LENGTH_SHORT).show() + when (index) { + 0 -> viewModel.search(SearchEnum.LINK,editText.text.toString(),dialog) + 1 -> viewModel.search(SearchEnum.MARK,editText.text.toString(),dialog) + 2 -> viewModel.search(SearchEnum.LOCATION,editText.text.toString(),dialog) } } catch (e: Exception) { Toast.makeText(this, "输入格式不正确", Toast.LENGTH_SHORT).show() } } - dialog.dismiss() } inputDialog.show() } - override fun onStart() { super.onStart() @@ -512,7 +531,7 @@ class MainActivity : BaseActivity() { * 点击2\3D */ fun onClick2DOr3D() { - + viewModel.click2Dor3D() } /** @@ -627,8 +646,8 @@ class MainActivity : BaseActivity() { * 点击结束轨迹操作 */ fun mediaFlagOnclick() { -/* viewModel.setMediaFlag(!viewModel.isMediaFlag()) - binding.mainActivitySnapshotMediaFlag.isSelected = viewModel.isMediaFlag()*/ + /* viewModel.setMediaFlag(!viewModel.isMediaFlag()) + binding.mainActivitySnapshotMediaFlag.isSelected = viewModel.isMediaFlag()*/ } /** @@ -825,7 +844,7 @@ class MainActivity : BaseActivity() { } } - private fun showMainActivityBottomSheetGroup(){ + private fun showMainActivityBottomSheetGroup() { binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 65) mapController.mMapView.vtmMap.animator().animateTo( @@ -836,7 +855,7 @@ class MainActivity : BaseActivity() { ) } - private fun hideMainActivityBottomSheetGroup(){ + private fun hideMainActivityBottomSheetGroup() { binding.mainActivityBottomSheetGroup.visibility = View.GONE mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 5) mapController.mMapView.vtmMap.animator().animateTo( diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 58602999..f75fa3f1 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -34,6 +34,7 @@ import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener import com.navinfo.collect.library.map.handler.OnTaskLinkItemClickListener import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryToolsKt +import com.navinfo.collect.library.utils.RealmDBParamUtils import com.navinfo.omqs.Constant import com.navinfo.omqs.R import com.navinfo.omqs.bean.ImportConfig @@ -280,8 +281,7 @@ class MainViewModel @Inject constructor( initNILocationData() } sharedPreferences.registerOnSharedPreferenceChangeListener(this) - com.navinfo.collect.library.system.Constant.TASK_ID = - sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) + RealmDBParamUtils.setTaskId(sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)) socketServer = SocketServer(mapController, traceDataBase, sharedPreferences) } @@ -1053,5 +1053,73 @@ class MainViewModel @Inject constructor( fun cancelTrace() { timer?.cancel() } + + fun click2Dor3D(){ + viewModelScope.launch(Dispatchers.IO) { + Log.e( + "qj", + "${ + Realm.getDefaultInstance().where(RenderEntity::class.java).findAll().size + }==安装数量" + ) + } + } + + /** + * 搜索接口 + * @param searchEnum 枚举类 + * @param msg 搜索内容 + */ + fun search(searchEnum: SearchEnum,msg:String,dialog:DialogInterface){ + if(searchEnum!=null&&msg.isNotEmpty()&&dialog!=null){ + when (searchEnum) { + SearchEnum.LINK -> { + viewModelScope.launch(Dispatchers.IO) { + val link = realmOperateHelper.queryLink(linkPid = msg) + if(link!=null){ + link?.let { l -> + mapController.lineHandler.showLine(l.geometry) + dialog.dismiss() + } + }else{ + withContext(Dispatchers.Main){ + Toast.makeText(mapController.mMapView.context, "未查询到数据", Toast.LENGTH_SHORT).show() + } + } + } + } + SearchEnum.MARK -> { + viewModelScope.launch(Dispatchers.IO) { + val qsRecordBean = realmOperateHelper.queryQcRecordBean(markId = msg) + if(qsRecordBean!=null){ + qsRecordBean?.let { l -> + val naviController = (mapController.mMapView.context as Activity).findNavController(R.id.main_activity_right_fragment) + val bundle = Bundle() + bundle.putString("QsId", l.id) + naviController.navigate(R.id.EvaluationResultFragment, bundle) + ToastUtils.showLong(l.classType) + dialog.dismiss() + } + }else{ + withContext(Dispatchers.Main){ + Toast.makeText(mapController.mMapView.context, "未查询到数据", Toast.LENGTH_SHORT).show() + } + } + } + } + SearchEnum.LOCATION -> { + val parts = msg.split("[,,\\s]".toRegex()) + if (parts.size == 2) { + val x = parts[0].toDouble() + val y = parts[1].toDouble() + mapController.animationHandler.animationByLatLon(y, x) + dialog.dismiss() + } else { + Toast.makeText(mapController.mMapView.context, "输入格式不正确", Toast.LENGTH_SHORT).show() + } + } + } + } + } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SearchEnum.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SearchEnum.kt new file mode 100644 index 00000000..493dc623 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SearchEnum.kt @@ -0,0 +1,5 @@ +package com.navinfo.omqs.ui.activity.map + +enum class SearchEnum { + LINK,LOCATION,MARK +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 8f4d0c88..a7a7add1 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -220,7 +220,7 @@ class EvaluationResultViewModel @Inject constructor( liveDataQsRecordBean.value?.let { val taskLink = - realmOperateHelper.captureTaskLink(liveDataTaskBean.value!!.id, point) + realmOperateHelper.captureTaskLink(point) if (taskLink != null) { it.linkId = taskLink.linkPid mapController.lineHandler.showLine(taskLink.geometry) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt index 29b1eb39..883081b7 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt @@ -1,6 +1,7 @@ package com.navinfo.omqs.ui.fragment.qsrecordlist import android.content.Context +import android.content.SharedPreferences import android.os.Bundle import android.util.Log import androidx.lifecycle.MutableLiveData @@ -9,6 +10,7 @@ import androidx.lifecycle.viewModelScope import androidx.navigation.findNavController import com.blankj.utilcode.util.ToastUtils import com.navinfo.collect.library.data.entity.QsRecordBean +import com.navinfo.omqs.Constant import com.navinfo.omqs.R import com.navinfo.omqs.ui.activity.map.MainActivity import dagger.hilt.android.lifecycle.HiltViewModel @@ -19,14 +21,16 @@ import javax.inject.Inject @HiltViewModel class QsRecordListViewModel @Inject constructor( + private val sharedPreferences: SharedPreferences ) : ViewModel() { val liveDataQSList = MutableLiveData>() fun getList(context: Context) { viewModelScope.launch(Dispatchers.IO) { + val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) val realm = Realm.getDefaultInstance() - val objects = realm.where(QsRecordBean::class.java).findAll() + val objects = realm.where(QsRecordBean::class.java).equalTo("taskId",taskId).findAll() liveDataQSList.postValue(realm.copyFromRealm(objects)) } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index 81e646eb..5205c7f3 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -16,6 +16,7 @@ import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.OnGeoPointClickListener import com.navinfo.collect.library.utils.GeometryTools +import com.navinfo.collect.library.utils.RealmDBParamUtils import com.navinfo.omqs.Constant import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.http.NetworkService @@ -141,8 +142,8 @@ class TaskViewModel @Inject constructor( liveDataTaskLinks.value = taskBean.hadLinkDvoList showTaskLinks(taskBean) - com.navinfo.collect.library.system.Constant.TASK_ID = taskBean.id - mapController.layerManagerHandler.omdbLayersClear() + RealmDBParamUtils.setTaskId(taskBean.id) + mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.updateMap(true) } diff --git a/app/src/main/res/layout/dialog_view_edittext.xml b/app/src/main/res/layout/dialog_view_edittext.xml index b62a6026..02eda459 100644 --- a/app/src/main/res/layout/dialog_view_edittext.xml +++ b/app/src/main/res/layout/dialog_view_edittext.xml @@ -1,10 +1,54 @@ + + + + + + + + + + + + - diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/AnimationHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/AnimationHandler.kt index 645cc350..c8ddd423 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/AnimationHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/AnimationHandler.kt @@ -1,7 +1,10 @@ package com.navinfo.collect.library.map.handler +import android.util.Log import androidx.appcompat.app.AppCompatActivity +import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.map.NIMapView +import io.realm.Realm import org.oscim.core.BoundingBox import org.oscim.core.GeoPoint import org.oscim.core.MapPosition diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt index 4e47ae87..fbf22a22 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt @@ -1,14 +1,18 @@ package com.navinfo.collect.library.map.handler +import android.util.Log import androidx.appcompat.app.AppCompatActivity +import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.map.NIMapView import com.navinfo.collect.library.map.source.MapLifeNiLocationTileSource import com.navinfo.collect.library.map.source.NavinfoMultiMapFileTileSource import com.navinfo.collect.library.map.source.OMDBReferenceTileSource import com.navinfo.collect.library.map.source.OMDBTileSource import com.navinfo.collect.library.system.Constant +import io.realm.Realm import okhttp3.Cache import okhttp3.OkHttpClient +import org.oscim.android.theme.AssetsRenderTheme import org.oscim.layers.GroupLayer import org.oscim.layers.tile.buildings.BuildingLayer import org.oscim.layers.tile.vector.VectorTileLayer @@ -131,6 +135,39 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP if (omdbLabelLayer != null) { addLayer(omdbLabelLayer, NIMapView.LAYER_GROUPS.LABEL) } + } + + private fun resetOMDBVectorTileLayer() { + + if (omdbReferenceTileLayer != null) { + removeLayer(omdbReferenceTileLayer) + } + + if (omdbReferenceLabelLayer != null) { + removeLayer(omdbReferenceLabelLayer) + } + + if (omdbVectorTileLayer != null) { + removeLayer(omdbVectorTileLayer) + } + if (omdbLabelLayer != null) { + removeLayer(omdbLabelLayer) + } + + mMapView.vtmMap.updateMap(true) + + Log.e("qj", "重新加载") + } + + public fun updateOMDBVectorTileLayer(){ + + omdbTileSource.update() + + omdbReferenceTileSource.update() + + mMapView.vtmMap.setTheme(AssetsRenderTheme(mMapView.context.assets, "", "editormarker.xml"), true) + + mMapView.vtmMap.updateMap(true) } @@ -215,13 +252,6 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP vectorNiLocationTileLayer.isEnabled = false labelNiLocationLayer.isEnabled = false } - - fun omdbLayersClear(){ -// omdbVectorTileLayer. -// omdbReferenceTileLayer. - omdbLabelLayer.clearLabels() - omdbReferenceLabelLayer.clearLabels() - } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java index 6b8d6c64..3784e991 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java @@ -7,6 +7,7 @@ import androidx.annotation.RequiresApi; import com.navinfo.collect.library.data.entity.ReferenceEntity; import com.navinfo.collect.library.system.Constant; +import com.navinfo.collect.library.utils.RealmDBParamUtils; import org.oscim.layers.tile.MapTile; import org.oscim.tiling.ITileDataSink; @@ -19,6 +20,8 @@ import io.realm.Realm; import io.realm.RealmQuery; public class OMDBReferenceDataSource implements ITileDataSource { + private boolean isUpdate; + private final ThreadLocal mThreadLocalDecoders = new ThreadLocal() { @Override protected OMDBReferenceDecoder initialValue() { @@ -36,9 +39,12 @@ public class OMDBReferenceDataSource implements ITileDataSource { int xEnd = (int) ((tile.tileX + 1) << m); int yStart = (int) tile.tileY << m; int yEnd = (int) ((tile.tileY + 1) << m); - Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd); + if(isUpdate){ + Realm.getDefaultInstance().refresh(); + isUpdate = false; + } RealmQuery realmQuery = Realm.getDefaultInstance().where(ReferenceEntity.class) - .rawPredicate("taskId=" + Constant.TASK_ID + " and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1"); + .rawPredicate("taskId="+RealmDBParamUtils.getTaskId() +" and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1" ); // 筛选不显示的数据 if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { realmQuery.beginGroup(); @@ -70,4 +76,9 @@ public class OMDBReferenceDataSource implements ITileDataSource { Realm.getDefaultInstance().cancelTransaction(); } } + + public void update(){ + isUpdate = true; + Log.e("qj",Thread.currentThread().getName()); + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java index ba4d8f8d..183b3213 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java @@ -1,17 +1,23 @@ package com.navinfo.collect.library.map.source; +import android.util.Log; + +import com.navinfo.collect.library.data.entity.RenderEntity; import com.navinfo.collect.library.system.Constant; import org.oscim.tiling.ITileDataSource; import org.oscim.tiling.OverzoomTileDataSource; import org.oscim.tiling.TileSource; -public class OMDBReferenceTileSource extends TileSource { +import io.realm.Realm; + +public class OMDBReferenceTileSource extends RealmDBTileSource { + private OMDBReferenceDataSource omdbReferenceTileSource = new OMDBReferenceDataSource(); @Override public ITileDataSource getDataSource() { //return new OverzoomTileDataSource(new OMDBReferenceDataSource(), Constant.OVER_ZOOM); - return new OMDBReferenceDataSource(); + return omdbReferenceTileSource; } @Override @@ -23,4 +29,10 @@ public class OMDBReferenceTileSource extends TileSource { public void close() { } + + @Override + public void update() { + super.update(); + omdbReferenceTileSource.update(); + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java index 0a37ab79..34c81ada 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java @@ -9,6 +9,7 @@ import com.navinfo.collect.library.data.RealmUtils; import com.navinfo.collect.library.data.entity.GeometryFeatureEntity; import com.navinfo.collect.library.data.entity.RenderEntity; import com.navinfo.collect.library.system.Constant; +import com.navinfo.collect.library.utils.RealmDBParamUtils; import org.oscim.layers.tile.MapTile; import org.oscim.tiling.ITileDataSink; @@ -21,6 +22,7 @@ import io.realm.Realm; import io.realm.RealmQuery; public class OMDBTileDataSource implements ITileDataSource { + private boolean isUpdate; private final ThreadLocal mThreadLocalDecoders = new ThreadLocal() { @Override protected OMDBDataDecoder initialValue() { @@ -38,8 +40,11 @@ public class OMDBTileDataSource implements ITileDataSource { int xEnd = (int) ((tile.tileX + 1) << m); int yStart = (int) tile.tileY << m; int yEnd = (int) ((tile.tileY + 1) << m); - Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd); - RealmQuery realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate("tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1"); + if(isUpdate){ + Realm.getDefaultInstance().refresh(); + isUpdate = false; + } + RealmQuery realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate("taskId ="+RealmDBParamUtils.getTaskId() +" and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1"); // 筛选不显示的数据 if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { realmQuery.beginGroup(); @@ -53,9 +58,8 @@ public class OMDBTileDataSource implements ITileDataSource { Log.e("qj", "查询数据==" + listResult.size() + "==地图级别" + tile.zoomLevel); mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, listResult); } - Log.e("jingo",listResult.size() + "条数据 主"); + Log.e("jingo", listResult.size() + "条数据 主"); mapDataSink.completed(QueryResult.SUCCESS); -// Log.d("RealmDBTileDataSource", "tile:"+tile.getBoundingBox().toString()); } else { mapDataSink.completed(QueryResult.SUCCESS); } @@ -72,4 +76,9 @@ public class OMDBTileDataSource implements ITileDataSource { Realm.getDefaultInstance().cancelTransaction(); } } + + public void update(){ + isUpdate = true; + Log.e("qj",Thread.currentThread().getName()); + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java index 811e5d52..752b839c 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java @@ -1,21 +1,27 @@ package com.navinfo.collect.library.map.source; +import android.util.Log; + +import com.navinfo.collect.library.data.entity.RenderEntity; import com.navinfo.collect.library.system.Constant; import org.oscim.tiling.ITileDataSource; import org.oscim.tiling.OverzoomTileDataSource; import org.oscim.tiling.TileSource; -public class OMDBTileSource extends TileSource { +import io.realm.Realm; +public class OMDBTileSource extends RealmDBTileSource { + private OMDBTileDataSource omdbTileSource = new OMDBTileDataSource(); @Override public ITileDataSource getDataSource() { // return new OverzoomTileDataSource(new OMDBTileDataSource(), Constant.OVER_ZOOM); - return new OMDBTileDataSource(); + return omdbTileSource; } @Override public OpenResult open() { + Log.d("qj", Realm.getDefaultInstance().where(RenderEntity.class).findAll().size()+"open安装数量"); return OpenResult.SUCCESS; } @@ -23,4 +29,10 @@ public class OMDBTileSource extends TileSource { public void close() { } + + @Override + public void update() { + super.update(); + omdbTileSource.update(); + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileSource.java index 617f9300..40ceb9f0 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileSource.java @@ -25,4 +25,7 @@ public class RealmDBTileSource extends TileSource { public void close() { } + + public void update(){ + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java index 18f6d962..60ece1cd 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java @@ -30,11 +30,10 @@ public class Constant { } public static String[] HAD_LAYER_INVISIABLE_ARRAY; - public static final int OVER_ZOOM = 22; - public static final int MAX_ZOOM = 22; - public static final int OMDB_MIN_ZOOM = 16; + public static final int OVER_ZOOM = 20; + public static final int MAX_ZOOM = 20; + public static final int OMDB_MIN_ZOOM = 15; - public static int TASK_ID = -1; /** * 服务器地址 */ diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/RealmDBParamUtils.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/RealmDBParamUtils.java new file mode 100644 index 00000000..d2b6a904 --- /dev/null +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/RealmDBParamUtils.java @@ -0,0 +1,13 @@ +package com.navinfo.collect.library.utils; + +public class RealmDBParamUtils { + private static int mtaskId = -1; + + public static int getTaskId() { + return mtaskId; + } + + public static void setTaskId(int taskId) { + mtaskId = taskId; + } +} From af4baf80b541b1c35d4f231fa16bf59765c40823 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 10 Aug 2023 13:37:39 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=AF=E5=8F=A3?= =?UTF-8?q?=E8=A6=81=E7=B4=A0=E6=8C=89=E4=BB=BB=E5=8A=A1link=E6=B8=B2?= =?UTF-8?q?=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/navinfo/omqs/db/ImportOMDBHelper.kt | 70 +++++++++++-------- .../java/com/navinfo/omqs/db/deep/LinkList.kt | 2 +- .../src/main/assets/editormarker.xml | 16 ++--- vtm | 2 +- 4 files changed, 52 insertions(+), 38 deletions(-) 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 29f8a4a5..47e8e4c0 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -9,17 +9,15 @@ import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.ZipUtils import com.google.gson.Gson import com.google.gson.reflect.TypeToken -import com.navinfo.collect.library.data.entity.ReferenceEntity import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.ImportConfig -import com.navinfo.omqs.db.deep.ListList +import com.navinfo.omqs.db.deep.LinkList import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.realm.Realm -import io.realm.RealmQuery import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -194,18 +192,12 @@ class ImportOMDBHelper @AssistedInject constructor( } //遍历判断只显示与任务Link相关的任务数据 if(currentConfig.checkLinkId){ - if(renderEntity.properties.containsKey("linkPid")&&renderEntity.properties["linkPid"]!=null){ - task.hadLinkDvoList.forEach{ - if(it.linkPid==renderEntity.properties["linkPid"]){ - renderEntity.enable = 1 - Log.e("qj","${renderEntity.name}==包括任务link") - return@forEach - } - } - }else if(renderEntity.table == "OMDB_RESTRICTION" && renderEntity.properties.containsKey("linkIn")){ - if (renderEntity.properties["linkIn"] != null) { - var currentLinkPid = renderEntity.properties["linkIn"] + if(renderEntity.properties.containsKey("linkPid")){ + + var currentLinkPid = renderEntity.properties["linkPid"] + + if(!currentLinkPid.isNullOrEmpty()&¤tLinkPid!="null"){ task.hadLinkDvoList.forEach{ if(it.linkPid==renderEntity.properties["linkPid"]){ @@ -215,29 +207,51 @@ class ImportOMDBHelper @AssistedInject constructor( } } } - }else if(renderEntity.table == "OMDB_INTERSECTION" &&renderEntity.properties.containsKey("type")&& renderEntity.properties.containsKey("linkList")){ - if (renderEntity.properties["type"]!=null&&renderEntity.properties["linkList"] != null) { - val type = renderEntity.properties["type"] + }else if(renderEntity.table == "OMDB_RESTRICTION" && renderEntity.properties.containsKey("linkIn")){ - if(type=="1"){ + if (renderEntity.properties["linkIn"] != null) { - if (renderEntity.properties["linkList"] != null) { + var currentLinkPid = renderEntity.properties["linkIn"] - val list: List = gson.fromJson(renderEntity.properties["linkList"], object : TypeToken>() {}.type) + if(!currentLinkPid.isNullOrEmpty()&¤tLinkPid!="null"){ - if (list != null) { - m@for (link in list){ - for(hadLink in task.hadLinkDvoList){ - if (link.featureType == 1 && hadLink.linkPid == link.linkPid) { - renderEntity.enable = 1 - Log.e("qj", "${renderEntity.name}==包括任务link") - break@m - } + task.hadLinkDvoList.forEach{ + if(it.linkPid==currentLinkPid){ + renderEntity.enable = 1 + Log.e("qj","${renderEntity.name}==包括任务link") + return@forEach + } + } + } + } + }else if(renderEntity.table == "OMDB_INTERSECTION" && renderEntity.properties.containsKey("linkList")){ + + if (renderEntity.properties["linkList"] != null) { + + Log.e("qj", "linkList==开始${renderEntity.name}==${renderEntity.properties["linkList"]}}") + + val linkList = renderEntity.properties["linkList"] + + if (!linkList.isNullOrEmpty()&&linkList!="null") { + + Log.e("qj", "linkList==${renderEntity.name}==${renderEntity.properties["linkList"]}}") + + val list: List = gson.fromJson(linkList, object : TypeToken>() {}.type) + + if (list != null) { + m@for (link in list){ + for(hadLink in task.hadLinkDvoList){ + if (hadLink.linkPid == link.linkPid) { + renderEntity.enable = 1 + Log.e("qj", "${renderEntity.name}==包括任务link==${renderEntity.geometry}") + break@m } } } } + }else{ + Log.e("qj", "linkList==$linkList}") } } }else{ diff --git a/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt b/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt index e7cc83da..f786b989 100644 --- a/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt +++ b/app/src/main/java/com/navinfo/omqs/db/deep/LinkList.kt @@ -1,6 +1,6 @@ package com.navinfo.omqs.db.deep -data class ListList( +data class LinkList( var featureType: Int = -1, var linkPid: String = "" ) \ No newline at end of file diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 6d14d464..5032ca36 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1956,15 +1956,15 @@ - - - - - - - - + + + + + + diff --git a/vtm b/vtm index 58f23103..8717b07e 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 58f231037c44ccc1c82d00818c402a2894ca4e09 +Subproject commit 8717b07ebff4dd61226abb19474be6567a736ad8 From 8d7c6036f1ade8593aa7d929ae7201217e913c46 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 10 Aug 2023 13:43:36 +0800 Subject: [PATCH 3/7] merge code --- .../main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt | 1 + .../main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt | 2 ++ 2 files changed, 3 insertions(+) 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 c3a6fc33..e8a995d8 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 @@ -424,6 +424,7 @@ class MainActivity : BaseActivity() { editText.text = null //清理已绘制线 mapController.lineHandler.removeLine() + mapController.markerHandle.removeMarker("location") when (p0.position) { 0 -> editText.hint = "请输入LinkPid例如:12345678" 1 -> editText.hint = "请输入MarkId例如:123456789" diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index f75fa3f1..143f8379 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -583,6 +583,7 @@ class MainViewModel @Inject constructor( * 点击我的位置,回到我的位置 */ fun onClickLocationButton() { + mapController.markerHandle.removeMarker("location") mapController.locationLayerHandler.animateToCurrentPosition() } @@ -1113,6 +1114,7 @@ class MainViewModel @Inject constructor( val x = parts[0].toDouble() val y = parts[1].toDouble() mapController.animationHandler.animationByLatLon(y, x) + mapController.markerHandle.addMarker(GeoPoint(y,x),"location") dialog.dismiss() } else { Toast.makeText(mapController.mMapView.context, "输入格式不正确", Toast.LENGTH_SHORT).show() From 311823cc6ab79b3bb22dc7a230a2dc279ce3dd88 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 10 Aug 2023 13:49:59 +0800 Subject: [PATCH 4/7] merge code --- .../java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index 5205c7f3..7e9e47ec 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -436,6 +436,7 @@ class TaskViewModel @Inject constructor( } liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList) mapController.lineHandler.addTaskLink(hadLinkDvoBean) + mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.vtmMap.updateMap(true) } } @@ -489,6 +490,7 @@ class TaskViewModel @Inject constructor( } } } + mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.vtmMap.updateMap(true) } From 061aca96ab3cda56a50aebb9634e99359a38e6f5 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Fri, 11 Aug 2023 09:49:45 +0800 Subject: [PATCH 5/7] merge code --- .../com/navinfo/omqs/db/RealmOperateHelper.kt | 63 +++++++++++++++++++ .../omqs/ui/activity/map/MainViewModel.kt | 7 ++- .../main/res/menu/personal_center_menu.xml | 2 +- .../src/main/assets/editormarker.xml | 23 ++++--- 4 files changed, 82 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index bde70a57..e95b98d0 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -88,6 +88,69 @@ class RealmOperateHelper() { return result } + /** + * 根据当前点位查询匹配的Link数据 + * @param point 点位经纬度信息 + * @param buffer 点位的外扩距离 + * @param bufferType 点位外扩距离的单位: 米-Meter,像素-PIXEL + * @param sort 是否需要排序 + * */ + @RequiresApi(Build.VERSION_CODES.N) + suspend fun queryLine( + point: GeoPoint, + buffer: Double = DEFAULT_BUFFER, + bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, + table: String, + sort: Boolean = true + ): MutableList { + val result = mutableListOf() + val polygon = getPolygonFromPoint( + GeometryTools.createPoint(point.longitude, point.latitude), + buffer, + bufferType + ) + // 根据polygon查询相交的tile号 + val tileXSet = mutableSetOf() + + GeometryToolsKt.getTileXByGeometry(polygon.toString(), tileXSet) + val tileYSet = mutableSetOf() + GeometryToolsKt.getTileYByGeometry(polygon.toString(), tileYSet) + + // 对tileXSet和tileYSet查询最大最小值 + val xStart = tileXSet.stream().min(Comparator.naturalOrder()).orElse(null) + val xEnd = tileXSet.stream().max(Comparator.naturalOrder()).orElse(null) + val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) + val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) + // 查询realm中对应tile号的数据 + val realm = Realm.getDefaultInstance() + val realmList = realm.where(RenderEntity::class.java) + .equalTo("table", table) + .and() + .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd").and().equalTo("taskId",RealmDBParamUtils.getTaskId()) + .findAll() + // 将获取到的数据和查询的polygon做相交,只返回相交的数据 + val dataList = realm.copyFromRealm(realmList) + val queryResult = dataList?.stream()?.filter { + polygon.intersects(it.wkt) + }?.toList() + + queryResult?.let { + if (sort) { + result.addAll( + sortRenderEntity( + GeometryTools.createPoint( + point.longitude, + point.latitude + ), it + ) + ) + } else { + result.addAll(it) + } + } + return result + } + suspend fun captureTaskLink( point: GeoPoint, buffer: Double = DEFAULT_BUFFER, diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 143f8379..ca889bfa 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -475,11 +475,14 @@ class MainViewModel @Inject constructor( captureLinkState = true if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val linkList = realmOperateHelper.queryLink( +/* val linkList = realmOperateHelper.queryLink( point = point, - ) + )*/ + + val linkList = realmOperateHelper.queryLine(point = point, buffer = 2.5, table = "OMDB_LANE_MARK_BOUNDARYTYPE") var hisRoadName = false + if (linkList.isNotEmpty()) { //看板数据 val signList = mutableListOf() diff --git a/app/src/main/res/menu/personal_center_menu.xml b/app/src/main/res/menu/personal_center_menu.xml index 6df98415..99d24333 100644 --- a/app/src/main/res/menu/personal_center_menu.xml +++ b/app/src/main/res/menu/personal_center_menu.xml @@ -38,7 +38,7 @@ + android:title="版本:ONE_23QE4_V1.2.0_20230811_A" /> diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 5032ca36..3c9ad1fd 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -2036,13 +2036,20 @@ - + + + + + + + + @@ -2072,22 +2079,22 @@ - + - + - + - + - + @@ -2097,10 +2104,6 @@ - - - - From dcca1d50ea06cf09bab396304e9adffdf6ff4c5a Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Fri, 11 Aug 2023 10:27:35 +0800 Subject: [PATCH 6/7] merge code --- .../omqs/ui/activity/map/MainActivity.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) 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 7d0d249e..ae5acaa1 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 @@ -402,6 +402,47 @@ class MainActivity : BaseActivity() { } } + /** + * 开始测量 + */ + private fun measuringToolOn() { + val root = binding.mainActivityMeasuringTool.root + val valueView = root.findViewById(R.id.measuring_tool_value) + val unitView = root.findViewById(R.id.measuring_tool_value_unit) + val centerTextView = binding.mainActivityHomeCenterText + //监听测距值 + mapController.measureLayerHandler.measureValueLiveData.observe(this) { + valueView.text = it.valueString + unitView.text = it.unit + } + mapController.measureLayerHandler.tempMeasureValueLiveData.observe(this) + { + centerTextView.text = "${it.valueString}${it.unit}" + } + viewModel.setMeasuringToolEnable(true) + binding.mainActivityHomeCenter.visibility = View.VISIBLE + binding.mainActivityHomeCenterText.visibility = View.VISIBLE + viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.DISTANCE) + root.visibility = View.VISIBLE + root.findViewById(R.id.measuring_tool_distance).isSelected = true + root.findViewById(R.id.measuring_tool_area).isSelected = false + root.findViewById(R.id.measuring_tool_angle).isSelected = false + } + + + /** + * 结束测量 + */ + fun measuringToolOff() { + //监听测距值 + mapController.measureLayerHandler.measureValueLiveData.removeObservers(this) + mapController.measureLayerHandler.tempMeasureValueLiveData.removeObservers(this) + viewModel.setMeasuringToolEnable(false) + binding.mainActivityHomeCenter.visibility = View.GONE + binding.mainActivityHomeCenterText.visibility = View.GONE + binding.mainActivityMeasuringTool.root.visibility = View.GONE + } + //根据输入的经纬度跳转坐标 fun jumpPosition() { val view = this.layoutInflater.inflate(R.layout.dialog_view_edittext, null) From dfcc1ca0e723af1604a1bc39cd4c6119cc28ccc8 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Fri, 11 Aug 2023 14:20:26 +0800 Subject: [PATCH 7/7] merge code --- app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 47e8e4c0..75584da7 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -251,7 +251,8 @@ class ImportOMDBHelper @AssistedInject constructor( } } }else{ - Log.e("qj", "linkList==$linkList}") + renderEntity.enable = 2 + Log.e("qj", "简单路口") } } }else{