diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 1095b5cd..4e325a3d 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -31,6 +31,7 @@ "name": "道路线", "zoomMin": 15, "zoomMax": 17, + "catch":false, "checkLinkId": false }, "2002": { 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 e817af7a..f1c962cc 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -9,6 +9,7 @@ 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.HadLinkDvoBean import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.enums.DataCodeEnum @@ -111,10 +112,13 @@ 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) } } @@ -133,361 +137,511 @@ 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() - // 先获取当前配置的所有图层的个数,方便后续计算数据解析进度 - var tableNum = 0 - var processIndex = 0 - for (importConfig in importConfigList) { - tableNum += importConfig.tableMap.size - } + 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) + + // 先获取当前配置的所有图层的个数,方便后续计算数据解析进度 + var tableNum = 0 + var processIndex = 0 + for (importConfig in importConfigList) { + tableNum += importConfig.tableMap.size + } + + + //缓存任务link信息,便于下面与数据进行任务link匹配 + val hashMap: HashMap = + HashMap() //define empty hashmap + task.hadLinkDvoList.forEach { + hashMap.put(it.linkPid, it); + } + + val resHashMap: HashMap = + HashMap() //define empty hashmap - realm.beginTransaction() - try { // 遍历解压后的文件,读取该数据返回 for (importConfig in importConfigList) { - 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 - } - 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_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() - 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() - - renderEntity.geometry = map["geometry"].toString() - // 其他数据插入到Properties中 - if (!currentConfig.is3D) { // 如果是非3d要素,则自动将Z轴坐标全部置为0 - val coordinates = renderEntity.wkt?.coordinates?.map { - coordinate -> coordinate.z = 0.0 - coordinate - }?.toTypedArray() - var newGeometry: Geometry? = null - if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POINT) { - newGeometry = GeometryTools.createPoint(coordinates!![0].x, coordinates!![0].y) - } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_LINESTRING) { - newGeometry = GeometryTools.createLineString(coordinates) - } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POLYGON) { - newGeometry = GeometryTools.createLineString(coordinates) + try { + for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) { + val currentConfig = currentEntry.value + val txtFile = unZipFiles.find { + it.name == currentConfig.table + } + // 将listResult数据插入到Realm数据库中 + val realm = Realm.getDefaultInstance() + 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 } - if (newGeometry!=null) { - renderEntity.geometry = newGeometry.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_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() + 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() + + renderEntity.geometry = map["geometry"].toString() + // 其他数据插入到Properties中 + if (!currentConfig.is3D) { // 如果是非3d要素,则自动将Z轴坐标全部置为0 + val coordinates = + renderEntity.wkt?.coordinates?.map { coordinate -> + coordinate.z = 0.0 + coordinate + }?.toTypedArray() + var newGeometry: Geometry? = null + if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POINT) { + newGeometry = GeometryTools.createPoint( + coordinates!![0].x, + coordinates!![0].y + ) + } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_LINESTRING) { + newGeometry = + GeometryTools.createLineString(coordinates) + } else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POLYGON) { + newGeometry = + GeometryTools.createLineString(coordinates) + } + if (newGeometry != null) { + renderEntity.geometry = newGeometry.toString() + } } - } - for ((key, value) in map) { - when (value) { - is String -> renderEntity.properties.put(key, value) - 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()) + 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() + ) + } } - } - // 如果properties中不包含name,那么自动将要素名称添加进properties中 - if (!renderEntity.properties.containsKey("name")) { - renderEntity.properties["name"] = renderEntity.name; - } + //测试代码 + /* if(renderEntity.code == DataCodeEnum.OMDB_RD_LINK_KIND.code) { - //遍历判断只显示与任务Link相关的任务数据 - if(currentConfig.checkLinkId){ + var currentLinkPid = renderEntity.properties["linkPid"] - if(renderEntity.properties.containsKey("linkPid")){ + if(currentLinkPid!="84209046927907835"){ + continue + } + }else if(renderEntity.code == DataCodeEnum.OMDB_RD_LINK.code){ + continue + }else{ + continue + }*/ - var currentLinkPid = renderEntity.properties["linkPid"] + // 如果properties中不包含name,那么自动将要素名称添加进properties中 + if (!renderEntity.properties.containsKey("name")) { + renderEntity.properties["name"] = renderEntity.name; + } - 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 + //优先过滤掉不需要的数据 + if (renderEntity.code == DataCodeEnum.OMDB_POLE.code) { // 杆状物 + //过滤树类型的杆状物,无需导入到数据库中 + val poleType = renderEntity.properties["poleType"] + if (poleType != null && poleType.toInt() == 2) { + continue + } + } else if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code) { + var boundaryType = + renderEntity.properties["boundaryType"] + if (boundaryType != null) { + when (boundaryType) { + "0", "1", "6", "8", "9" -> { + renderEntity.enable = 0 + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) + continue } } } + } else if (renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code) { - }else if(renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code && 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 - } + //过滤不需要渲染的要素 + var boundaryType = + renderEntity.properties["boundaryType"] + if (boundaryType != null) { + when (boundaryType) { + "0", "3", "4", "5", "7", "9" -> { + renderEntity.enable = 0 + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) + continue } } } - }else if(renderEntity.code == DataCodeEnum.OMDB_INTERSECTION.code && 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") - } - }else{ - renderEntity.enable = 2 - Log.e("qj","${renderEntity.name}==不包括任务linkPid") - } - - - // 对renderEntity做预处理后再保存 - val resultEntity = importConfig.transformProperties(renderEntity) - - if(currentConfig.catch){ - renderEntity.catchEnable=0 - }else{ - renderEntity.catchEnable=1 - } - - //对code编码需要特殊处理 存在多个属性值时,渲染优先级:SA>PA,存在多个属性值时,渲染优先级:FRONTAGE>MAIN_SIDE_A CCESS - if(renderEntity.code == DataCodeEnum.OMDB_LINK_ATTRIBUTE.code){ - - Log.e("qj","道路属性===0") - - var type = renderEntity.properties["sa"] - - if(type!=null&&type=="1"){ - renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_SA.code - Log.e("qj","道路属性===1") - }else{ - type = renderEntity.properties["pa"] - if(type!=null&&type=="1"){ - renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_PA.code - Log.e("qj","道路属性===2") - } else{ - type = renderEntity.properties["frontage"] - if(type!=null&&type=="1"){ - renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code - Log.e("qj","道路属性===3") - }else{ - type = renderEntity.properties["mainSideAccess"] - if(type!=null&&type=="1"){ - renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code - Log.e("qj","道路属性===4") - }else{ - renderEntity.enable=0 - Log.e("qj","过滤不显示数据${renderEntity.table}") - Log.e("qj","道路属性===5") + } else if (renderEntity.code == DataCodeEnum.OMDB_OBJECT_STOPLOCATION.code) { + //过滤不需要渲染的要素 + var locationType = + renderEntity.properties["locationType"] + if (locationType != null) { + when (locationType) { + "3", "4" -> { + renderEntity.enable = 0 + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) continue } } } } - }else if(renderEntity.code == DataCodeEnum.OMDB_RAMP.code){ - /*匝道*/ - var formWay = renderEntity.properties["formOfWay"] - if(formWay!=null){ - when (formWay) { - "93"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_1.code - "98"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_2.code - "99"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_3.code - "100"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_4.code - "102"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_5.code - "103"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_6.code - "104"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_7.code - } - } - }else if(renderEntity.code == DataCodeEnum.OMDB_LINK_FORM1.code){ - /*道路形态1*/ - var formWay = renderEntity.properties["formOfWay"] - if(formWay!=null){ - when (formWay) { - "35"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM1_1.code - "37"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM1_2.code - "38"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM1_3.code - } - } - }else if(renderEntity.code == DataCodeEnum.OMDB_LINK_FORM2.code){ - Log.e("qj","道路形态2${renderEntity.properties["formOfWay"]}") - /*道路形态2*/ - var formWay = renderEntity.properties["formOfWay"] - if(formWay!=null){ - when (formWay) { - "10"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_1.code - "11"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_2.code - "17"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_3.code - "18"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_4.code - "20"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_5.code - "22"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_6.code - "36"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_7.code - "52"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_8.code - "53"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_9.code - "54"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_10.code - "60"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_11.code - "84"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_12.code - "85"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_13.code - } - } - }else if(renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code){ - var boundaryType = renderEntity.properties["boundaryType"] - if(boundaryType!=null){ - when (boundaryType) { - "0","1","6","8","9"->{ - renderEntity.enable=0 - Log.e("qj","过滤不显示数据${renderEntity.table}") - continue - } - } - } - }else if(renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code){ - //过滤不需要渲染的要素 - var boundaryType = renderEntity.properties["boundaryType"] - if(boundaryType!=null){ - when (boundaryType) { - "0","3","4","5","7","9"->{ - renderEntity.enable=0 - Log.e("qj","过滤不显示数据${renderEntity.table}") - continue - } - } - } - }else if(renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name){//特殊处理,因为code相同,使用表名判断 - //过滤不需要渲染的要素 - var formOfWay = renderEntity.properties["formOfWay"] - if(formOfWay!=null&&formOfWay=="30"){ - renderEntity.enable=2 - renderEntity.code = DataCodeEnum.OMDB_NODE_FORM.code - }else{ - Log.e("qj","过滤不显示数据${renderEntity.table}") - continue - } - }else if(renderEntity.table == DataCodeEnum.OMDB_NODE_PA.name){//特殊处理,因为code相同,使用表名判断 - //过滤不需要渲染的要素 - var attributeType = renderEntity.properties["attributeType"] - if(attributeType!=null&&attributeType=="30"){ - renderEntity.enable=2 - renderEntity.code = DataCodeEnum.OMDB_NODE_PA.code - }else{ - Log.e("qj","过滤不显示数据${renderEntity.table}") - continue - } - }else if(renderEntity.code == DataCodeEnum.OMDB_OBJECT_STOPLOCATION.code){ - //过滤不需要渲染的要素 - var locationType = renderEntity.properties["locationType"] - if(locationType!=null){ - when (locationType) { - "3","4"->{ - renderEntity.enable=0 - Log.e("qj","过滤不显示数据${renderEntity.table}") - continue - } - } - } - }else if(renderEntity.code == DataCodeEnum.OMDB_LANE_CONSTRUCTION.code){ - //特殊处理空数据,渲染原则使用 - var startTime = renderEntity.properties["startTime"] - if(startTime==null||startTime=="") { - renderEntity.properties["startTime"] = "null" - } - } else if(renderEntity.code == DataCodeEnum.OMDB_POLE.code){ // 杆状物 - //过滤树类型的杆状物,无需导入到数据库中 - val poleType = renderEntity.properties["poleType"] - if(poleType!=null&&poleType.toInt()==2){ - continue - } - } - listResult.add(renderEntity) + //交限增加相同LinkIn与LinkOut过滤原则 + if (renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code) { + if (renderEntity.properties.containsKey("linkIn") && renderEntity.properties.containsKey( + "linkOut" + ) + ) { + var linkIn = renderEntity.properties["linkIn"] + var linkOut = renderEntity.properties["linkOut"] + if (linkIn != null && linkOut != null) { + var checkMsg = "$linkIn$linkOut" + if (resHashMap.containsKey(checkMsg)) { + Log.e( + "qj", + "${renderEntity.name}==过滤交限linkin与linkout相同且存在多条数据" + ) + continue + } else { + resHashMap.put(checkMsg, renderEntity) + } + } + } + } - if (resultEntity != null) { - realm.insert(renderEntity) + //遍历判断只显示与任务Link相关的任务数据 + if (currentConfig.checkLinkId) { + + if (renderEntity.properties.containsKey("linkPid")) { + + var currentLinkPid = + renderEntity.properties["linkPid"] + + if (!currentLinkPid.isNullOrEmpty() && currentLinkPid != "null") { + + var list = currentLinkPid.split(",") + + if (list != null && list.size > 0) { + m@ for (linkPid in list) { + if (hashMap.containsKey(linkPid)) { + renderEntity.enable = 1 + Log.e( + "qj", + "${renderEntity.name}==包括任务link" + ) + break@m + } + } + } + } + + } else if (renderEntity.code == DataCodeEnum.OMDB_INTERSECTION.code && 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) { + if (hashMap.containsKey(link.linkPid)) { + renderEntity.enable = 1 + break@m + Log.e( + "qj", + "${renderEntity.name}==包括任务link" + ) + } + } + } + } else { + renderEntity.enable = 2 + Log.e("qj", "简单路口") + } + } + } else { + renderEntity.enable = 2 + Log.e( + "qj", + "${renderEntity.name}==不包括任务linkPid" + ) + } + } else { + renderEntity.enable = 2 + Log.e("qj", "${renderEntity.name}==不包括任务linkPid") + } + + + // 对renderEntity做预处理后再保存 + val resultEntity = + importConfig.transformProperties(renderEntity) + + if (resultEntity != null) { + if (currentConfig.catch) { + renderEntity.catchEnable = 0 + } else { + renderEntity.catchEnable = 1 + } + + //对code编码需要特殊处理 存在多个属性值时,渲染优先级:SA>PA,存在多个属性值时,渲染优先级:FRONTAGE>MAIN_SIDE_A CCESS + if (renderEntity.code == DataCodeEnum.OMDB_LINK_ATTRIBUTE.code) { + + Log.e("qj", "道路属性===0") + + var type = renderEntity.properties["sa"] + + if (type != null && type == "1") { + renderEntity.code = + DataCodeEnum.OMDB_LINK_ATTRIBUTE_SA.code + Log.e("qj", "道路属性===1") + } else { + type = renderEntity.properties["pa"] + if (type != null && type == "1") { + renderEntity.code = + DataCodeEnum.OMDB_LINK_ATTRIBUTE_PA.code + Log.e("qj", "道路属性===2") + } else { + type = renderEntity.properties["frontage"] + if (type != null && type == "1") { + renderEntity.code = + DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code + Log.e("qj", "道路属性===3") + } else { + type = + renderEntity.properties["mainSideAccess"] + if (type != null && type == "1") { + renderEntity.code = + DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code + Log.e("qj", "道路属性===4") + } else { + renderEntity.enable = 0 + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) + Log.e("qj", "道路属性===5") + continue + } + } + } + } + } else if (renderEntity.code == DataCodeEnum.OMDB_RAMP.code) { + /*匝道*/ + var formWay = renderEntity.properties["formOfWay"] + if (formWay != null) { + when (formWay) { + "93" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_1.code + + "98" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_2.code + + "99" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_3.code + + "100" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_4.code + + "102" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_5.code + + "103" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_6.code + + "104" -> renderEntity.code = + DataCodeEnum.OMDB_RAMP_7.code + } + } + } else if (renderEntity.code == DataCodeEnum.OMDB_LINK_FORM1.code) { + /*道路形态1*/ + var formWay = renderEntity.properties["formOfWay"] + if (formWay != null) { + when (formWay) { + "35" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM1_1.code + + "37" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM1_2.code + + "38" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM1_3.code + } + } + } else if (renderEntity.code == DataCodeEnum.OMDB_LINK_FORM2.code) { + Log.e( + "qj", + "道路形态2${renderEntity.properties["formOfWay"]}" + ) + /*道路形态2*/ + var formWay = renderEntity.properties["formOfWay"] + if (formWay != null) { + when (formWay) { + "10" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_1.code + + "11" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_2.code + + "17" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_3.code + + "18" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_4.code + + "20" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_5.code + + "22" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_6.code + + "36" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_7.code + + "52" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_8.code + + "53" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_9.code + + "54" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_10.code + + "60" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_11.code + + "84" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_12.code + + "85" -> renderEntity.code = + DataCodeEnum.OMDB_LINK_FORM2_13.code + } + } + } else if (renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name) {//特殊处理,因为code相同,使用表名判断 + //过滤不需要渲染的要素 + var formOfWay = renderEntity.properties["formOfWay"] + if (formOfWay != null && formOfWay == "30") { + renderEntity.enable = 2 + renderEntity.code = + DataCodeEnum.OMDB_NODE_FORM.code + } else { + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) + continue + } + } else if (renderEntity.table == DataCodeEnum.OMDB_NODE_PA.name) {//特殊处理,因为code相同,使用表名判断 + //过滤不需要渲染的要素 + var attributeType = + renderEntity.properties["attributeType"] + if (attributeType != null && attributeType == "30") { + renderEntity.enable = 2 + renderEntity.code = + DataCodeEnum.OMDB_NODE_PA.code + } else { + Log.e( + "qj", + "过滤不显示数据${renderEntity.table}" + ) + continue + } + } else if (renderEntity.code == DataCodeEnum.OMDB_LANE_CONSTRUCTION.code) { + //特殊处理空数据,渲染原则使用 + var startTime = renderEntity.properties["startTime"] + if (startTime == null || startTime == "") { + renderEntity.properties["startTime"] = "null" + } + } + listResult.add(renderEntity) + } } } } + // 1个文件发送一次flow流 + emit("${++processIndex}/${tableNum}") + realm.beginTransaction() + realm.insert(listResult) + realm.commitTransaction() + realm.close() + // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 + if (currentConfig.table == "OMDB_RD_LINK") { + importConfig.preProcess.cacheRdLink = + listResult.associateBy { it.properties["linkPid"] } + } } - // 1个文件发送一次flow流 - emit("${++processIndex}/${tableNum}") - // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 - if (currentConfig.table == "OMDB_RD_LINK") { - importConfig.preProcess.cacheRdLink = - listResult.associateBy { it.properties["linkPid"] } - } + } catch (e: Exception) { + throw e } } - realm.commitTransaction() - realm.close() - } catch (e: Exception) { - realm.cancelTransaction() - throw e + emit("finish") } - 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 b4160ae1..180b7289 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -18,7 +18,7 @@ class ImportPreProcess { val code2NameMap = Code2NameMap() lateinit var cacheRdLink: Map val defaultTranslateDistance = 3.0 - + val testFlag:Boolean = true fun checkCircleRoad(renderEntity: RenderEntity): Boolean { val linkInId = renderEntity.properties["linkIn"] val linkOutId = renderEntity.properties["linkOut"] @@ -45,6 +45,9 @@ class ImportPreProcess { * @param direction 判断当前数据是否为逆向,给定的应该是一个a=b的表达式,a为对应的properties的key,b为对应的值 * */ fun translateRight(renderEntity: RenderEntity, direction: String = "") { + if(testFlag){ + return + } // 获取当前renderEntity的geometry val geometry = renderEntity.wkt var radian = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 @@ -109,6 +112,9 @@ class ImportPreProcess { * 向方向对应的反方向偏移 * */ fun translateBack(renderEntity: RenderEntity, direction: String = "") { + if(testFlag){ + return + } // 获取当前renderEntity的geometry val geometry = renderEntity.wkt var isReverse = false // 是否为逆向 @@ -167,6 +173,9 @@ class ImportPreProcess { * 生成偏移后数据的起终点参考线 * */ fun generateS2EReferenceLine(renderEntity: RenderEntity) { + if(testFlag){ + return + } // 获取当前renderEntity的geometry,该坐标为偏移后坐标,即为终点 val translateGeometry = renderEntity.wkt val startGeometry = GeometryTools.createGeometry(renderEntity.properties["geometry"]) 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 58bd9f95..0359e291 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 @@ -476,7 +476,7 @@ class MainViewModel @Inject constructor( point.longitude, point.latitude ), - buffer = 1.0, catchAll = false + buffer = 2.5, catchAll = false ) if (itemList.size == 1) { @@ -504,8 +504,8 @@ class MainViewModel @Inject constructor( /* val linkList = realmOperateHelper.queryLine( point = point, - buffer = 2.5, - table = "OMDB_LANE_MARK_BOUNDARYTYPE" + buffer = 1.0, + table = "OMDB_RD_LINK_KIND" )*/ var hisRoadName = false diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt index 84b031ca..08a0ddb7 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt @@ -12,6 +12,7 @@ import android.widget.Toast import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.tabs.TabLayout import com.navinfo.collect.library.data.entity.HadLinkDvoBean import com.navinfo.omqs.R import com.navinfo.omqs.databinding.FragmentTaskBinding @@ -143,6 +144,7 @@ class TaskFragment : BaseFragment() { requireContext() ).setTitle("标记原因").setView(view) var editText = view.findViewById(R.id.dialog_edittext) + view.findViewById(R.id.search_tab_layout).visibility=View.GONE editText.setText(bean.reason) inputDialog.setNegativeButton("取消") { dialog, _ -> dialog.dismiss() diff --git a/app/src/main/res/menu/personal_center_menu.xml b/app/src/main/res/menu/personal_center_menu.xml index 810f0e1b..e5d95339 100644 --- a/app/src/main/res/menu/personal_center_menu.xml +++ b/app/src/main/res/menu/personal_center_menu.xml @@ -39,7 +39,7 @@ + android:title="版本:ONE_23QE4_V1.5.0_20230904_A" /> diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index f07dd1e2..576ebaf2 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -185,7 +185,7 @@ width="0.1" /> - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/128.svg b/collect-library/src/main/assets/omdb/arrowDirection/128.svg index eca7e002..ef00f92a 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/128.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/128.svg @@ -4,7 +4,7 @@ 右前拉链式通行复制 2 Created with Sketch. - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/256.svg b/collect-library/src/main/assets/omdb/arrowDirection/256.svg index 34dd6dec..8b9d0506 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/256.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/256.svg @@ -4,7 +4,7 @@ 左前拉链式通行复制 2 Created with Sketch. - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/32.svg b/collect-library/src/main/assets/omdb/arrowDirection/32.svg index e161f55e..76982ae0 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/32.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/32.svg @@ -4,7 +4,7 @@ 11 Created with Sketch. - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/64.svg b/collect-library/src/main/assets/omdb/arrowDirection/64.svg index 8d57f946..402f065a 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/64.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/64.svg @@ -4,7 +4,7 @@ 提示右后方掉头复制 2 Created with Sketch. - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/65.svg b/collect-library/src/main/assets/omdb/arrowDirection/65.svg index 7f38e819..1d20e061 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/65.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/65.svg @@ -10,7 +10,7 @@ - + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/66.svg b/collect-library/src/main/assets/omdb/arrowDirection/66.svg index 9a53634b..a2fa5046 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/66.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/66.svg @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/collect-library/src/main/assets/omdb/arrowDirection/69.svg b/collect-library/src/main/assets/omdb/arrowDirection/69.svg index f9a9763e..aeb0ab3c 100644 --- a/collect-library/src/main/assets/omdb/arrowDirection/69.svg +++ b/collect-library/src/main/assets/omdb/arrowDirection/69.svg @@ -7,11 +7,11 @@ - - - - - + + + + +