Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS

 Conflicts:
	vtm
This commit is contained in:
squallzhjch 2023-09-05 14:08:33 +08:00
commit 0f29f32906
14 changed files with 507 additions and 341 deletions

View File

@ -31,6 +31,7 @@
"name": "道路线",
"zoomMin": 15,
"zoomMax": 17,
"catch":false,
"checkLinkId": false
},
"2002": {

View File

@ -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<String> = 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<String> =
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<String, HadLinkDvoBean> =
HashMap<String, HadLinkDvoBean>() //define empty hashmap
task.hadLinkDvoList.forEach {
hashMap.put(it.linkPid, it);
}
val resHashMap: HashMap<String, RenderEntity> =
HashMap<String, RenderEntity>() //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<RenderEntity>()
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<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_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<RenderEntity>()
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<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_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()&&currentLinkPid!="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()&&currentLinkPid!="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<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{
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<LinkList> = gson.fromJson(
linkList,
object :
TypeToken<List<LinkList>>() {}.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<String> {

View File

@ -18,7 +18,7 @@ class ImportPreProcess {
val code2NameMap = Code2NameMap()
lateinit var cacheRdLink: Map<String?, RenderEntity>
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的keyb为对应的值
* */
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"])

View File

@ -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

View File

@ -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<EditText>(R.id.dialog_edittext)
view.findViewById<TabLayout>(R.id.search_tab_layout).visibility=View.GONE
editText.setText(bean.reason)
inputDialog.setNegativeButton("取消") { dialog, _ ->
dialog.dismiss()

View File

@ -39,7 +39,7 @@
<item
android:id="@+id/personal_center_menu_version"
android:icon="@drawable/ic_baseline_layers_24"
android:title="版本ONE_23QE4_V1.3.0_20230817_A" />
android:title="版本ONE_23QE4_V1.5.0_20230904_A" />
</group>
<group android:checkableBehavior="single">
<item android:title="小标题">

View File

@ -185,7 +185,7 @@
width="0.1" />
<!--道路形态-->
<style-line dasharray="8,2,2,2,2,2" id="road_morphology" repeat-gap="3" repeat-start="0" stroke="#1afa29" width="0.5" />
<style-line dasharray="8,2,2,2,2,2" id="road_morphology" repeat-gap="3" repeat-start="0" stroke="#1afa29" width="0.3" />
<!--###### ASSIGNMENT ######-->

View File

@ -4,7 +4,7 @@
<title>右前拉链式通行复制 2</title>
<desc>Created with Sketch.</desc>
<g id="--" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2526.000000, -1465.000000)" fill="#CBCBCB">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2526.000000, -1465.000000)" fill="#FFFFFF">
<g id="编组-5" transform="translate(2487.000000, 1465.000000)">
<g id="右前拉链式通行复制-2" transform="translate(39.000000, 0.000000)">
<polygon id="path2214_13_复制-2" fill-rule="nonzero" points="5.367 8.80762745 5.367 3.211 9.045 6.338 9.113 3.594 4.504 -5.81756865e-13 -1.22568622e-12 3.598 0.063 6.175 3.526 3.32 3.526 6.83766305"></polygon>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,7 +4,7 @@
<title>左前拉链式通行复制 2</title>
<desc>Created with Sketch.</desc>
<g id="--" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2487.000000, -1465.000000)" fill="#CBCBCB">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2487.000000, -1465.000000)" fill="#FFFFFF">
<g id="编组-5" transform="translate(2487.000000, 1465.000000)">
<g id="左前拉链式通行复制-2" transform="translate(0.000000, 0.000000)">
<polygon id="path2214_13_复制" fill-rule="nonzero" points="18.367 8.80762745 18.367 3.211 22.045 6.338 22.113 3.594 17.504 -5.81756865e-13 13 3.598 13.063 6.175 16.526 3.32 16.526 6.83766305"></polygon>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,7 +4,7 @@
<title>11</title>
<desc>Created with Sketch.</desc>
<g id="待定" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="工具栏汇总复制" transform="translate(-1603.000000, -694.000000)" fill="#D8D8D8">
<g id="工具栏汇总复制" transform="translate(-1603.000000, -694.000000)" fill="#ffffff">
<g id="编组-25" transform="translate(1382.000000, 615.000000)">
<g id="11" transform="translate(221.841210, 79.000000)">
<g id="编组复制-43" transform="translate(4.158790, 0.000000)">

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -4,7 +4,7 @@
<title>提示右后方掉头复制 2</title>
<desc>Created with Sketch.</desc>
<g id="--" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2532.000000, -1541.000000)" fill="#CBCBCB" fill-rule="nonzero">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2532.000000, -1541.000000)" fill="#ffffff" fill-rule="nonzero">
<g id="编组-5" transform="translate(2487.000000, 1465.000000)">
<g id="提示右后方掉头复制-2" transform="translate(45.000000, 75.000000)">
<path d="M2.676,11.3454063 C2.67063205,9.22749842 2.44138369,7.99921639 2.676,6.87640626 C3.35922843,3.60665998 5.25238344,3.57798983 6.62671411,3.54689146 C7.63293806,3.52412262 9.04920727,3.68963843 9.70627148,4.800781 C10.3137327,5.82804132 10.201,7.72888847 10.201,9.49140626 L10.233,13.3034063 L5.551,9.44440626 L5.468,12.9274063 L11.556,17.7914063 L17.79,12.9344063 L17.694,9.22640626 L12.723,13.1864063 L12.744,6.99340626 C12.723,1.84469919 9.40506239,0.91289911 6.15097677,1 C2.98605771,1.0847142 0,2.80476579 0.045,6.87640626 L0,28.9614063 L2.655,28.9744063 L2.676,11.3454063 Z" id="path22940"></path>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -10,7 +10,7 @@
</mask>
</defs>
<g id="--" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2487.000000, -1539.000000)" fill="#CBCBCB" fill-rule="nonzero" stroke="#CBCBCB">
<g id="C9_1_icon-汇总说明(一)" transform="translate(-2487.000000, -1539.000000)" fill="#ffffff" fill-rule="nonzero" stroke="#ffffff">
<g id="编组-5" transform="translate(2487.000000, 1465.000000)">
<g id="提示前方可自行或右后方掉头复制-2" transform="translate(1.000000, 74.000000)">
<polygon id="path2214_3_" stroke-width="0.8" points="5.909 29.208 5.895 4.113 9.36 6.968 9.422 4.391 4.918 0.792 0.308 4.386 0.377 7.13 4.054 4.003 4.071 29.167"></polygon>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -7,10 +7,10 @@
<g id="C9_6_icon-汇总说明-" transform="translate(-994.000000, -1237.000000)" fill-rule="nonzero">
<g id="编组-8" transform="translate(994.000000, 1237.000000)">
<g id="右右后方掉" transform="translate(1.000000, 1.000000)">
<path d="M8.69673216,17.0755955 C8.73657986,15.4150167 10.0204962,14.8670616 11.3862362,14.8670616 C11.9616291,14.8670616 12.6918649,14.9523618 13.1476181,15.1676571 C13.6387556,15.3996679 13.7763603,15.6643292 13.8202362,15.9234665 C13.8917907,16.3460776 13.8917907,18.9354745 13.8202362,23.6916571 L10.3232362,20.6086571 L10.2562362,22.6636571 L14.8772362,26.5506571 L19.2902362,22.6906571 L19.2952362,20.4356571 L15.8102362,23.5996571 L15.8292362,16.1726571 C14.8772362,11.25012 6.81523618,12.7226571 7.00323618,16.0786571 L8.69673216,17.0755955 Z" id="path22940_9_复制-6" fill="#CBCBCB"></path>
<polygon id="path2200_4_复制-7" fill="#CBCBCB" points="6.158 32.9787224 6.186 7.15255237 8.54 6.987 8.522 32.987"></polygon>
<path d="M6.1998711,7.164 C6.3458711,6.74 7.7528711,5.586 8.8348711,5.084 C9.9168711,4.582 11.8238711,4.636 11.8238711,4.636 L14.9338711,4.648 L11.9778711,1.064 L14.6458711,1 L18.3738711,5.662 L14.6518711,10.435 L11.8108711,10.364 L15.0478711,6.558 L11.6108711,6.54 C11.6108711,6.54 9.9348711,6.534 8.7688711,7.353 C7.6028711,8.173 7.3078711,9.819 7.3018711,10.218 C7.2918711,11.016 5.9018711,8.01 6.1998711,7.164 Z" id="path2249_1_复制-3" fill="#CBCBCB"></path>
<rect id="矩形复制-44" stroke="#CBCBCB" stroke-width="2" x="0" y="0" width="26" height="33"></rect>
<path d="M8.69673216,17.0755955 C8.73657986,15.4150167 10.0204962,14.8670616 11.3862362,14.8670616 C11.9616291,14.8670616 12.6918649,14.9523618 13.1476181,15.1676571 C13.6387556,15.3996679 13.7763603,15.6643292 13.8202362,15.9234665 C13.8917907,16.3460776 13.8917907,18.9354745 13.8202362,23.6916571 L10.3232362,20.6086571 L10.2562362,22.6636571 L14.8772362,26.5506571 L19.2902362,22.6906571 L19.2952362,20.4356571 L15.8102362,23.5996571 L15.8292362,16.1726571 C14.8772362,11.25012 6.81523618,12.7226571 7.00323618,16.0786571 L8.69673216,17.0755955 Z" id="path22940_9_复制-6" fill="#ffffff"></path>
<polygon id="path2200_4_复制-7" fill="#FFFFFF" points="6.158 32.9787224 6.186 7.15255237 8.54 6.987 8.522 32.987"></polygon>
<path d="M6.1998711,7.164 C6.3458711,6.74 7.7528711,5.586 8.8348711,5.084 C9.9168711,4.582 11.8238711,4.636 11.8238711,4.636 L14.9338711,4.648 L11.9778711,1.064 L14.6458711,1 L18.3738711,5.662 L14.6518711,10.435 L11.8108711,10.364 L15.0478711,6.558 L11.6108711,6.54 C11.6108711,6.54 9.9348711,6.534 8.7688711,7.353 C7.6028711,8.173 7.3078711,9.819 7.3018711,10.218 C7.2918711,11.016 5.9018711,8.01 6.1998711,7.164 Z" id="path2249_1_复制-3" fill="#ffffff"></path>
<rect id="矩形复制-44" stroke="#ffffff" stroke-width="2" x="0" y="0" width="26" height="33"></rect>
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -7,11 +7,11 @@
<g id="C9_6_icon-汇总说明-" transform="translate(-995.000000, -1299.000000)" fill-rule="nonzero">
<g id="编组-8" transform="translate(994.000000, 1237.000000)">
<g id="左直右后方掉" transform="translate(2.000000, 63.000000)">
<path d="M13.8547322,18.0755955 C13.8945799,16.4150167 15.1784962,15.8670616 16.5442362,15.8670616 C17.1196291,15.8670616 17.8498649,15.9523618 18.3056181,16.1676571 C18.7967556,16.3996679 18.9343603,16.6643292 18.9782362,16.9234665 C19.0497907,17.3460776 19.0497907,19.9354745 18.9782362,24.6916571 L15.4812362,21.6086571 L15.4142362,23.6636571 L20.0352362,27.5506571 L24.4482362,23.6906571 L24.4532362,21.4356571 L20.9682362,24.5996571 L20.9872362,17.1726571 C20.0352362,12.25012 11.9732362,13.7226571 12.1612362,17.0786571 L13.8547322,18.0755955 Z" id="path22940_9_复制-7" fill="#CBCBCB"></path>
<polygon id="path2200_4_复制-6" fill="#CBCBCB" points="11.9201538 33.2190277 12.158 11.2390277 14.1168968 11.2390277 14.4526145 33.2190277"></polygon>
<path d="M13.175,15.1780277 C13.028,14.7540277 11.621,13.6000277 10.539,13.0980277 C9.457,12.5960277 7.55,12.6500277 7.55,12.6500277 L4.441,12.6620277 L7.396,9.07802773 L4.728,9.01402773 L1,13.6760277 L4.721,18.4490277 L7.563,18.3770277 L4.326,14.5710277 L7.762,14.5540277 C7.762,14.5540277 9.44,14.5480277 10.606,15.3670277 C11.772,16.1870277 12.066,17.8330277 12.073,18.2320277 C12.081,19.0300277 13.471,16.0240277 13.175,15.1780277 Z" id="path2214_5_复制-3" fill="#CBCBCB"></path>
<polygon id="path2214_13_复制-8" fill="#CBCBCB" points="14.36 27.5340277 14.0872793 4.004 17.7652793 7.131 17.8332793 4.387 13.2242793 0.793 8.5470131 4.554 8.6100131 7.131 12.2276922 4.004 11.978 27.5340277"></polygon>
<rect id="矩形复制-59" stroke="#CBCBCB" stroke-width="2" x="0" y="0" width="26" height="33"></rect>
<path d="M13.8547322,18.0755955 C13.8945799,16.4150167 15.1784962,15.8670616 16.5442362,15.8670616 C17.1196291,15.8670616 17.8498649,15.9523618 18.3056181,16.1676571 C18.7967556,16.3996679 18.9343603,16.6643292 18.9782362,16.9234665 C19.0497907,17.3460776 19.0497907,19.9354745 18.9782362,24.6916571 L15.4812362,21.6086571 L15.4142362,23.6636571 L20.0352362,27.5506571 L24.4482362,23.6906571 L24.4532362,21.4356571 L20.9682362,24.5996571 L20.9872362,17.1726571 C20.0352362,12.25012 11.9732362,13.7226571 12.1612362,17.0786571 L13.8547322,18.0755955 Z" id="path22940_9_复制-7" fill="#FFFFFF"></path>
<polygon id="path2200_4_复制-6" fill="#FFFFFF" points="11.9201538 33.2190277 12.158 11.2390277 14.1168968 11.2390277 14.4526145 33.2190277"></polygon>
<path d="M13.175,15.1780277 C13.028,14.7540277 11.621,13.6000277 10.539,13.0980277 C9.457,12.5960277 7.55,12.6500277 7.55,12.6500277 L4.441,12.6620277 L7.396,9.07802773 L4.728,9.01402773 L1,13.6760277 L4.721,18.4490277 L7.563,18.3770277 L4.326,14.5710277 L7.762,14.5540277 C7.762,14.5540277 9.44,14.5480277 10.606,15.3670277 C11.772,16.1870277 12.066,17.8330277 12.073,18.2320277 C12.081,19.0300277 13.471,16.0240277 13.175,15.1780277 Z" id="path2214_5_复制-3" fill="#FFFFFF"></path>
<polygon id="path2214_13_复制-8" fill="#FFFFFF" points="14.36 27.5340277 14.0872793 4.004 17.7652793 7.131 17.8332793 4.387 13.2242793 0.793 8.5470131 4.554 8.6100131 7.131 12.2276922 4.004 11.978 27.5340277"></polygon>
<rect id="矩形复制-59" stroke="#FFFFFF" stroke-width="2" x="0" y="0" width="26" height="33"></rect>
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB