diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json
index fb431a34..0a684a78 100644
--- a/app/src/main/assets/omdb_config.json
+++ b/app/src/main/assets/omdb_config.json
@@ -150,7 +150,7 @@
         "code": 2092,
         "name": "车道类型",
         "catch": true,
-        "isDependOnOtherTable": true,
+        "isDependOnOtherTable": false,
         "zoomMin": 18,
         "zoomMax": 20,
 		  "transformer": [
@@ -179,7 +179,7 @@
         "name": "桥",
         "catch": true,
         "existSubCode": true,
-        "isDependOnOtherTable": true,
+        "isDependOnOtherTable": false,
         "zoomMin": 15,
         "zoomMax": 20,
         "transformer": [
@@ -356,7 +356,7 @@
         "code": 4001,
         "name": "路口",
         "zoomMin": 15,
-        "isDependOnOtherTable": true,
+        "isDependOnOtherTable": false,
         "zoomMax": 17,
         "catch": true,
         "transformer": [
@@ -498,7 +498,7 @@
         "code": 4009,
         "name": "警示信息",
         "catch": true,
-        "isDependOnOtherTable": true,
+        "isDependOnOtherTable": false,
         "zoomMin": 15,
         "zoomMax": 20,
         "transformer": [
@@ -587,7 +587,7 @@
         "code": 4601,
         "name": "车信",
         "catch": true,
-        "isDependOnOtherTable": true,
+        "isDependOnOtherTable": false,
         "zoomMin": 15,
         "zoomMax": 17,
         "transformer": [
@@ -615,8 +615,8 @@
         "table": "OMDB_LANE_LINK_LG",
         "code": 5001,
         "name": "车道中心线",
-        "catch": false,
-        "isDependOnOtherTable": true,
+        "catch": true,
+        "isDependOnOtherTable": false,
         "checkLinkId": false,
         "zoomMin": 18,
         "zoomMax": 20,
diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
index 003ea649..dbe16498 100644
--- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
+++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
@@ -10,7 +10,6 @@ import com.google.gson.reflect.TypeToken
 import com.navinfo.collect.library.data.entity.*
 import com.navinfo.collect.library.enums.DataCodeEnum
 import com.navinfo.collect.library.utils.DeflaterUtil
-import com.navinfo.collect.library.utils.StrZipUtil
 import com.navinfo.omqs.Constant
 import com.navinfo.omqs.Constant.Companion.currentInstallTaskConfig
 import com.navinfo.omqs.Constant.Companion.currentInstallTaskFolder
@@ -26,19 +25,34 @@ import io.realm.Realm
 import io.realm.RealmConfiguration
 import kotlinx.coroutines.*
 import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.FlowCollector
-import kotlinx.coroutines.flow.channelFlow
-import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.sync.Mutex
-import org.spatialite.database.SQLiteDatabase
-import sun.misc.BASE64Encoder
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.channels.trySendBlocking
+import kotlinx.coroutines.flow.callbackFlow
+import kotlinx.coroutines.flow.conflate
 import java.io.BufferedReader
 import java.io.File
 import java.io.FileReader
 import java.util.*
 import javax.inject.Inject
 
+
+//定义一个接口
+sealed interface Event
+class OnProgress(val value:Int):Event
+class OnError(val t:Throwable):Event
+class OnResult<T>(val value:T):Event
+object OnComplete:Event
+
+interface MultiPathsCallback<T>{
+    fun onProgress(value: Int)
+
+    fun onResult(value: T)
+
+    fun onError(t:Throwable)
+
+    fun onComplete()
+}
+
 /**
  * 导入omdb数据的帮助类
  * */
@@ -150,8 +164,9 @@ class ImportOMDBHelper @AssistedInject constructor(
      * @param configFile 对应的配置文件
      * */
     suspend fun importOmdbZipFile(
-        omdbZipFile: File, task: TaskBean, scope: CoroutineScope
-    ): Boolean {
+        omdbZipFile: File, task: TaskBean, scope: CoroutineScope,callback: MultiPathsCallback<String>
+    ) {
+
         val channel = Channel<List<RenderEntity>>(Channel.RENDEZVOUS)
 
         installTaskid = task.id.toString()
@@ -193,9 +208,11 @@ class ImportOMDBHelper @AssistedInject constructor(
             mutableMapOf<MutableMap.MutableEntry<String, TableInfo>, ImportConfig>()
         //协程池
         val listJob = mutableListOf<Job>()
+
         try {
             CMLog.writeLogtoFile(ImportOMDBHelper::class.java.name, "数据安装", "开始安装数据")
             Constant.INSTALL_DATA = true
+
             for (importConfig in importConfigList) {
                 for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) {
                     if (currentEntry.value.isDependOnOtherTable) {
@@ -203,14 +220,64 @@ class ImportOMDBHelper @AssistedInject constructor(
                         continue
                     }
                     val job = scope.launch(Dispatchers.IO) {
-                        importData(
+                        startTaskAsFlow(
                             channel,
                             unZipFiles,
                             currentEntry,
                             task,
                             importConfig,
-                            hashMap
-                        )
+                            hashMap,
+                            true).collect{
+                                when(it){
+                                    OnComplete->{
+                                        processIndex ++
+                                        callback.onResult("$processIndex|$tableNum")
+                                        Log.e("jingo", "安装==$processIndex===$tableNum")
+                                        if(tableNum-processIndex==listDependOnEntry.size){
+                                            for ((currentEntry, importConfig) in listDependOnEntry) {
+                                                processIndex++
+                                                if(processIndex==tableNum){
+                                                    importData(
+                                                        channel,
+                                                        unZipFiles,
+                                                        currentEntry,
+                                                        task,
+                                                        importConfig,
+                                                        hashMap,
+                                                        false, callback
+                                                    )
+                                                }else{
+                                                    callback.onResult("$processIndex|$tableNum")
+                                                    importData(
+                                                        channel,
+                                                        unZipFiles,
+                                                        currentEntry,
+                                                        task,
+                                                        importConfig,
+                                                        hashMap,
+                                                        false, null)
+                                                }
+                                            }
+                                            Log.e("jingo", "安装结束")
+
+                                            CMLog.writeLogtoFile(ImportOMDBHelper::class.java.name, "数据安装", "安装结束")
+
+                                            Constant.INSTALL_DATA = false
+                                        }
+                                    }
+                                    is OnProgress->{
+                                        callback.onProgress(it.value)
+                                        Log.e("qj","progress==${it.value}")
+                                    }
+                                    is OnResult<*>->{
+                                        callback.onResult(it.value.toString())
+                                    }
+                                    is OnError->{
+                                        callback.onError(it.t)
+                                    }
+
+                                }
+                        }
                     }
                     listJob.add(job)
                 }
@@ -225,36 +292,49 @@ class ImportOMDBHelper @AssistedInject constructor(
                     }
                     realm.close()
                 }
-
             }
-
             listJob.joinAll()
             channel.close()
             channelJob.join()
-            Log.e("jingo", "channel close 等待结束")
-            for ((currentEntry, importConfig) in listDependOnEntry) {
-                importData(
-                    channel,
-                    unZipFiles,
-                    currentEntry,
-                    task,
-                    importConfig,
-                    hashMap,
-                    false
-                )
-            }
-            Log.e("jingo", "安装结束")
-
-            CMLog.writeLogtoFile(ImportOMDBHelper::class.java.name, "数据安装", "安装结束")
-
         } catch (e: Exception) {
             Log.e("jingo", "安装报错1 ${e.message}")
-            return false
-        }finally {
+
+            callback.onError(e)
+
             Constant.INSTALL_DATA = false
         }
-        return true
     }
+    private fun startTaskAsFlow(
+        f: Channel<List<RenderEntity>>,
+        unZipFiles: List<File>,
+        currentEntry: MutableMap.MutableEntry<String, TableInfo>,
+        task: TaskBean,
+        importConfig: ImportConfig,
+        hashMap: HashMap<Long, HadLinkDvoBean>,
+        isEmit: Boolean = true) = callbackFlow <Event>{
+        val cancellable= importData(f,unZipFiles,currentEntry,task,importConfig,hashMap,isEmit,object :MultiPathsCallback<String>{
+            override fun onProgress(value: Int) {
+                trySendBlocking(OnProgress(value))
+                Log.e("jingo","=====$value")
+            }
+
+            override fun onError(t: Throwable) {
+                trySendBlocking(OnError(t))
+            }
+
+            override fun onComplete() {
+                trySendBlocking(OnComplete)
+            }
+
+            override fun onResult(value: String) {
+                trySendBlocking(OnResult(value))
+            }
+        })
+
+        awaitClose {
+
+        }
+    }.conflate()
 
     private suspend fun importData(
         f: Channel<List<RenderEntity>>,
@@ -263,15 +343,19 @@ class ImportOMDBHelper @AssistedInject constructor(
         task: TaskBean,
         importConfig: ImportConfig,
         hashMap: HashMap<Long, HadLinkDvoBean>,
-        isEmit: Boolean = true
-    ) {
+        isEmit: Boolean = true, callback: MultiPathsCallback<String>?
+    ):NonCancellable {
         val resHashMap: HashMap<String, RenderEntity> = HashMap() //define empty hashmap
         var listRenderEntity = mutableListOf<RenderEntity>()
         //单个表要素统计
         var elementIndex = 0
         val currentConfig = currentEntry.value
 
-        CMLog.writeLogtoFile(ImportOMDBHelper::class.java.name, "importOmdbZipFile", "${currentConfig.table}开始")
+        CMLog.writeLogtoFile(
+            ImportOMDBHelper::class.java.name,
+            "importOmdbZipFile",
+            "${currentConfig.table}开始"
+        )
 
         try {
             var realm: Realm? = null
@@ -294,12 +378,18 @@ class ImportOMDBHelper @AssistedInject constructor(
                         continue
                     }
                     newTime = System.currentTimeMillis()
-                    Log.e(
-                        "jingo",
-                        "安装数据 ${currentConfig.table}  $elementIndex ${listRenderEntity.size} ${newTime - time}"
-                    )
+
+                    if (elementIndex % 50 == 0) {
+                        Log.e(
+                            "jingo",
+                            "安装数据 ${currentConfig.table}  $elementIndex ${listRenderEntity.size} ${newTime - time}"
+                        )
+                    }
+
                     time = newTime
+
                     elementIndex += 1
+
                     val map = gson.fromJson<Map<String, Any>>(
                         line, object : TypeToken<Map<String, Any>>() {}.type
                     ).toMutableMap()
@@ -488,6 +578,8 @@ class ImportOMDBHelper @AssistedInject constructor(
 
                     // 对renderEntity做预处理后再保存
                     val resultEntity = importConfig.transformProperties(renderEntity, realm)
+
+                    //车道中心线不在主表写入
                     if (resultEntity != null) {
 
                         //对code编码需要特殊处理 存在多个属性值时,渲染优先级:SA>PA,存在多个属性值时,渲染优先级:FRONTAGE>MAIN_SIDE_A CCESS
@@ -534,6 +626,7 @@ class ImportOMDBHelper @AssistedInject constructor(
                                     when (renderEntity.properties["bridgeType"]) {
                                         "1" -> renderEntity.code =
                                             DataCodeEnum.OMDB_BRIDGE_1.code
+
                                         "2" -> renderEntity.code =
                                             DataCodeEnum.OMDB_BRIDGE_2.code
                                         // "3" -> renderEntity.code = DataCodeEnum.OMDB_BRIDGE_3.code
@@ -677,6 +770,21 @@ class ImportOMDBHelper @AssistedInject constructor(
                             renderEntity.properties.remove("linkPid")
                         }
 
+                        //去掉暂用控件较大的字段多余属性字段
+                        if (renderEntity.properties.containsKey("shapeList")) {
+                            renderEntity.properties.remove("shapeList")
+                        }
+
+                        //只保留link表相关的pid
+                        if (currentConfig.code != DataCodeEnum.OMDB_RD_LINK.code.toInt() && currentConfig.code != DataCodeEnum.OMDB_RD_LINK_KIND.code.toInt() && renderEntity.properties.containsKey(
+                                "linkPid"
+                            )
+                        ) {
+                            if (renderEntity.properties.containsKey("mesh")) {
+                                renderEntity.properties.remove("mesh")
+                            }
+                        }
+
                         // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用
                         if (currentConfig.code == DataCodeEnum.OMDB_RD_LINK.code.toInt()) {
                             if (renderEntity.linkRelation == null) {
@@ -689,14 +797,11 @@ class ImportOMDBHelper @AssistedInject constructor(
                                 renderEntity.properties["enodePid"]
                         }
 
-                        //去掉暂用控件较大的字段多余属性字段
-                        if (renderEntity.properties.containsKey("shapeList")) {
-                            renderEntity.properties.remove("shapeList")
-                        }
-
-                        renderEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(renderEntity.properties))
+                        renderEntity.propertiesDb =
+                            DeflaterUtil.zipString(JSON.toJSONString(renderEntity.properties))
 
                         listRenderEntity.add(renderEntity)
+
                     }
 
                     if (listRenderEntity.size > 20000) {
@@ -707,12 +812,14 @@ class ImportOMDBHelper @AssistedInject constructor(
                         if (isEmit) {
                             f.send(listRenderEntity)
                             delay(20)
+                            callback?.onProgress(elementIndex)
                         } else {
                             realm!!.copyToRealm(listRenderEntity)
                             realm!!.commitTransaction()
                             realm!!.close()
                             realm = Realm.getInstance(currentInstallTaskConfig)
                             realm.beginTransaction()
+                            callback?.onProgress(elementIndex)
                         }
                         listRenderEntity = mutableListOf()
 //
@@ -720,16 +827,21 @@ class ImportOMDBHelper @AssistedInject constructor(
                     line = bufferedReader.readLine()
                 }
 
-                CMLog.writeLogtoFile(ImportOMDBHelper::class.java.name, "importOmdbZipFile", "${currentConfig.table}结束===总量$elementIndex")
+                CMLog.writeLogtoFile(
+                    ImportOMDBHelper::class.java.name,
+                    "importOmdbZipFile",
+                    "${currentConfig.table}结束===总量$elementIndex"
+                )
 
                 if (isEmit) {
                     f.send(listRenderEntity)
                     delay(20)
-
+                    callback?.onProgress(elementIndex)
                 } else {
                     bufferedReader.close()
                     realm!!.copyToRealm(listRenderEntity)
                     realm!!.commitTransaction()
+                    callback?.onProgress(elementIndex)
                 }
             }
             if (!isEmit) {
@@ -739,7 +851,12 @@ class ImportOMDBHelper @AssistedInject constructor(
             Log.e("jingo", "安装报错 ${currentConfig.table} ${elementIndex} ${e.message}")
             throw e
         }
+
         Log.e("jingo", "完成 ${currentConfig.table}")
+
+        callback?.onComplete()
+
+        return NonCancellable
     }
 
 
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 2ba14f5f..d8641807 100644
--- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt
+++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt
@@ -231,6 +231,7 @@ class ImportPreProcess {
 //        startEndReference.renderEntityId = renderEntity.id
         startEndReference.name = "${renderEntity.name}参考线"
         startEndReference.table = renderEntity.table
+        startEndReference.code = renderEntity.code
         startEndReference.zoomMin = renderEntity.zoomMin
         startEndReference.zoomMax = renderEntity.zoomMax
         startEndReference.taskId = renderEntity.taskId
@@ -242,8 +243,9 @@ class ImportPreProcess {
         startEndReference.properties["type"] = "s_2_e"
         val listResult = mutableListOf<ReferenceEntity>()
         startEndReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(startEndReference.properties))
-        listResult.add(startEndReference)
-        insertData(listResult)
+        renderEntity.referenceEntitys?.add(startEndReference)
+        //listResult.add(startEndReference)
+        //insertData(listResult)
     }
 
     /**
@@ -306,9 +308,9 @@ class ImportPreProcess {
             endReference.properties["qi_table"] = renderEntity.table
             endReference.properties["type"] = "e${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}"
             endReference.properties["geometry"] = endReference.geometry
-
-            listResult.add(endReference)
-            insertData(listResult)
+            renderEntity.referenceEntitys?.add(endReference)
+            //listResult.add(endReference)
+            //insertData(listResult)
         }
     }
 
@@ -393,9 +395,10 @@ class ImportPreProcess {
         }
         endReference.properties["geometry"] = endReference.geometry
         endReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(endReference.properties))
-        listResult.add(endReference)
+        renderEntity.referenceEntitys?.add(endReference)
+        //listResult.add(endReference)
         Log.e("qj", "generateS2EReferencePoint===4")
-        insertData(listResult)
+        //insertData(listResult)
     }
 
     /**
@@ -481,6 +484,7 @@ class ImportPreProcess {
 //            angleReference.renderEntityId = renderEntity.id
             angleReference.name = "${renderEntity.name}参考方向"
             angleReference.table = renderEntity.table
+            angleReference.code = renderEntity.code
             angleReference.zoomMin = renderEntity.zoomMin
             angleReference.zoomMax = renderEntity.zoomMax
             angleReference.taskId = renderEntity.taskId
@@ -491,9 +495,10 @@ class ImportPreProcess {
             angleReference.properties["qi_table"] = renderEntity.table
             angleReference.properties["type"] = "angle"
             angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
-            listResult.add(angleReference)
+            renderEntity.referenceEntitys?.add(angleReference)
+            //listResult.add(angleReference)
         }
-        insertData(listResult)
+        //insertData(listResult)
     }
 
     fun addAngleFromGeometry(renderEntity: RenderEntity): String {
@@ -648,9 +653,10 @@ class ImportPreProcess {
                         "assets:omdb/4601/${type}/1301_${referenceEntity.properties["currentDirect"]}.svg"
                     Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString())
                     referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
-                    listResult.add(referenceEntity)
+                    renderEntity.referenceEntitys?.add(referenceEntity)
+                   //listResult.add(referenceEntity)
                 }
-                insertData(listResult)
+                //insertData(listResult)
             }
         }
     }
@@ -746,9 +752,10 @@ class ImportPreProcess {
        // angleReference.renderEntityId = renderEntity.id
         angleReference.name = "${renderEntity.name}车道中线面"
         angleReference.table = renderEntity.table
+        angleReference.code = renderEntity.code
         Log.e("jingo", "几何转换开始")
-        angleReference.geometry = renderEntity.geometry
-        //GeometryTools.createGeometry(renderEntity.geometry).buffer(0.000035).toString()//GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
+        //angleReference.geometry = renderEntity.geometry
+        angleReference.geometry = GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
         Log.e("jingo", "几何转换结束")
         angleReference.properties["qi_table"] = renderEntity.table
         angleReference.properties["widthProperties"] = "3"
@@ -758,8 +765,9 @@ class ImportPreProcess {
         angleReference.enable = renderEntity.enable
         val listResult = mutableListOf<ReferenceEntity>()
         angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
-        listResult.add(angleReference)
-        insertData(listResult)
+        renderEntity.referenceEntitys?.add(angleReference)
+        //listResult.add(angleReference)
+        //insertData(listResult)
     }
 
 
@@ -789,9 +797,10 @@ class ImportPreProcess {
                 intersectionReference.properties["qi_table"] = renderEntity.table
                 intersectionReference.properties["type"] = "node"
                 intersectionReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(intersectionReference.properties))
-                listResult.add(intersectionReference)
+                renderEntity.referenceEntitys?.add(intersectionReference)
+                //listResult.add(intersectionReference)
             }
-            insertData(listResult)
+            //insertData(listResult)
         }
     }
 
@@ -946,6 +955,7 @@ class ImportPreProcess {
 //            dynamicSrcReference.renderEntityId = renderEntity.id
             dynamicSrcReference.name = "${renderEntity.name}动态icon"
             dynamicSrcReference.table = renderEntity.table
+            dynamicSrcReference.code = renderEntity.code
             dynamicSrcReference.zoomMin = renderEntity.zoomMin
             dynamicSrcReference.zoomMax = renderEntity.zoomMax
             dynamicSrcReference.taskId = renderEntity.taskId
@@ -958,9 +968,10 @@ class ImportPreProcess {
             val code = renderEntity.properties[codeName]
             dynamicSrcReference.properties["src"] = "${prefix}${code}${suffix}"
             dynamicSrcReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(dynamicSrcReference.properties))
-            listResult.add(dynamicSrcReference)
+            renderEntity.referenceEntitys?.add(dynamicSrcReference)
+            //listResult.add(dynamicSrcReference)
         }
-        insertData(listResult)
+        //insertData(listResult)
     }
 
     private fun insertData(list: List<RealmModel>) {
diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
index e93e47fa..8a30d42c 100644
--- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
+++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
@@ -1,14 +1,18 @@
 package com.navinfo.omqs.http.taskdownload
 
+import android.os.Handler
+import android.os.Message
 import android.util.Log
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.Observer
+import androidx.lifecycle.viewmodel.viewModelFactory
 import com.blankj.utilcode.util.MapUtils
 import com.navinfo.collect.library.data.entity.TaskBean
 import com.navinfo.collect.library.utils.MapParamUtils
 import com.navinfo.omqs.Constant
 import com.navinfo.omqs.db.ImportOMDBHelper
+import com.navinfo.omqs.db.MultiPathsCallback
 import com.navinfo.omqs.db.RealmOperateHelper
 import com.navinfo.omqs.tools.FileManager
 import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus
@@ -155,20 +159,50 @@ class TaskDownloadScope(
                     fileNew
                 )
             if (task != null) {
-                if (importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, task, this)) {
-//                    if (it == "finish") {
-                    change(FileDownloadStatus.DONE)
-                    Log.e("jingo", "数据安装结束")
-                    withContext(Dispatchers.Main) {
-                        //任务与当前一致,需要更新渲染图层
-                        if (MapParamUtils.getTaskId() == taskBean.id) {
-                            downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer()
+                importOMDBHelper.importOmdbZipFile(
+                    importOMDBHelper.omdbFile,
+                    task,
+                    this,
+                    object : MultiPathsCallback<String> {
+                        override fun onProgress(value: Int) {
+                            Log.e("jingo", "安装====$value")
                         }
-                    }
-                } else {
-                    change(FileDownloadStatus.IMPORTING, "anzhuang")
-                }
-//                }
+
+                        override fun onError(t: Throwable) {
+                        }
+
+                        override fun onComplete() {
+                            taskBean.status = FileDownloadStatus.DONE
+                            downloadData.postValue(taskBean)
+                            //任务与当前一致,需要更新渲染图层
+                            if (MapParamUtils.getTaskId() == taskBean.id) {
+                                downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer()
+                            }
+                            val realm = realmOperateHelper.getRealmDefaultInstance()
+                            realm.executeTransaction { r ->
+                                val newTask =
+                                    realm.where(TaskBean::class.java).equalTo("id", taskBean.id)
+                                        .findFirst()
+                                newTask?.let {
+                                    it.syncStatus = taskBean.syncStatus
+                                    it.status = taskBean.status
+                                    it.errMsg = taskBean.errMsg
+                                    //赋值时间,用于查询过滤
+                                    it.operationTime = taskBean.operationTime
+                                    r.copyToRealmOrUpdate(it)
+                                    taskBean = realm.copyFromRealm(it)
+                                }
+                            }
+                            realm.close()
+                        }
+
+                        override fun onResult(value: String) {
+                            taskBean.status = FileDownloadStatus.IMPORTING
+                            taskBean.message = value
+                            downloadData.postValue(taskBean)
+                        }
+
+                    })
             }
         } catch (e: Exception) {
             Log.e("jingo", "数据安装失败 ${e.toString()}")
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 e7b7b478..2454546b 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
@@ -854,7 +854,7 @@ class MainViewModel @Inject constructor(
      */
     private suspend fun captureLink(point: GeoPoint) {
 
-        if (captureLinkState) {
+        if (captureLinkState||Constant.INSTALL_DATA) {
             return
         }
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt
index 8c247086..b18a24f8 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt
@@ -11,6 +11,7 @@ import com.navinfo.omqs.bean.ScProblemTypeBean
 import com.navinfo.omqs.bean.ScRootCauseAnalysisBean
 import com.navinfo.omqs.bean.ScWarningCodeBean
 import com.navinfo.omqs.db.ImportOMDBHelper
+import com.navinfo.omqs.db.MultiPathsCallback
 import com.navinfo.omqs.db.RealmOperateHelper
 import com.navinfo.omqs.db.RoomAppDatabase
 import com.navinfo.omqs.tools.MetadataUtils
@@ -152,11 +153,36 @@ class PersonalCenterViewModel @Inject constructor(
         viewModelScope.launch(Dispatchers.IO) {
             Log.d("OMQSApplication", "开始导入数据")
             if (task != null) {
-                importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, task, this)
+                importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, task, this,object :MultiPathsCallback<String>{
+                    override fun onProgress(value: Int) {
+                    }
+
+                    override fun onResult(value: String) {
+                    }
+
+                    override fun onError(t: Throwable) {
+                    }
+
+                    override fun onComplete() {
+                    }
+                })
             } else {
                 val newTask = TaskBean()
                 newTask.id = -1
-                importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, newTask, this)
+                importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, newTask, this,object :MultiPathsCallback<String>{
+                    override fun onProgress(value: Int) {
+
+                    }
+
+                    override fun onResult(value: String) {
+                    }
+
+                    override fun onError(t: Throwable) {
+                    }
+
+                    override fun onComplete() {
+                    }
+                })
 
             }
             Log.d("OMQSApplication", "导入数据完成")
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
index 5a8e1e91..dff88859 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
@@ -325,18 +325,19 @@ class TaskListAdapter(
                 if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility =
                     View.VISIBLE
                 binding.taskDownloadBtn.setText("安装中")
+                Log.e("jingo", "更新进度条 ${taskBean.message}")
                 val split = taskBean.message.split("/")
                 if (split.size == 2) {
                     try {
                         val index = split[0].toInt()
                         val count = split[1].toInt()
-                        binding.taskProgressText.text =
-                            "${index * 100 / count}%"
+                        Log.e("jingo", "更新进度条 $index====$count")
+                        binding.taskProgressText.text = "${index * 100 / count}%"
                     } catch (e: Exception) {
                         Log.e("jingo", "更新进度条 $e")
                     }
                 } else {
-                    binding.taskProgressText.text = "0%"
+                    binding.taskProgressText.text = taskBean.message
                 }
                 val errMsg = taskBean.errMsg
                 if (errMsg != null && errMsg.isNotEmpty()) {
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt
index 75516708..44a5940e 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt
@@ -108,6 +108,7 @@ open class RenderEntity() : RealmObject(), Parcelable {
     @Index
     var linkPid: String = "" // RenderEntity关联的linkPid集合(可能会关联多个)
     var linkRelation: LinkRelation? = null
+    var referenceEntitys: RealmSet<ReferenceEntity>? = RealmSet()//
 
     constructor(name: String) : this() {
         this.name = name
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java
index 7c0b4d75..95b92fc2 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java
@@ -4,10 +4,13 @@ import static org.oscim.core.MercatorProjection.latitudeToY;
 import static org.oscim.core.MercatorProjection.longitudeToX;
 
 import android.os.Build;
+import android.util.Log;
 
 import androidx.annotation.RequiresApi;
 
 import com.navinfo.collect.library.data.entity.RenderEntity;
+import com.navinfo.collect.library.enums.DataCodeEnum;
+import com.navinfo.collect.library.utils.GeometryTools;
 
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Geometry;
@@ -103,7 +106,14 @@ public class OMDBDataDecoder extends TileDecoder {
                 processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false);
             }
         } else if (geometry instanceof LineString) {
-            processLineString((LineString) geometry);
+            //将车道中心进行转化面渲染
+            if(layerName!=null&&layerName.equals(DataCodeEnum.OMDB_LANE_LINK_LG.name())){
+                Log.e("qj","车道中心线转化开始");
+                processPolygon((Polygon) GeometryTools.createGeometry(GeometryTools.computeLine(0.000035,0.000035,geometry.toString())));
+                Log.e("qj","车道中心线转化结束");
+            }else{
+                processLineString((LineString) geometry);
+            }
         } else if (geometry instanceof MultiLineString) {
             MultiLineString multiLineString = (MultiLineString) geometry;
             for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/DeflaterUtil.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/DeflaterUtil.java
index eebbc008..b5d17cf7 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/utils/DeflaterUtil.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/DeflaterUtil.java
@@ -71,25 +71,35 @@ public class DeflaterUtil{
 
         deflater.finish();
 
-        final byte[] bytes = new byte[256];
+        final byte[] bytes = new byte[512];
 
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);
 
-        while (!deflater.finished()) {
+        try {
 
-            //压缩输入数据并用压缩数据填充指定的缓冲区。
+            while (!deflater.finished()) {
 
-            int length = deflater.deflate(bytes);
+                //压缩输入数据并用压缩数据填充指定的缓冲区。
 
-            outputStream.write(bytes, 0, length);
+                int length = deflater.deflate(bytes);
 
+                outputStream.write(bytes, 0, length);
+
+            }
+
+            deflater.end();
+
+            return Base64.encodeBase64String(outputStream.toByteArray());
+
+        }catch (Exception e){
+            return null;
+        }finally {
+            try {
+                outputStream.close();
+            }catch (Exception e){
+
+            }
         }
-
-        deflater.end();
-
-        return Base64.encodeBase64String(outputStream.toByteArray());
-
-
     }
 
     /**
@@ -108,9 +118,9 @@ public class DeflaterUtil{
 
         inflater.setInput(decode);
 
-        final byte[] bytes = new byte[256];
+        final byte[] bytes = new byte[512];
 
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);
 
         try {
 
@@ -150,6 +160,12 @@ public class DeflaterUtil{
 
             return null;
 
+        }finally {
+            try {
+                outputStream.close();
+            }catch (Exception e){
+
+            }
         }
 
     }