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..75584da7 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -9,16 +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.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 @@ -102,13 +101,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 +123,172 @@ 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 + } + //遍历判断只显示与任务Link相关的任务数据 + if(currentConfig.checkLinkId){ - // 先查询这个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")) { + if(renderEntity.properties.containsKey("linkPid")){ var currentLinkPid = renderEntity.properties["linkPid"] - task.hadLinkDvoList.forEach { - if (it.linkPid == currentLinkPid) { - renderEntity.enable = 1 - Log.e("qj", "${renderEntity.name}==包括任务link") - return@forEach + if(!currentLinkPid.isNullOrEmpty()&¤tLinkPid!="null"){ + + task.hadLinkDvoList.forEach{ + if(it.linkPid==renderEntity.properties["linkPid"]){ + renderEntity.enable = 1 + 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"] + + if(!currentLinkPid.isNullOrEmpty()&¤tLinkPid!="null"){ + + 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{ + renderEntity.enable = 2 + Log.e("qj", "简单路口") + } + } + }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 2cdbd5d9..cd90dfad 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..e95b98d0 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,70 @@ 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( - taskId: Int, point: GeoPoint, buffer: Double = DEFAULT_BUFFER, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, @@ -101,7 +165,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 +189,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 +197,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 +266,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 +296,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..f786b989 --- /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 LinkList( + 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 7eeea9e7..11131659 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 00e65df0..eb2cec00 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 @@ -20,6 +20,7 @@ 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.handler.MeasureLayerHandler import com.navinfo.omqs.Constant @@ -42,6 +43,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 @@ -398,78 +400,6 @@ class MainActivity : BaseActivity() { supportFragmentManager.beginTransaction() .add(R.id.console_fragment_layout, ConsoleFragment()).commit() } - - initMeasuringTool() - } - - /** - *初始化测量工具栏的点击事件 - */ - - private fun initMeasuringTool() { - val root = binding.mainActivityMeasuringTool.root - root.findViewById(R.id.measuring_tool_select_point) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_close) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_backspace) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_reset) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_distance) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_area) - .setOnClickListener(measuringToolClickListener) - root.findViewById(R.id.measuring_tool_angle) - .setOnClickListener(measuringToolClickListener) - } - - /** - * 测量工具点击事件 - */ - private val measuringToolClickListener = View.OnClickListener { - when (it.id) { - //选点 - R.id.measuring_tool_select_point -> { - viewModel.addPointForMeasuringTool() - } - //关闭 - R.id.measuring_tool_close -> { - measuringToolOff() - } - //上一步 - R.id.measuring_tool_backspace -> { - viewModel.backPointForMeasuringTool() - } - //重绘 - R.id.measuring_tool_reset -> { - viewModel.resetMeasuringTool() - } - //测距 - R.id.measuring_tool_distance -> { - it.isSelected = true - viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.DISTANCE) - val root = binding.mainActivityMeasuringTool.root - root.findViewById(R.id.measuring_tool_area).isSelected = false - root.findViewById(R.id.measuring_tool_angle).isSelected = false - } - //测面积 - R.id.measuring_tool_area -> { - it.isSelected = true - viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.AREA) - val root = binding.mainActivityMeasuringTool.root - root.findViewById(R.id.measuring_tool_distance).isSelected = false - root.findViewById(R.id.measuring_tool_angle).isSelected = false - } - //测角度 - R.id.measuring_tool_angle -> { - it.isSelected = true - viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.ANGLE) - val root = binding.mainActivityMeasuringTool.root - root.findViewById(R.id.measuring_tool_distance).isSelected = false - root.findViewById(R.id.measuring_tool_area).isSelected = false - } - } } /** @@ -513,29 +443,48 @@ class MainActivity : BaseActivity() { binding.mainActivityMeasuringTool.root.visibility = View.GONE } - /** - * 根据输入的经纬度跳转坐标 - */ + //根据输入的经纬度跳转坐标 fun jumpPosition() { val view = this.layoutInflater.inflate(R.layout.dialog_view_edittext, null) val inputDialog = MaterialAlertDialogBuilder( 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() + mapController.markerHandle.removeMarker("location") + 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() @@ -628,7 +577,7 @@ class MainActivity : BaseActivity() { * 点击2\3D */ fun onClick2DOr3D() { - + viewModel.click2Dor3D() } /** @@ -743,8 +692,8 @@ class MainActivity : BaseActivity() { * 点击结束轨迹操作 */ fun mediaFlagOnclick() { -/* viewModel.setMediaFlag(!viewModel.isMediaFlag()) - binding.mainActivitySnapshotMediaFlag.isSelected = viewModel.isMediaFlag()*/ + /* viewModel.setMediaFlag(!viewModel.isMediaFlag()) + binding.mainActivitySnapshotMediaFlag.isSelected = viewModel.isMediaFlag()*/ } /** 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 3aace3e8..84761c47 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 @@ -30,6 +30,7 @@ import com.navinfo.collect.library.map.OnGeoPointClickListener import com.navinfo.collect.library.map.handler.* 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 @@ -289,8 +290,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) } @@ -484,11 +484,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() @@ -1102,5 +1105,74 @@ class MainViewModel @Inject constructor( mapController.measureLayerHandler.clear() } } + + 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) + mapController.markerHandle.addMarker(GeoPoint(y,x),"location") + 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..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 @@ -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) } @@ -435,6 +436,7 @@ class TaskViewModel @Inject constructor( } liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList) mapController.lineHandler.addTaskLink(hadLinkDvoBean) + mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.vtmMap.updateMap(true) } } @@ -488,6 +490,7 @@ class TaskViewModel @Inject constructor( } } } + mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.vtmMap.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 @@ + + + + + + + + + + + + + android:title="版本:ONE_23QE4_V1.2.0_20230811_A" /> diff --git a/collect-library/build.gradle b/collect-library/build.gradle index ca7564d3..73424685 100644 --- a/collect-library/build.gradle +++ b/collect-library/build.gradle @@ -55,6 +55,10 @@ android { } } +realm { + syncEnabled = true +} + //configurations.all { // resolutionStrategy { // force 'com.intellij:annotations:13.0' diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 6d14d464..3c9ad1fd 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1956,15 +1956,15 @@ - - - - - - - - + + + + + + @@ -2036,13 +2036,20 @@ - + + + + + + + + @@ -2072,22 +2079,22 @@ - + - + - + - + - + @@ -2097,10 +2104,6 @@ - - - - diff --git a/collect-library/src/main/assets/navdefault.xml b/collect-library/src/main/assets/navdefault.xml index 62b070c8..8c8de777 100644 --- a/collect-library/src/main/assets/navdefault.xml +++ b/collect-library/src/main/assets/navdefault.xml @@ -1813,5 +1813,4 @@ - 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 5b82b181..c1cd5783 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,8 +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); + 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(); @@ -68,4 +75,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 5afe9ee2..53bcf015 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,7 +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); - 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(); @@ -68,4 +74,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; + } +}