feat: 增加道路形态图层分组

This commit is contained in:
xiaoyan 2023-08-16 16:49:38 +08:00
parent f388f7c986
commit 58dfe64227
7 changed files with 648 additions and 633 deletions

View File

@ -1,404 +1,413 @@
{ [
"tableMap" : { {
"1012": { "tableGroupName": "普通图层",
"table": "OMDB_CHECKPOINT", "tableMap" : {
"code": 1012, "1012": {
"name": "检查点", "table": "OMDB_CHECKPOINT",
"zoomMin": 15, "code": 1012,
"zoomMax": 19 "name": "检查点",
}, "zoomMin": 15,
"2001": { "zoomMax": 19
"table": "OMDB_RD_LINK", },
"code": 2001, "2001": {
"name": "道路线", "table": "OMDB_RD_LINK",
"zoomMin": 15, "code": 2001,
"zoomMax": 17, "name": "道路线",
"checkLinkId": false "zoomMin": 15,
}, "zoomMax": 17,
"2002": { "checkLinkId": false
"table": "OMDB_RD_LINK_FUNCTION_CLASS", },
"code": 2002, "2002": {
"name": "道路功能等级", "table": "OMDB_RD_LINK_FUNCTION_CLASS",
"zoomMin": 15, "code": 2002,
"zoomMax": 17 "name": "道路功能等级",
}, "zoomMin": 15,
"2004": { "zoomMax": 17
"table": "OMDB_LINK_ATTRIBUTE", },
"code": 2004, "2008": {
"name": "道路属性", "table": "OMDB_RD_LINK_KIND",
"zoomMin": 15, "code": 2008,
"zoomMax": 19, "name": "道路种别",
"transformer": [ "zoomMin": 15,
{ "zoomMax": 20,
"k": "geometry", "checkLinkId": false
"v": "~", },
"klib": "geometry", "2010": {
"vlib": "generateRoadText()" "table": "OMDB_LINK_DIRECT",
} "code": 2010,
] "name": "道路方向",
}, "zoomMin": 15,
"2008": { "zoomMax": 17,
"table": "OMDB_RD_LINK_KIND", "checkLinkId": false
"code": 2008, },
"name": "道路种别", "2011": {
"zoomMin": 15, "table": "OMDB_LINK_NAME",
"zoomMax": 20, "code": 2011,
"checkLinkId": false "name": "道路名",
}, "zoomMin": 15,
"2010": { "zoomMax": 17,
"table": "OMDB_LINK_DIRECT", "checkLinkId": false,
"code": 2010, "transformer": [
"name": "道路方向", {
"zoomMin": 15, "k": "geometry",
"zoomMax": 17, "v": "~",
"checkLinkId": false "klib": "geometry",
}, "vlib": "generateRoadName()"
"2011": { }
"table": "OMDB_LINK_NAME", ]
"code": 2011, },
"name": "道路名", "2013": {
"zoomMin": 15, "table": "OMDB_LANE_MARK_BOUNDARYTYPE",
"zoomMax": 17, "code": 2013,
"checkLinkId": false, "name": "车道边界类型",
"transformer": [ "zoomMin": 18,
{ "zoomMax": 20,
"k": "geometry", "checkLinkId": false,
"v": "~", "transformer": [
"klib": "geometry", {
"vlib": "generateRoadName()" "k": "geometry",
} "v": "~",
] "klib": "geometry",
}, "vlib": "unpackingLaneBoundary()"
"2013": { }
"table": "OMDB_LANE_MARK_BOUNDARYTYPE", ]
"code": 2013, },
"name": "车道边界类型", "2019": {
"zoomMin": 18, "table": "OMDB_LINK_SPEEDLIMIT",
"zoomMax": 20, "code": 2019,
"checkLinkId": false, "name": "常规线限速",
"transformer": [ "zoomMin": 15,
{ "zoomMax": 17
"k": "geometry", },
"v": "~", "2020": {
"klib": "geometry", "table": "OMDB_LINK_SPEEDLIMIT_COND",
"vlib": "unpackingLaneBoundary()" "code": 2020,
} "name": "条件线限速",
] "zoomMin": 15,
}, "zoomMax": 17
"2019": { },
"table": "OMDB_LINK_SPEEDLIMIT", "2021": {
"code": 2019, "table": "OMDB_LINK_SPEEDLIMIT_VAR",
"name": "常规线限速", "code": 2021,
"zoomMin": 15, "name": "可变线限速",
"zoomMax": 17 "zoomMin": 15,
}, "zoomMax": 17
"2020": { },
"table": "OMDB_LINK_SPEEDLIMIT_COND", "2041":{
"code": 2020, "table": "OMDB_LANE_NUM",
"name": "条件线限速", "code": 2041,
"zoomMin": 15, "name": "车道数"
"zoomMax": 17 },
}, "2083":{
"2021": { "table": "OMDB_RDBOUND_BOUNDARYTYPE",
"table": "OMDB_LINK_SPEEDLIMIT_VAR", "code": 2083,
"code": 2021, "name": "道路边界类型",
"name": "可变线限速", "zoomMin": 18,
"zoomMin": 15, "zoomMax": 20,
"zoomMax": 17 "checkLinkId": false
}, },
"2022": { "2201":{
"table": "OMDB_CON_ACCESS", "table": "OMDB_BRIDGE",
"code": 2022, "code": 2201,
"name": "全封闭" "name": "桥",
}, "zoomMin": 15,
"2037": { "zoomMax": 20,
"table": "OMDB_RAMP", "transformer": [
"code": 2037, {
"name": "匝道" "k": "geometry",
}, "v": "~",
"2040": { "klib": "geometry",
"table": "OMDB_MULTI_DIGITIZED", "vlib": "generateS2EReferencePoint(bridgeType,OMDB_BRIDGE)"
"code": 2040, }
"name": "上下线分离" ]
}, },
"2041":{ "2202":{
"table": "OMDB_LANE_NUM", "table": "OMDB_TUNNEL",
"code": 2041, "code": 2202,
"name": "车道数" "name": "隧道",
}, "zoomMin": 15,
"2083":{ "zoomMax": 20,
"table": "OMDB_RDBOUND_BOUNDARYTYPE", "transformer2Code": ""
"code": 2083, },
"name": "道路边界类型", "3012":{
"zoomMin": 18, "table": "OMDB_FILL_AREA",
"zoomMax": 20, "code": 3012,
"checkLinkId": false "name": "导流区",
}, "zoomMin": 16,
"2201":{ "zoomMax": 20
"table": "OMDB_BRIDGE", },
"code": 2201, "4001": {
"name": "桥", "table": "OMDB_INTERSECTION",
"zoomMin": 15, "code": 4001,
"zoomMax": 20, "name": "路口",
"transformer": [ "zoomMin": 15,
{ "zoomMax": 17,
"k": "geometry", "transformer": [
"v": "~", {
"klib": "geometry", "k": "geometry",
"vlib": "generateS2EReferencePoint(bridgeType,OMDB_BRIDGE)" "v": "~",
} "klib": "geometry",
] "vlib": "generateIntersectionReference()"
}, }
"2202":{ ]
"table": "OMDB_TUNNEL", },
"code": 2202, "4002": {
"name": "隧道", "table": "OMDB_SPEEDLIMIT",
"zoomMin": 15, "code": 4002,
"zoomMax": 20, "name": "常规点限速",
"transformer2Code": "" "zoomMin": 15,
}, "zoomMax": 20,
"2204":{ "transformer": [
"table": "OMDB_ROUNDABOUT", {
"code": 2204, "k": "maxSpeed",
"name": "环岛", "v": "0",
"zoomMin": 15, "klib": "maxSpeed",
"zoomMax": 17, "vlib": "限"
"transformer": [ },
{ {
"k": "geometry", "k": "geometry",
"v": "~", "v": "~",
"klib": "geometry", "klib": "geometry",
"vlib": "generateS2EReferencePoint()" "vlib": "translateRight()"
} }
] ]
}, },
"2205":{ "4003":{
"table": "OMDB_LINK_FORM1", "table": "OMDB_SPEEDLIMIT_COND",
"code": 2205, "code": 4003,
"name": "道路形态1", "name": "条件点限速",
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 17 "zoomMax": 20,
}, "transformer": [
"2206":{ {
"table": "OMDB_LINK_FORM2", "k": "maxSpeed",
"code": 2206, "v": "0|",
"name": "道路形态2", "klib": "maxSpeed",
"zoomMin": 15, "vlib": "限"
"zoomMax": 17, }
"transformer2Code": "" ]
}, },
"3012":{ "4004":{
"table": "OMDB_FILL_AREA", "table": "OMDB_SPEEDLIMIT_VAR",
"code": 3012, "code": 4004,
"name": "导流区", "name": "可变点限速",
"zoomMin": 16, "zoomMin": 15,
"zoomMax": 20 "zoomMax": 20,
}, "transformer": [
"4001": { {
"table": "OMDB_INTERSECTION", "k": "location",
"code": 4001, "v": "1",
"name": "路口", "klib": "location",
"zoomMin": 15, "vlib": "左"
"zoomMax": 17, },
"transformer": [ {
{ "k": "location",
"k": "geometry", "v": "2",
"v": "~", "klib": "locationlib",
"klib": "geometry", "vlib": "右"
"vlib": "generateIntersectionReference()" },
} {
] "k": "location",
}, "v": "3",
"4002": { "klib": "location",
"table": "OMDB_SPEEDLIMIT", "vlib": "上"
"code": 4002, }
"name": "常规点限速", ]
"zoomMin": 15, },
"zoomMax": 20, "4006":{
"transformer": [ "table": "OMDB_RESTRICTION",
{ "code": 4006,
"k": "maxSpeed", "name": "普通交限",
"v": "0", "zoomMin": 15,
"klib": "maxSpeed", "zoomMax": 20,
"vlib": "限" "transformer": [
}, {
{ "k": "geometry",
"k": "geometry", "v": "~",
"v": "~", "klib": "geometry",
"klib": "geometry", "vlib": "checkCircleRoad()"
"vlib": "translateRight()" },
} {
] "k": "geometry",
}, "v": "~",
"4003":{ "klib": "geometry",
"table": "OMDB_SPEEDLIMIT_COND", "vlib": "translateBack()"
"code": 4003, },
"name": "条件点限速", {
"zoomMin": 15, "k": "geometry",
"zoomMax": 20, "v": "~",
"transformer": [ "klib": "geometry",
{ "vlib": "translateRight()"
"k": "maxSpeed", },
"v": "0|", {
"klib": "maxSpeed", "k": "geometry",
"vlib": "限" "v": "~",
} "klib": "geometry",
] "vlib": "generateS2EReferenceLine()"
}, },
"4004":{ {
"table": "OMDB_SPEEDLIMIT_VAR", "k": "geometry",
"code": 4004, "v": "~",
"name": "可变点限速", "klib": "geometry",
"zoomMin": 15, "vlib": "generateDirectReferenceLine()"
"zoomMax": 20, }
"transformer": [ ]
{ },
"k": "location", "4010":{
"v": "1", "table": "OMDB_ELECTRONICEYE",
"klib": "location", "code": 4010,
"vlib": "左" "name": "电子眼",
}, "zoomMin": 15,
{ "zoomMax": 20,
"k": "location", "transformer": [
"v": "2", {
"klib": "locationlib", "k": "geometry",
"vlib": "右" "v": "~",
}, "klib": "geometry",
{ "vlib": "translateRight()"
"k": "location", },
"v": "3", {
"klib": "location", "k": "geometry",
"vlib": "上" "v": "~",
} "klib": "geometry",
] "vlib": "generateS2EReferenceLine()"
}, },
"4006":{ {
"table": "OMDB_RESTRICTION", "k": "geometry",
"code": 4006, "v": "~",
"name": "普通交限", "klib": "geometry",
"zoomMin": 15, "vlib": "generateDirectReferenceLine(3)"
"zoomMax": 20, },
"transformer": [ {
{ "k": "geometry",
"k": "geometry", "v": "~",
"v": "~", "klib": "geometry",
"klib": "geometry", "vlib": "generateElectronName()"
"vlib": "checkCircleRoad()" }
}, ]
{ },
"k": "geometry", "4022": {
"v": "~", "table": "OMDB_TRAFFICLIGHT",
"klib": "geometry", "code": 4022,
"vlib": "translateBack()" "name": "交通灯",
}, "zoomMin": 15,
{ "zoomMax": 20,
"k": "geometry", "transformer": [
"v": "~", ]
"klib": "geometry", },
"vlib": "translateRight()" "4601":{
}, "table": "OMDB_LANEINFO",
{ "code": 4601,
"k": "geometry", "name": "车信",
"v": "~", "zoomMin": 15,
"klib": "geometry", "zoomMax": 17,
"vlib": "generateS2EReferenceLine()" "transformer": [
}, {
{ "k": "geometry",
"k": "geometry", "v": "~",
"v": "~", "klib": "geometry",
"klib": "geometry", "vlib": "translateRight(direct=3)"
"vlib": "generateDirectReferenceLine()" },
} {
] "k": "geometry",
}, "v": "~",
"4010":{ "klib": "geometry",
"table": "OMDB_ELECTRONICEYE", "vlib": "unpackingLaneInfo()"
"code": 4010, },
"name": "电子眼", {
"zoomMin": 15, "k": "geometry",
"zoomMax": 20, "v": "~",
"transformer": [ "klib": "geometry",
{ "vlib": "generateS2EReferenceLine()"
"k": "geometry", }
"v": "~", ]
"klib": "geometry", },
"vlib": "translateRight()" "5001":{
}, "table": "OMDB_LANE_LINK_LG",
{ "code": 5001,
"k": "geometry", "name": "车道中心线",
"v": "~", "zoomMin": 18,
"klib": "geometry", "zoomMax": 20,
"vlib": "generateS2EReferenceLine()" "transformer": [
}, {
{ "k": "geometry",
"k": "geometry", "v": "~",
"v": "~", "klib": "geometry",
"klib": "geometry", "vlib": "generateAddWidthLine()"
"vlib": "generateDirectReferenceLine(3)" }
}, ]
{ },
"k": "geometry", "5002":{
"v": "~", "table": "OMDB_AREA",
"klib": "geometry", "code": 5002,
"vlib": "generateElectronName()" "name": "面测试"
} }
] }
}, },
"4022": { {
"table": "OMDB_TRAFFICLIGHT", "tableGroupName": "道路形态",
"code": 4022, "tableMap" : {
"name": "交通灯", "2004": {
"zoomMin": 15, "table": "OMDB_LINK_ATTRIBUTE",
"zoomMax": 20, "code": 2004,
"transformer": [ "name": "道路属性",
] "zoomMin": 15,
}, "zoomMax": 19,
"4601":{ "transformer": [
"table": "OMDB_LANEINFO", {
"code": 4601, "k": "geometry",
"name": "车信", "v": "~",
"zoomMin": 15, "klib": "geometry",
"zoomMax": 17, "vlib": "generateRoadText()"
"transformer": [ }
{ ]
"k": "geometry", },
"v": "~", "2022": {
"klib": "geometry", "table": "OMDB_CON_ACCESS",
"vlib": "translateRight(direct=3)" "code": 2022,
}, "name": "全封闭"
{ },
"k": "geometry", "2037": {
"v": "~", "table": "OMDB_RAMP",
"klib": "geometry", "code": 2037,
"vlib": "unpackingLaneInfo()" "name": "匝道"
}, },
{ "2040": {
"k": "geometry", "table": "OMDB_MULTI_DIGITIZED",
"v": "~", "code": 2040,
"klib": "geometry", "name": "上下线分离"
"vlib": "generateS2EReferenceLine()" },
} "2204":{
] "table": "OMDB_ROUNDABOUT",
}, "code": 2204,
"5001":{ "name": "环岛",
"table": "OMDB_LANE_LINK_LG", "zoomMin": 15,
"code": 5001, "zoomMax": 17,
"name": "车道中心线", "transformer": [
"zoomMin": 18, {
"zoomMax": 20, "k": "geometry",
"transformer": [ "v": "~",
{ "klib": "geometry",
"k": "geometry", "vlib": "generateS2EReferencePoint()"
"v": "~", }
"klib": "geometry", ]
"vlib": "generateAddWidthLine()" },
} "2205":{
] "table": "OMDB_LINK_FORM1",
}, "code": 2205,
"5002":{ "name": "道路形态1",
"table": "OMDB_AREA", "zoomMin": 15,
"code": 5002, "zoomMax": 17
"name": "面测试" },
"2206":{
"table": "OMDB_LINK_FORM2",
"code": 2206,
"name": "道路形态2",
"zoomMin": 15,
"zoomMax": 17,
"transformer2Code": ""
}
} }
} }
} ]

View File

@ -102,7 +102,7 @@ class Constant {
const val SELECT_TAKEPHOTO_OR_RECORD = "select_takephoto_or_record" const val SELECT_TAKEPHOTO_OR_RECORD = "select_takephoto_or_record"
const val OMDB_CONFIG = "omdb_config.json" const val OMDB_CONFIG = "omdb_config.json"
const val OTHER_CONFIG = "other_config.json" // const val OTHER_CONFIG = "other_config.json"
val OMDB_LAYER_VISIBLE_LIST: MutableList<String> = mutableListOf() // 记录OMDB数据显示的图层名称列表 val OMDB_LAYER_VISIBLE_LIST: MutableList<String> = mutableListOf() // 记录OMDB数据显示的图层名称列表

View File

@ -50,16 +50,23 @@ class ImportOMDBHelper @AssistedInject constructor(
private val configFile: File = private val configFile: File =
File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG) File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG)
private val importConfig by lazy { private val importConfigList by lazy {
openConfigFile() openConfigFile()
} }
/** /**
* 读取config的配置文件 * 读取config的配置文件
* */ * */
fun openConfigFile(): ImportConfig { fun openConfigFile(): List<ImportConfig> {
val resultList = mutableListOf<ImportConfig>()
val configStr = configFile.readText() val configStr = configFile.readText()
return gson.fromJson(configStr, ImportConfig::class.java) val type = object : TypeToken<List<ImportConfig>>() {}.type
return try {
val result = gson.fromJson<List<ImportConfig>>(configStr, type)
result ?: resultList
} catch (e: Exception) {
resultList
}
} }
/** /**
@ -135,262 +142,270 @@ class ImportOMDBHelper @AssistedInject constructor(
val unZipFiles = ZipUtils.unzipFile(omdbZipFile, unZipFolder) val unZipFiles = ZipUtils.unzipFile(omdbZipFile, unZipFolder)
// 将listResult数据插入到Realm数据库中 // 将listResult数据插入到Realm数据库中
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
// 先获取当前配置的所有图层的个数,方便后续计算数据解析进度
var tableNum = 0
for (importConfig in importConfigList) {
tableNum += importConfig.tableMap.size
}
realm.beginTransaction() realm.beginTransaction()
try { try {
// 遍历解压后的文件,读取该数据返回 // 遍历解压后的文件,读取该数据返回
for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) { for (importConfig in importConfigList) {
val currentConfig = currentEntry.value for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) {
val txtFile = unZipFiles.find { val currentConfig = currentEntry.value
it.name == currentConfig.table val txtFile = unZipFiles.find {
} it.name == currentConfig.table
}
val listResult = mutableListOf<RenderEntity>() val listResult = mutableListOf<RenderEntity>()
currentConfig?.let { currentConfig?.let {
val list = FileIOUtils.readFile2List(txtFile, "UTF-8") val list = FileIOUtils.readFile2List(txtFile, "UTF-8")
Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}") Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}")
if (list != null) { if (list != null) {
// 将list数据转换为map // 将list数据转换为map
for ((index, line) in list.withIndex()) { for ((index, line) in list.withIndex()) {
if (line == null || line.trim() == "") { if (line == null || line.trim() == "") {
continue continue
}
Log.d("ImportOMDBHelper", "解析第:${index+1}")
val map = gson.fromJson<Map<String, Any>>(line, object:TypeToken<Map<String, Any>>(){}.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()
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<Map<String, Any>>(line, object:TypeToken<Map<String, Any>>(){}.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
// 如果properties中不包含name那么自动将要素名称添加进properties中 // 先查询这个mesh下有没有数据如果有则跳过即可
if (!renderEntity.properties.containsKey("name")) { // val meshEntity = Realm.getDefaultInstance().where(RenderEntity::class.java).equalTo("properties['mesh']", map["mesh"].toString()).findFirst()
renderEntity.properties["name"] = renderEntity.name; val renderEntity = RenderEntity()
} renderEntity.code = map["qi_code"].toString()
//遍历判断只显示与任务Link相关的任务数据 renderEntity.name = map["qi_name"].toString()
if(currentConfig.checkLinkId){ renderEntity.table = map["qi_table"].toString()
renderEntity.taskId = task.id
renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt()
renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt()
if(renderEntity.properties.containsKey("linkPid")){ // 其他数据插入到Properties中
renderEntity.geometry = map["geometry"].toString()
var currentLinkPid = renderEntity.properties["linkPid"] for ((key, value) in map) {
when (value) {
if(!currentLinkPid.isNullOrEmpty()&&currentLinkPid!="null"){ is String -> renderEntity.properties.put(key, value)
is Int -> renderEntity.properties.put(
task.hadLinkDvoList.forEach{ key,
if(it.linkPid==renderEntity.properties["linkPid"]){ value.toInt().toString()
renderEntity.enable = 1 )
Log.e("qj","${renderEntity.name}==包括任务link") is Double -> renderEntity.properties.put(
return@forEach key,
} value.toDouble().toString()
} )
else -> renderEntity.properties.put(key, value.toString())
} }
}
}else if(renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code && renderEntity.properties.containsKey("linkIn")){ // 如果properties中不包含name那么自动将要素名称添加进properties中
if (!renderEntity.properties.containsKey("name")) {
renderEntity.properties["name"] = renderEntity.name;
}
//遍历判断只显示与任务Link相关的任务数据
if(currentConfig.checkLinkId){
if (renderEntity.properties["linkIn"] != null) { if(renderEntity.properties.containsKey("linkPid")){
var currentLinkPid = renderEntity.properties["linkIn"] var currentLinkPid = renderEntity.properties["linkPid"]
if(!currentLinkPid.isNullOrEmpty()&&currentLinkPid!="null"){ if(!currentLinkPid.isNullOrEmpty()&&currentLinkPid!="null"){
task.hadLinkDvoList.forEach{ task.hadLinkDvoList.forEach{
if(it.linkPid==currentLinkPid){ if(it.linkPid==renderEntity.properties["linkPid"]){
renderEntity.enable = 1 renderEntity.enable = 1
Log.e("qj","${renderEntity.name}==包括任务link") Log.e("qj","${renderEntity.name}==包括任务link")
return@forEach return@forEach
} }
} }
} }
}
}else if(renderEntity.code == DataCodeEnum.OMDB_INTERSECTION.code && renderEntity.properties.containsKey("linkList")){
if (renderEntity.properties["linkList"] != null) { }else if(renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code && renderEntity.properties.containsKey("linkIn")){
Log.e("qj", "linkList==开始${renderEntity.name}==${renderEntity.properties["linkList"]}}") if (renderEntity.properties["linkIn"] != null) {
val linkList = renderEntity.properties["linkList"] var currentLinkPid = renderEntity.properties["linkIn"]
if (!linkList.isNullOrEmpty()&&linkList!="null") { if(!currentLinkPid.isNullOrEmpty()&&currentLinkPid!="null"){
Log.e("qj", "linkList==${renderEntity.name}==${renderEntity.properties["linkList"]}}") task.hadLinkDvoList.forEach{
if(it.linkPid==currentLinkPid){
val list: List<LinkList> = gson.fromJson(linkList, object : TypeToken<List<LinkList>>() {}.type) renderEntity.enable = 1
Log.e("qj","${renderEntity.name}==包括任务link")
if (list != null) { return@forEach
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 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<LinkList> = gson.fromJson(linkList, object : TypeToken<List<LinkList>>() {}.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{ }else{
renderEntity.enable = 2 renderEntity.enable = 2
Log.e("qj","${renderEntity.name}==不包括任务linkPid") Log.e("qj","${renderEntity.name}==不包括任务linkPid")
} }
}else{
renderEntity.enable = 2
Log.e("qj","${renderEntity.name}==不包括任务linkPid")
}
// 对renderEntity做预处理后再保存 // 对renderEntity做预处理后再保存
val resultEntity = importConfig.transformProperties(renderEntity) val resultEntity = importConfig.transformProperties(renderEntity)
//对code编码需要特殊处理 存在多个属性值时渲染优先级SA>PA,存在多个属性值时渲染优先级FRONTAGE>MAIN_SIDE_A CCESS //对code编码需要特殊处理 存在多个属性值时渲染优先级SA>PA,存在多个属性值时渲染优先级FRONTAGE>MAIN_SIDE_A CCESS
if(renderEntity.code == DataCodeEnum.OMDB_LINK_ATTRIBUTE.code){ if(renderEntity.code == DataCodeEnum.OMDB_LINK_ATTRIBUTE.code){
Log.e("qj","道路属性===0") Log.e("qj","道路属性===0")
var type = renderEntity.properties["sa"] 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"){ if(type!=null&&type=="1"){
renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_PA.code renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_SA.code
Log.e("qj","道路属性===2") Log.e("qj","道路属性===1")
} else{ }else{
type = renderEntity.properties["frontage"] type = renderEntity.properties["pa"]
if(type!=null&&type=="1"){ if(type!=null&&type=="1"){
renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_PA.code
Log.e("qj","道路属性===3") Log.e("qj","道路属性===2")
}else{ } else{
type = renderEntity.properties["mainSideAccess"] type = renderEntity.properties["frontage"]
if(type!=null&&type=="1"){ if(type!=null&&type=="1"){
renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code renderEntity.code = DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code
Log.e("qj","道路属性===4") Log.e("qj","道路属性===3")
}else{ }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["FORM_OF_WAY"]
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["FORM_OF_WAY"]
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){
/*道路形态2*/
var formWay = renderEntity.properties["FORM_OF_WAY"]
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 renderEntity.enable=0
Log.e("qj","过滤不显示数据${renderEntity.table}") Log.e("qj","过滤不显示数据${renderEntity.table}")
Log.e("qj","道路属性===5")
continue continue
} }
} }
} }
} }
}else if(renderEntity.code == DataCodeEnum.OMDB_RAMP.code){
/*匝道*/
var formWay = renderEntity.properties["FORM_OF_WAY"]
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["FORM_OF_WAY"]
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){
/*道路形态2*/
var formWay = renderEntity.properties["FORM_OF_WAY"]
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
}
}
}
}
listResult.add(renderEntity) listResult.add(renderEntity)
if (resultEntity != null) { if (resultEntity != null) {
realm.insert(renderEntity) realm.insert(renderEntity)
}
} }
} }
} }
} // 1个文件发送一次flow流
// 1个文件发送一次flow流 emit("${index + 1}/${tableNum}")
emit("${index + 1}/${importConfig.tableMap.size}") // 如果当前解析的是OMDB_RD_LINK数据将其缓存在预处理类中以便后续处理其他要素时使用
// 如果当前解析的是OMDB_RD_LINK数据将其缓存在预处理类中以便后续处理其他要素时使用 if (currentConfig.table == "OMDB_RD_LINK") {
if (currentConfig.table == "OMDB_RD_LINK") { importConfig.preProcess.cacheRdLink =
importConfig.preProcess.cacheRdLink = listResult.associateBy { it.properties["linkPid"] }
listResult.associateBy { it.properties["linkPid"] } }
} }
} }
realm.commitTransaction() realm.commitTransaction()

View File

@ -6,12 +6,12 @@ import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.tools.LayerConfigUtils.Companion.gson
import java.io.File import java.io.File
class LayerConfigUtils { class LayerConfigUtils {
companion object { companion object {
private val omdbConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG) private val omdbConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG)
private val otherConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OTHER_CONFIG)
private val gson = Gson() private val gson = Gson()
fun getLayerConfigList(): List<ImportConfig> { fun getLayerConfigList(): List<ImportConfig> {
@ -20,29 +20,19 @@ class LayerConfigUtils {
Constant.LAYER_CONFIG_LIST = getLayerConfigListFromAssetsFile() Constant.LAYER_CONFIG_LIST = getLayerConfigListFromAssetsFile()
} }
return Constant.LAYER_CONFIG_LIST!! return Constant.LAYER_CONFIG_LIST!!
// return SPStaticUtils.getString(Constant.EVENT_LAYER_MANAGER_CHANGE, null).let {
// if (it != null) {
// val result: List<ImportConfig> =
// gson.fromJson(it, object : TypeToken<List<ImportConfig>>() {}.type)
// result
// } else {
// LayerConfigUtils.getLayerConfigListFromAssetsFile()
// }
// }
} }
private fun getLayerConfigListFromAssetsFile(): List<ImportConfig> { private fun getLayerConfigListFromAssetsFile(): List<ImportConfig> {
val resultList = mutableListOf<ImportConfig>() val resultList = mutableListOf<ImportConfig>()
if (omdbConfigFile.exists()) { if (omdbConfigFile.exists()) {
val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile) val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile)
val omdbConfig = gson.fromJson<ImportConfig>(omdbConfiStr, ImportConfig::class.java) val type = object : TypeToken<List<ImportConfig>>() {}.type
resultList.add(omdbConfig) return try {
} val result = gson.fromJson<List<ImportConfig>>(omdbConfiStr, type)
if (otherConfigFile.exists()) { result ?: resultList
val otherConfiStr = FileIOUtils.readFile2String(otherConfigFile) } catch (e: Exception) {
val otherConfig = resultList
gson.fromJson<ImportConfig>(otherConfiStr, ImportConfig::class.java) }
resultList.add(otherConfig)
} }
return resultList return resultList
} }

View File

@ -742,15 +742,16 @@ class MainViewModel @Inject constructor(
fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) { fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) {
// 根据获取到的配置信息,筛选未勾选的图层名称 // 根据获取到的配置信息,筛选未勾选的图层名称
if (layerConfigList != null && !layerConfigList.isEmpty()) { if (layerConfigList != null && !layerConfigList.isEmpty()) {
val omdbVisibleList = layerConfigList.filter { importConfig -> val omdbVisibleList = mutableListOf<String>()
importConfig.tableGroupName == "OMDB数据" layerConfigList.forEach {
}.first().tableMap.filter { entry -> omdbVisibleList.addAll(it.tableMap.filter { entry ->
val tableInfo = entry.value val tableInfo = entry.value
!tableInfo.checked !tableInfo.checked
}.map { entry -> }.map { entry ->
val tableInfo = entry.value val tableInfo = entry.value
tableInfo.table tableInfo.table
}.toList() }.toList())
}
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY =
omdbVisibleList.toTypedArray() omdbVisibleList.toTypedArray()
// 刷新地图 // 刷新地图

View File

@ -2277,7 +2277,7 @@
<!-- 导流区 --> <!-- 导流区 -->
<m v="OMDB_FILL_AREA"> <m v="OMDB_FILL_AREA">
<area use="obj-area" repeat="false" src="assets:omdb/tex_fill_area_with_text_3012.png"></area> <area use="obj-area" repeat="false" src="assets:omdb/tex_fill_area_3012.png"></area>
<text use="area-name"></text> <text use="area-name"></text>
</m> </m>
</m> </m>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB