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 1bbdd8e6..bc31837e 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -129,7 +129,7 @@ class ImportOMDBHelper @AssistedInject constructor( // 开始解压zip文件 val unZipFiles = ZipUtils.unzipFile(omdbZipFile, unZipFolder) // 将listResult数据插入到Realm数据库中 - Realm.getDefaultInstance().beginTransaction() + val realm = Realm.getDefaultInstance() // 遍历解压后的文件,读取该数据返回 for ((index, currentConfig) in importConfig.tables.withIndex()) { val txtFile = unZipFiles.find { diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 3bedd606..73057c4c 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -13,8 +13,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.locationtech.jts.geom.* import org.locationtech.jts.operation.buffer.BufferOp -import org.locationtech.spatial4j.context.SpatialContext -import org.locationtech.spatial4j.distance.DistanceUtils import org.oscim.core.GeoPoint import org.oscim.core.MercatorProjection import javax.inject.Inject @@ -33,14 +31,18 @@ class RealmOperateHelper() { * */ @RequiresApi(Build.VERSION_CODES.N) suspend fun queryLink( - point: Point, + point: GeoPoint, buffer: Double = DEFAULT_BUFFER, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, sort: Boolean = true ): MutableList { val result = mutableListOf() withContext(Dispatchers.IO) { - val polygon = getPolygonFromPoint(point, buffer, bufferType) + val polygon = getPolygonFromPoint( + GeometryTools.createPoint(point.longitude, point.latitude), + buffer, + bufferType + ) // 根据polygon查询相交的tile号 val tileXSet = mutableSetOf() tileXSet.toString() @@ -68,7 +70,14 @@ class RealmOperateHelper() { queryResult?.let { if (sort) { - result.addAll(sortRenderEntity(point, it)) + result.addAll( + sortRenderEntity( + GeometryTools.createPoint( + point.longitude, + point.latitude + ), it + ) + ) } else { result.addAll(it) } @@ -172,6 +181,7 @@ class RealmOperateHelper() { * @param unSortList 未排序的数据 * @return 排序后的数据 * */ + @RequiresApi(Build.VERSION_CODES.N) fun sortRenderEntity(point: Point, unSortList: List): List { val sortList = unSortList.stream().sorted { renderEntity, renderEntity2 -> val near = point.distance(renderEntity.wkt) - point.distance(renderEntity2.wkt) diff --git a/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt b/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt index 1619dd5e..5c0829ef 100644 --- a/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt +++ b/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt @@ -46,8 +46,9 @@ class ActivityModule { fun providesTaskListDownloadManager( networkServiceAPI: RetrofitNetworkServiceAPI, importFactory: ImportOMDBHiltFactory, + mapController: NIMapController ): TaskDownloadManager = - TaskDownloadManager(importFactory, networkServiceAPI) + TaskDownloadManager(importFactory, networkServiceAPI, mapController) /** * 注入任务下载 diff --git a/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt b/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt index e68fde92..b33f5bf1 100644 --- a/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt +++ b/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt @@ -67,7 +67,7 @@ class GlobalModule { }.apply { level = if (Constant.DEBUG) { //坑 !!!! 下载文件时打印log 内存不足 - HttpLoggingInterceptor.Level.BODY + HttpLoggingInterceptor.Level.BASIC } else { HttpLoggingInterceptor.Level.NONE } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt index 8c5c1b5c..daad0253 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt @@ -3,6 +3,7 @@ package com.navinfo.omqs.http.taskdownload import android.content.Context import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.Observer +import com.navinfo.collect.library.map.NIMapController import com.navinfo.omqs.bean.TaskBean import com.navinfo.omqs.hilt.ImportOMDBHiltFactory import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory @@ -19,6 +20,7 @@ import javax.inject.Inject class TaskDownloadManager constructor( val importFactory: ImportOMDBHiltFactory, val netApi: RetrofitNetworkServiceAPI, + val mapController:NIMapController ) { lateinit var context: Context 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 7e3e3c77..d88f4788 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 @@ -131,6 +131,9 @@ class TaskDownloadScope( Log.e("jingo", "数据安装 $it") if (it == "finish") { change(FileDownloadStatus.DONE) + withContext(Dispatchers.Main) { + downloadManager.mapController.mMapView.updateMap(true) + } } else { change(FileDownloadStatus.IMPORTING, it) } @@ -138,6 +141,8 @@ class TaskDownloadScope( } catch (e: Exception) { Log.e("jingo", "数据安装失败 ${e.toString()}") change(FileDownloadStatus.ERROR) + }finally { + } Log.e("jingo", "importData EEE") diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt index a34a6c25..7d15cc43 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt @@ -115,15 +115,16 @@ class TaskUploadScope( taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> val objects = realm.where(QsRecordBean::class.java) .equalTo("linkId", /*"84207223282277331"*/hadLinkDvoBean.linkPid).findAll() - if(objects.size == 0){ -// change(FileUploadStatus.NONE) + if (objects.size == 0) { + if (taskBean.syncStatus == FileUploadStatus.WAITING) + change(FileUploadStatus.NONE) return } val bodyList: MutableList = ArrayList() if (objects != null) { - val copyList =realm.copyFromRealm(objects) + val copyList = realm.copyFromRealm(objects) copyList.forEach { val evaluationInfo = EvaluationInfo( taskBean.id.toString(), diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index b048abf0..7ff32e0c 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -227,8 +227,15 @@ class MainActivity : BaseActivity() { * 点击录音按钮 */ fun voiceOnclick() { -/* val naviController = findNavController(R.id.main_activity_right_fragment) - naviController.navigate(R.id.EvaluationResultFragment)*/ + val naviController = findNavController(R.id.main_activity_right_fragment) + naviController.navigate(R.id.EvaluationResultFragment) + } + + /** + * 点击线选择 + */ + fun selectLineOnclick(){ + viewModel.setSelectRoad(!viewModel.isSelectRoad()) } fun voiceOnTouchStart() { 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 bb0219f7..ffd27a22 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 @@ -37,14 +37,12 @@ import com.navinfo.omqs.ui.dialog.CommonDialog import com.navinfo.omqs.ui.manager.TakePhotoManager import com.navinfo.omqs.ui.widget.SignUtil import com.navinfo.omqs.util.DateTimeUtil -import com.navinfo.omqs.util.FlowEventBus import com.navinfo.omqs.util.SoundMeter import com.navinfo.omqs.util.SpeakMode import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm import io.realm.RealmSet import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import org.oscim.core.GeoPoint @@ -72,7 +70,7 @@ class MainViewModel @Inject constructor( //看板数据 val liveDataSignList = MutableLiveData>() - var testPoint = GeoPoint(0, 0) +// var testPoint = GeoPoint(0, 0) //语音窗体 private var pop: PopupWindow? = null @@ -83,10 +81,15 @@ class MainViewModel @Inject constructor( var volume: ImageView? = null var mSoundMeter: SoundMeter? = null - var menuState :Boolean = false + var menuState: Boolean = false val liveDataMenuState = MutableLiveData() + /** + * 是不是线选择模式 + */ + private var bSelectRoad = false + init { mapController.markerHandle.setOnQsRecordItemClickListener(object : OnQsRecordItemClickListener { @@ -97,7 +100,10 @@ class MainViewModel @Inject constructor( initLocation() viewModelScope.launch { mapController.onMapClickFlow.collectLatest { - testPoint = it +// testPoint = it + if (bSelectRoad) { + captureLink(it) + } } } @@ -140,8 +146,8 @@ class MainViewModel @Inject constructor( //用于定位点存储到数据库 viewModelScope.launch(Dispatchers.Default) { mapController.locationLayerHandler.niLocationFlow.collect { location -> - location.longitude = testPoint.longitude - location.latitude = testPoint.latitude +// location.longitude = testPoint.longitude +// location.latitude = testPoint.latitude val geometry = GeometryTools.createGeometry( GeoPoint( location.latitude, @@ -168,48 +174,10 @@ class MainViewModel @Inject constructor( //用于定位点捕捉道路 viewModelScope.launch(Dispatchers.Default) { mapController.locationLayerHandler.niLocationFlow.collectLatest { location -> - Log.e("jingo", "定位点绑定道路 ${Thread.currentThread().name}") - location.longitude = testPoint.longitude - location.latitude = testPoint.latitude - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val linkList = realmOperateHelper.queryLink( - point = GeometryTools.createPoint( - location.longitude, - location.latitude - ), - ) - //看板数据 - val signList = mutableListOf() - if (linkList.isNotEmpty()) { - val link = linkList[0] - val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid] - mapController.lineHandler.showLine(link.geometry) - linkId?.let { - var elementList = realmOperateHelper.queryLinkByLinkPid(it) - for (element in elementList) { - val distance = GeometryTools.distanceToDouble( - GeoPoint( - location.latitude, location.longitude, - ), - GeometryTools.createGeoPoint(element.geometry) - ) - signList.add( - SignBean( - iconId = SignUtil.getSignIcon(element), - iconText = SignUtil.getSignIconText(element), - distance = distance.toInt(), - elementId = element.id, - linkId = linkId, - geometry = element.geometry, - bottomText = SignUtil.getSignBottomText(element) - ) - ) - } - liveDataSignList.postValue(signList) - Log.e("jingo", "自动捕捉数据 共${elementList.size}条") - } - } - } +// location.longitude = testPoint.longitude +// location.latitude = testPoint.latitude + if (!isSelectRoad()) + captureLink(GeoPoint(location.latitude, location.longitude)) } } @@ -218,6 +186,47 @@ class MainViewModel @Inject constructor( } + /** + * 捕获道路和面板 + */ + private suspend fun captureLink(point: GeoPoint) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val linkList = realmOperateHelper.queryLink( + point = point, + ) + //看板数据 + val signList = mutableListOf() + if (linkList.isNotEmpty()) { + val link = linkList[0] + val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid] + mapController.lineHandler.showLine(link.geometry) + linkId?.let { + var elementList = realmOperateHelper.queryLinkByLinkPid(it) + for (element in elementList) { + val distance = GeometryTools.distanceToDouble( + point, + GeometryTools.createGeoPoint(element.geometry) + ) + signList.add( + SignBean( + iconId = SignUtil.getSignIcon(element), + iconText = SignUtil.getSignIconText(element), + distance = distance.toInt(), + elementId = element.id, + linkId = linkId, + geometry = element.geometry, + bottomText = SignUtil.getSignBottomText(element) + ) + ) + } + + } + } + liveDataSignList.postValue(signList) + Log.e("jingo", "自动捕捉数据 共${signList.size}条") + } + } + /** * 点击我的位置,回到我的位置 */ @@ -360,15 +369,16 @@ class MainViewModel @Inject constructor( * */ fun refreshOMDBLayer(layerConfigList: List) { // 根据获取到的配置信息,筛选未勾选的图层名称 - if (layerConfigList!=null && !layerConfigList.isEmpty()) { - val omdbVisibleList = layerConfigList.filter { importConfig-> + if (layerConfigList != null && !layerConfigList.isEmpty()) { + val omdbVisibleList = layerConfigList.filter { importConfig -> importConfig.tableGroupName == "OMDB数据" }.first().tables.filter { tableInfo -> !tableInfo.checked - }.map { - tableInfo -> tableInfo.table + }.map { tableInfo -> + tableInfo.table }.toList() - com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray() + com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = + omdbVisibleList.toTypedArray() // 刷新地图 mapController.mMapView.vtmMap.clearMap() } @@ -409,4 +419,16 @@ class MainViewModel @Inject constructor( } } } + + /** + * 开启线选择 + */ + fun setSelectRoad(select: Boolean) { + bSelectRoad = select + } + + fun isSelectRoad(): Boolean { + return bSelectRoad + } + } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt index a49d2543..5ae873f5 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt @@ -25,6 +25,7 @@ class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) val item = data[position] bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId) bd.signMainIcon.text = item.iconText + bd.signBottomText.text = item.bottomText bd.root.setOnClickListener { itemListener?.invoke(position, item) } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 35b9d371..90b80835 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -4,9 +4,7 @@ import android.app.Activity import android.content.Context import android.graphics.drawable.AnimationDrawable import android.graphics.drawable.BitmapDrawable -import android.net.Uri import android.os.Build -import android.os.Bundle import android.text.TextUtils import android.util.Log import android.view.Gravity @@ -15,11 +13,9 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.PopupWindow import androidx.annotation.RequiresApi -import androidx.core.util.rangeTo import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import androidx.navigation.findNavController import com.blankj.utilcode.util.ToastUtils import com.navinfo.collect.library.data.entity.AttachmentBean import com.navinfo.collect.library.data.entity.QsRecordBean @@ -130,7 +126,9 @@ class EvaluationResultViewModel @Inject constructor( geoPoint?.let { liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText() mapController.markerHandle.addMarker(geoPoint, markerTitle) - mapController.animationHandler.animationByLonLat(geoPoint.latitude,geoPoint.longitude) + mapController.animationHandler.animationByLonLat( + geoPoint.latitude, geoPoint.longitude + ) viewModelScope.launch { captureLink(geoPoint.longitude, geoPoint.latitude) } @@ -152,7 +150,7 @@ class EvaluationResultViewModel @Inject constructor( } val point = GeometryTools.createGeoPoint(bean.geometry) liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(point).toText() - mapController.animationHandler.animationByLonLat(point.latitude,point.longitude) + mapController.animationHandler.animationByLonLat(point.latitude, point.longitude) mapController.markerHandle.addMarker(point, markerTitle) } @@ -165,16 +163,12 @@ class EvaluationResultViewModel @Inject constructor( private suspend fun captureLink(longitude: Double, latitude: Double) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val linkList = realmOperateHelper.queryLink( - point = GeometryTools.createPoint( - longitude, - latitude - ), + point = GeoPoint(latitude, longitude), ) liveDataQsRecordBean.value?.let { if (linkList.isNotEmpty()) { - it.linkId = - linkList[0].properties[LinkTable.linkPid] ?: "" + it.linkId = linkList[0].properties[LinkTable.linkPid] ?: "" mapController.lineHandler.showLine(linkList[0].geometry) Log.e("jingo", "捕捉到的linkId = ${it.linkId}") } else { @@ -328,8 +322,9 @@ class EvaluationResultViewModel @Inject constructor( val realm = Realm.getDefaultInstance() Log.e("jingo", "realm hashCOde ${realm.hashCode()}") realm.executeTransaction { - val objects = it.where(QsRecordBean::class.java) - .equalTo("id", liveDataQsRecordBean.value?.id).findFirst() + val objects = + it.where(QsRecordBean::class.java).equalTo("id", liveDataQsRecordBean.value?.id) + .findFirst() objects?.deleteFromRealm() } // realm.close() @@ -354,8 +349,7 @@ class EvaluationResultViewModel @Inject constructor( liveDataQsRecordBean.postValue(it.copy()) val p = GeometryTools.createGeoPoint(it.geometry) mapController.markerHandle.addMarker( - GeoPoint(p.latitude, p.longitude), - markerTitle + GeoPoint(p.latitude, p.longitude), markerTitle ) if (it.linkId.isNotEmpty()) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt index 6bb8bebe..b6578c07 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt @@ -2,6 +2,7 @@ package com.navinfo.omqs.ui.fragment.tasklist import android.content.Context import android.graphics.Color +import android.os.Build import android.util.Log import android.widget.Toast import androidx.lifecycle.MutableLiveData @@ -23,7 +24,7 @@ import javax.inject.Inject @HiltViewModel class TaskListViewModel @Inject constructor( private val networkService: NetworkService, - private val niMapController: NIMapController + private val mapController: NIMapController ) : ViewModel() { val liveDataTaskList = MutableLiveData>() @@ -66,6 +67,7 @@ class TaskListViewModel @Inject constructor( } val objects = realm.where(TaskBean::class.java).findAll() taskList = realm.copyFromRealm(objects) + } } } @@ -95,6 +97,14 @@ class TaskListViewModel @Inject constructor( // } // niMapController.lineHandler.omdbTaskLinkLayer.update() liveDataTaskList.postValue(taskList) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + mapController.lineHandler.omdbTaskLinkLayer.removeAll() + for (item in taskList) { + mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color)) + mapController.lineHandler.omdbTaskLinkLayer.addLineList(item.hadLinkDvoList) + } + } + } } diff --git a/app/src/main/res/drawable/baseline_timeline_24.xml b/app/src/main/res/drawable/baseline_timeline_24.xml new file mode 100644 index 00000000..1d0c6fa9 --- /dev/null +++ b/app/src/main/res/drawable/baseline_timeline_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 071b3a81..19540197 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -133,6 +133,13 @@ app:layout_constraintRight_toRightOf="parent" tools:ignore="MissingConstraints"> + + \ No newline at end of file