diff --git a/app/build.gradle b/app/build.gradle index 1c5fbf77..35d9733f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ android { minSdk 21 targetSdk 21 versionCode 1 - versionName "1.0" + versionName "1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 5795467f..dc1f004f 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -65,8 +65,8 @@ "table": "OMDB_LINK_NAME", "code": 2011, "name": "道路名", - "zoomMin": 15, - "zoomMax": 17, + "zoomMin": 18, + "zoomMax": 20, "checkLinkId": false, "transformer": [ { @@ -110,14 +110,54 @@ "code": 2019, "name": "常规线限速", "zoomMin": 15, - "zoomMax": 17 + "zoomMax": 17, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine()" + } + ] }, "2020": { "table": "OMDB_LINK_SPEEDLIMIT_COND", "code": 2020, "name": "条件线限速", "zoomMin": 15, - "zoomMax": 17 + "zoomMax": 17, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine()" + } + ] }, "2021": { "table": "OMDB_LINK_SPEEDLIMIT_VAR", @@ -134,7 +174,15 @@ "filterData": true, "zoomMin": 18, "zoomMax": 20, - "catch": true + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "dengfenLineString()" + } + ] }, "2090": { "table": "OMDB_LANE_CONSTRUCTION", @@ -388,6 +436,24 @@ "v": "~", "klib": "geometry", "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "createSpeedLimitText()" } ] }, @@ -404,6 +470,12 @@ "v": "0|", "klib": "maxSpeed", "vlib": "限" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "createSpeedLimitText()" } ] }, @@ -432,6 +504,12 @@ "v": "3", "klib": "ref", "vlib": "上" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "createSpeedLimitText()" } ] }, @@ -589,15 +667,10 @@ "name": "车信", "catch": true, "isDependOnOtherTable": false, + "checkLinkId": false, "zoomMin": 15, "zoomMax": 17, "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateBack()" - }, { "k": "geometry", "v": "~", 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 dbe16498..93b43012 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -455,7 +455,7 @@ class ImportOMDBHelper @AssistedInject constructor( val boundaryType = renderEntity.properties["boundaryType"] if (boundaryType != null) { when (boundaryType.toInt()) { - 0, 1, 6, 8, 9 -> { + 0, 1, 7, 8 -> { renderEntity.enable = 0 line = bufferedReader.readLine() continue @@ -468,7 +468,7 @@ class ImportOMDBHelper @AssistedInject constructor( val boundaryType = renderEntity.properties["boundaryType"] if (boundaryType != null) { when (boundaryType.toInt()) { - 0, 1, 3, 4, 5, 7, 9 -> { + 0, 1, 2, 7, 8 -> { renderEntity.enable = 0 line = bufferedReader.readLine() continue @@ -770,8 +770,8 @@ class ImportOMDBHelper @AssistedInject constructor( renderEntity.properties.remove("linkPid") } - //去掉暂用控件较大的字段多余属性字段 - if (renderEntity.properties.containsKey("shapeList")) { + //去掉暂用控件较大的字段多余属性字段,保留道路名用于展示详情 + if (renderEntity.code!=DataCodeEnum.OMDB_LINK_NAME.code&&renderEntity.properties.containsKey("shapeList")) { renderEntity.properties.remove("shapeList") } 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 366115a7..16e95559 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -95,7 +95,6 @@ class ImportPreProcess { ) != null ) { // 带有angle字段的数据,也有可能是线,需要判断是否需要根据指定字段判断数据是否为逆向 - var angle = renderEntity?.properties?.get("angle")?.toDouble()!! // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 angle = ((450 - angle) % 360) @@ -226,7 +225,6 @@ class ImportPreProcess { // 将这个起终点的线记录在数据中 val startEndReference = ReferenceEntity() -// startEndReference.renderEntityId = renderEntity.id startEndReference.name = "${renderEntity.name}参考线" startEndReference.table = renderEntity.table startEndReference.code = renderEntity.code @@ -239,11 +237,8 @@ class ImportPreProcess { GeometryTools.createLineString(arrayOf(pointStart, pointEnd)).toString() startEndReference.properties["qi_table"] = renderEntity.table startEndReference.properties["type"] = "s_2_e" - val listResult = mutableListOf() startEndReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(startEndReference.properties)) - renderEntity.referenceEntitys?.add(startEndReference) - //listResult.add(startEndReference) - //insertData(listResult) + renderEntity.referenceEntitys.add(startEndReference) } /** @@ -306,7 +301,7 @@ 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 - renderEntity.referenceEntitys?.add(endReference) + renderEntity.referenceEntitys.add(endReference) //listResult.add(endReference) //insertData(listResult) } @@ -325,7 +320,6 @@ class ImportPreProcess { // 将这个起终点的线记录在数据中 val startReference = ReferenceEntity() -// startReference.renderEntityId = renderEntity.id startReference.name = "${renderEntity.name}参考点" startReference.code = renderEntity.code startReference.table = renderEntity.table @@ -363,7 +357,6 @@ class ImportPreProcess { Log.e("qj", "generateS2EReferencePoint===1") val endReference = ReferenceEntity() -// endReference.renderEntityId = renderEntity.id endReference.name = "${renderEntity.name}参考点" endReference.code = renderEntity.code endReference.table = renderEntity.table @@ -393,10 +386,8 @@ class ImportPreProcess { } endReference.properties["geometry"] = endReference.geometry endReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(endReference.properties)) - renderEntity.referenceEntitys?.add(endReference) - //listResult.add(endReference) + renderEntity.referenceEntitys.add(endReference) Log.e("qj", "generateS2EReferencePoint===4") - //insertData(listResult) } /** @@ -407,6 +398,7 @@ class ImportPreProcess { direction: String = "", distance: String = "" ) { + Log.e("qj", "generateDirectReferenceLine===0==${renderEntity.code}") // 根据数据或angle计算方向对应的角度和偏移量 val geometry = renderEntity.wkt var isReverse = false // 是否为逆向 @@ -473,13 +465,11 @@ class ImportPreProcess { geometry?.coordinate?.y!! ) * Math.sin(radian) } - val listResult = mutableListOf() for (pointStart in pointStartArray) { val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z) val angleReference = ReferenceEntity() -// angleReference.renderEntityId = renderEntity.id angleReference.name = "${renderEntity.name}参考方向" angleReference.table = renderEntity.table angleReference.code = renderEntity.code @@ -493,10 +483,9 @@ class ImportPreProcess { angleReference.properties["qi_table"] = renderEntity.table angleReference.properties["type"] = "angle" angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties)) - renderEntity.referenceEntitys?.add(angleReference) - //listResult.add(angleReference) + renderEntity.referenceEntitys.add(angleReference) } - //insertData(listResult) + Log.e("qj", "generateDirectReferenceLine===1") } fun addAngleFromGeometry(renderEntity: RenderEntity): String { @@ -574,6 +563,8 @@ class ImportPreProcess { renderEntityTemp.zoomMax = renderEntity.zoomMax renderEntityTemp.enable = renderEntity.enable renderEntityTemp.taskId = renderEntity.taskId + renderEntityTemp.linkPid = renderEntity.linkPid + renderEntity.linkRelation = renderEntity.linkRelation renderEntityTemp.catchEnable = renderEntity.catchEnable var dis = -lateralOffset.toDouble() / 100000000 //最小值取10厘米,否正渲染太近无法显示 @@ -607,6 +598,37 @@ class ImportPreProcess { if (listResult.size > 0) { insertData(listResult) } + }else if(boundaryType.toInt() == 9){//根据线型平分为点数据,用于渲染3D标 + dengfenLineString(renderEntity) + } + } + } + } + + fun dengfenLineString(renderEntity: RenderEntity){ + if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code||renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code){ + val boundaryType = renderEntity.properties["boundaryType"] + if (boundaryType != null) { + if(boundaryType.toInt()==9){ + Log.e("qj","杆状物转换开始") + val geopointList = GeometryTools.getLineToDengGeoPints(renderEntity.wkt,5.0) + geopointList.forEach{ + val referenceEntity = ReferenceEntity() + referenceEntity.name = "${renderEntity.name}线转点坐标" + referenceEntity.table = renderEntity.table + referenceEntity.code = renderEntity.code + referenceEntity.geometry = GeometryTools.createGeometry(it).toString() + Log.e("jingo", "几何转换结束") + referenceEntity.properties["qi_table"] = renderEntity.table + referenceEntity.properties["boundaryType"] = "pole" + referenceEntity.zoomMin = renderEntity.zoomMin + referenceEntity.zoomMax = renderEntity.zoomMax + referenceEntity.taskId = renderEntity.taskId + referenceEntity.enable = renderEntity.enable + referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties)) + renderEntity.referenceEntitys.add(referenceEntity) + } + Log.e("qj","杆状物转换结束") } } } @@ -636,7 +658,7 @@ class ImportPreProcess { referenceEntity.zoomMin = renderEntity.zoomMin referenceEntity.zoomMax = renderEntity.zoomMax // 与原数据使用相同的geometry - referenceEntity.geometry = renderEntity.geometry + referenceEntity.geometry = GeometryTools.createGeometry(renderEntity.geometry).toString() referenceEntity.properties["qi_table"] = renderEntity.table referenceEntity.properties["symbol"] = "true" for (i in 0 until laneInfoDirectArray.length()) { @@ -650,30 +672,6 @@ class ImportPreProcess { "assets:omdb/4601/${type}/1301_${currentDirect}.svg" referenceEntity.properties["img-src"] = if(referenceEntity.properties["img-src"].isNullOrEmpty()) symbol else "${referenceEntity.properties["img-src"]}|${symbol}" -// // 根据后续的数据生成辅助表数据 -// val referenceEntity = ReferenceEntity() -//// referenceEntity.renderEntityId = renderEntity.id -// referenceEntity.name = "${renderEntity.name}参考方向" -// referenceEntity.table = renderEntity.table -// referenceEntity.enable = renderEntity.enable -// referenceEntity.code = renderEntity.code -// referenceEntity.taskId = renderEntity.taskId -// referenceEntity.zoomMin = renderEntity.zoomMin -// referenceEntity.zoomMax = renderEntity.zoomMax -// // 与原数据使用相同的geometry -// referenceEntity.geometry = renderEntity.geometry -// referenceEntity.properties["qi_table"] = renderEntity.table -// referenceEntity.properties["currentDirect"] = -// laneInfoDirectArray[i].toString().split(",").distinct().joinToString("_") -// referenceEntity.properties["currentType"] = -// laneInfoTypeArray[i].toString() -// val type = -// if (referenceEntity.properties["currentType"] == "0") "normal" else if (referenceEntity.properties["currentType"] == "1") "extend" else "bus" -// referenceEntity.properties["symbol"] = -// "assets:omdb/4601/${type}/1301_${referenceEntity.properties["currentDirect"]}.svg" -// Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString()) -// referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties)) -// renderEntity.referenceEntitys?.add(referenceEntity) //listResult.add(referenceEntity) } referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties)) @@ -796,7 +794,7 @@ class ImportPreProcess { angleReference.enable = renderEntity.enable val listResult = mutableListOf() angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties)) - renderEntity.referenceEntitys?.add(angleReference) + renderEntity.referenceEntitys.add(angleReference) //listResult.add(angleReference) //insertData(listResult) } @@ -828,13 +826,28 @@ class ImportPreProcess { intersectionReference.properties["qi_table"] = renderEntity.table intersectionReference.properties["type"] = "node" intersectionReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(intersectionReference.properties)) - renderEntity.referenceEntitys?.add(intersectionReference) + renderEntity.referenceEntitys.add(intersectionReference) //listResult.add(intersectionReference) } //insertData(listResult) } } + /** + * 几何方向排序 + * */ + fun sortGeometry(renderEntity: RenderEntity) { + // 路口数据的其他点位,是保存在nodeList对应的数组下 +/* if (renderEntity.properties.containsKey("linkPid")) { + val linkList = renderEntity.properties["linkPid"]?.split(",") + //几何较少时需要判断是否要计算判断长短边 + if(linkList!=null&&linkList.size<3){ + + } + }*/ + } + + /** * 生成默认路口数据的参考数据 * */ @@ -999,7 +1012,7 @@ class ImportPreProcess { val code = renderEntity.properties[codeName] dynamicSrcReference.properties["src"] = "${prefix}${code}${suffix}" dynamicSrcReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(dynamicSrcReference.properties)) - renderEntity.referenceEntitys?.add(dynamicSrcReference) + renderEntity.referenceEntitys.add(dynamicSrcReference) //listResult.add(dynamicSrcReference) } //insertData(listResult) @@ -1260,4 +1273,13 @@ class ImportPreProcess { zLevelReference.properties["qi_table"] = renderEntity.table return zLevelReference } + + /** + * 创建限速的文字动态数据,生成动态symbol + * */ + fun createSpeedLimitText(renderEntity: RenderEntity) { + if (renderEntity.properties.containsKey("maxSpeed")) { + renderEntity.properties["text-src"] = "@text:${renderEntity.properties["maxSpeed"]}" + } + } } \ No newline at end of file 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 6bff40d4..4efea6ca 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -181,7 +181,7 @@ class RealmOperateHelper() { var nearLast: Double = 99999.99 for (link in realmList) { if (polygon.intersects(GeometryTools.createGeometry(link.geometry))) { - val near = point.distance(GeometryTools.createGeoPoint(link.geometry)) + val near = GeometryTools.createGeometry(link.geometry).distance(GeometryTools.createGeometry(point)) if (near < nearLast) { nearLast = near linkBean = link @@ -302,6 +302,7 @@ class RealmOperateHelper() { // 将获取到的数据和查询的polygon做相交,只返回相交的数据 val queryResult = realmList?.stream()?.filter { if (Constant.MapCatchLine) { + Log.e("qj",it.code+"捕捉要素编码"+it.enable+"==="+it.catchEnable) polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase() .equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON") } else { diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt index 75801d42..df0242e8 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt @@ -127,6 +127,7 @@ class LoginActivity : CheckPermissionsActivity() { private fun initView() { //登录校验,初始化成功 viewModel.loginStatus.observe(this, loginObserve) + viewModel.lastLoginUserInfo(this) } /** diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt index ef7cd2f3..fbb663f4 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt @@ -8,16 +8,8 @@ import android.widget.Toast import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import androidx.room.migration.Migration -import androidx.sqlite.db.SupportSQLiteDatabase -import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.ResourceUtils -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.navinfo.collect.library.data.entity.LinkRelation -import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean -import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.LoginUserBean import com.navinfo.omqs.bean.SysUserBean @@ -94,13 +86,18 @@ class LoginViewModel @Inject constructor( var sharedPreferences: SharedPreferences? = null - var dataIndex = 0 - init { - loginUser.value = LoginUserBean(userCode = "haofuyue00213", passWord = "123456") } + fun lastLoginUserInfo(context: Context){ + sharedPreferences = + context.getSharedPreferences("USER_SHAREDPREFERENCES", Context.MODE_PRIVATE) + val userNameCache = sharedPreferences?.getString("userName", "lixiaoming00427") + val passwordCache = sharedPreferences?.getString("passWord", "123456") + loginUser.value = LoginUserBean(userCode = "$userNameCache", passWord = "$passwordCache") + } + /** * 处理注册按钮 */ @@ -270,130 +267,97 @@ class LoginViewModel @Inject constructor( * 获取任务列表 */ private suspend fun getTaskList(context: Context) { - loginStatus.postValue(LoginStatus.LOGIN_STATUS_NET_GET_TASK_LIST) - when (val result = networkService.getTaskList(Constant.USER_ID)) { - is NetResult.Success -> { - if (result.data != null) { - val realm = Realm.getDefaultInstance() - realm.executeTransaction { - result.data.obj?.let { list -> - for (index in list.indices) { - var inSertData = true - val task = list[index] - val item = realm.where(TaskBean::class.java).equalTo( - "id", task.id - ).findFirst() - if (item != null) { - task.fileSize = item.fileSize - task.status = item.status - task.currentSize = item.currentSize - //增加mesh==null兼容性处理 - for (hadLink in item.hadLinkDvoList) { - if(hadLink.mesh==null){ - hadLink.mesh = "" + + //每天主动请求一次,其他情况列表内自己手动请求 + val questToday = sharedPreferences?.getBoolean(DateTimeUtil.getYYYYMMDDDate()+"getTaskList",false) + + if(!questToday!!){ + loginStatus.postValue(LoginStatus.LOGIN_STATUS_NET_GET_TASK_LIST) + Log.e("qj","获取任务请求开始==") + when (val result = networkService.getTaskList(Constant.USER_ID)) { + is NetResult.Success -> { + if (result.data != null) { + Log.e("qj","获取任务返回成功==") + val realm = Realm.getDefaultInstance() + realm.executeTransaction { + result.data.obj?.let { list -> + for (index in list.indices) { + var inSertData = true + val task = list[index] + val item = realm.where(TaskBean::class.java).equalTo( + "id", task.id + ).findFirst() + if (item != null) { + task.fileSize = item.fileSize + task.status = item.status + task.currentSize = item.currentSize + //增加mesh==null兼容性处理 + for (hadLink in item.hadLinkDvoList) { + if(hadLink.mesh==null){ + hadLink.mesh = "" + } + } + task.hadLinkDvoList = item.hadLinkDvoList + task.syncStatus = item.syncStatus + //已上传后不在更新操作时间 + if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { + //赋值时间,用于查询过滤 + task.operationTime = DateTimeUtil.getNowDate().time + }else{ + continue + } + } else { + for (hadLink in task.hadLinkDvoList) { + if(hadLink.geometry==null){ + inSertData = false + }else if(hadLink.mesh==null){ + hadLink.mesh = "" + }else{ + hadLink.taskId = task.id + } + Log.e("qj","mesh==${hadLink.mesh}") } - } - task.hadLinkDvoList = item.hadLinkDvoList - task.syncStatus = item.syncStatus - //已上传后不在更新操作时间 - if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { //赋值时间,用于查询过滤 task.operationTime = DateTimeUtil.getNowDate().time - }else{ - continue } - } else { - for (hadLink in task.hadLinkDvoList) { - if(hadLink.geometry==null){ - inSertData = false - }else if(hadLink.mesh==null){ - hadLink.mesh = "" - }else{ - hadLink.taskId = task.id - } - Log.e("qj","mesh==${hadLink.mesh}") + Log.e("qj","task==${task.id}") + if(inSertData){ + realm.copyToRealmOrUpdate(task) } - //赋值时间,用于查询过滤 - task.operationTime = DateTimeUtil.getNowDate().time - } - Log.e("qj","task==${task.id}") - if(inSertData){ - realm.copyToRealmOrUpdate(task) } } + } - - } - realm.close() - } - //测试代码 -/* viewModelScope.launch(Dispatchers.IO) { - - - val userTaskFolder = File(Constant.USER_DATA_PATH + "/4") - if (!userTaskFolder.exists()) userTaskFolder.mkdirs() - val password = "encryp".encodeToByteArray().copyInto(ByteArray(64)) - val config = RealmConfiguration.Builder() - .directory(userTaskFolder) - .name("OMQS.realm") - .encryptionKey(password) - .allowQueriesOnUiThread(true) - .schemaVersion(2) - .build() - - var realm = Realm.getInstance(config) - var time = System.currentTimeMillis() - Log.e("qj", "test===开始安装") - Realm.compactRealm(config) - realm.beginTransaction() - - val txtFile = File(Constant.USER_DATA_PATH + "/OMDB_LANE_MARK_BOUNDARYTYPE") - // 将list数据转换为map - var gson = Gson(); - val type = object : TypeToken() {}.type - val list = FileIOUtils.readFile2List(txtFile, "UTF-8") - val count = 12 - if (list != null) { - for (i in 0 until count) { - for ((index, line) in list.withIndex()) { - if (line == null || line.trim() == "") { - continue - } - val renderEntity = gson.fromJson(line, type) - realm.insert(renderEntity) - } - } - Log.e("qj", "test===总数===${list.size*count}") + realm.close() + //增加当天请求过标识 + sharedPreferences?.edit() + ?.putBoolean(DateTimeUtil.getYYYYMMDDDate()+"getTaskList",true) + Log.e("qj","获取任务结束==") } - Log.e("qj", "test===提交===${System.currentTimeMillis() - time}") - realm.commitTransaction() - Log.e("qj", "test===提交===${System.currentTimeMillis() - time}") - realm.close() - - Log.e("qj", "test===结束===${System.currentTimeMillis() - time}") - }*/ - - loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) - } - - is NetResult.Error<*> -> { - withContext(Dispatchers.Main) { - Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT) - .show() + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) } - loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) - } - is NetResult.Failure<*> -> { - withContext(Dispatchers.Main) { - Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT) - .show() + is NetResult.Error<*> -> { + withContext(Dispatchers.Main) { + Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT) + .show() + } + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) } - loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) - } - is NetResult.Loading -> {} + is NetResult.Failure<*> -> { + withContext(Dispatchers.Main) { + Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT) + .show() + } + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + } + + is NetResult.Loading -> {} + } + }else{ + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) } } 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 365bb182..9f7d09de 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 @@ -22,8 +22,6 @@ import androidx.recyclerview.widget.RecyclerView import com.blankj.utilcode.util.ClipboardUtils import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.tabs.TabLayout -import com.navinfo.collect.library.data.entity.RenderEntity -import com.navinfo.collect.library.enums.DataCodeEnum import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.handler.MeasureLayerHandler import com.navinfo.collect.library.utils.DeflaterUtil @@ -688,7 +686,7 @@ class MainActivity : BaseActivity() { index = p0.position editText.text = null //清理已绘制线 - mapController.lineHandler.removeLine() + mapController.lineHandler.removeAllLine() mapController.markerHandle.removeMarker("location") when (p0.position) { 0 -> editText.hint = "请输入LinkPid例如:12345678" @@ -819,25 +817,15 @@ class MainActivity : BaseActivity() { * zoomOut */ fun zoomOutOnclick(view: View) { - val result = mutableListOf() - for (i in 0 until 10) { - var renderEntity: RenderEntity = RenderEntity() - renderEntity.geometry = "POINT(116.2694${i}13016946 40.0844${i}5791644373 0)" - result.add(renderEntity) + val lineString = + "LINESTRING(115.92708317758513 40.42230758745775 0, 115.9272990153405 40.422317981061205 0, 115.92750895192124 40.42232797132084 0, 115.9277199918031 40.422337964543026 0)" + val geometry = GeometryTools.createGeometry(lineString) + //定位 + mapController.animationHandler.animationByLatLon(geometry.centroid.y,geometry.centroid.x,500) + GeometryTools.getLineToDengGeoPints(geometry, 5.0)?.forEach { + mapController.markerHandle.addMarker(it, it.toString()) } - //计算后 - var index = 0 - Log.e("qj","====计算开始") - var lastRender:RenderEntity = RenderEntity() - GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,result, 5.0)?.forEach { - if(lastRender!=null&&lastRender.geometry!=null&& lastRender.geometry != ""){ - if(it.geometry!=lastRender.geometry){ - Log.e("qj","${index++}====计算后"+it.geometry) - } - } - lastRender = it - } - Log.e("qj","====计算结束") + mapController.lineHandler.showLine(geometry.toString()) mapController.animationHandler.zoomOut() } 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 f90130c0..0499fe54 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 @@ -719,9 +719,9 @@ class MainViewModel @Inject constructor( */ private suspend fun captureItem(point: GeoPoint) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - var buffer = 8.0 + var buffer = 10.0 if (mapController.mMapView.mapLevel >= 18) { - buffer = 2.0 + buffer = 2.2 } val itemList = realmOperateHelper.queryElement( GeometryTools.createPoint( @@ -1340,9 +1340,9 @@ class MainViewModel @Inject constructor( ) } - if (data.wkt != null) { +/* if (data.wkt != null) { mapController.markerHandle.removeMarker("moreInfo") - mapController.lineHandler.removeLine() + mapController.lineHandler.removeAllLine() when (data.wkt!!.geometryType) { Geometry.TYPENAME_POINT -> { val geoPoint = GeometryTools.createGeoPoint(data.wkt!!.toText()) @@ -1350,10 +1350,10 @@ class MainViewModel @Inject constructor( } Geometry.TYPENAME_LINESTRING -> { - mapController.lineHandler.showLine(data.wkt!!.toText()) + mapController.lineHandler.showSubLine(data.wkt!!.toText()) } } - } + }*/ } fun sendServerCommand( diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt index 2096ddf7..a4034382 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt @@ -12,6 +12,7 @@ import android.widget.Toast import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.RequiresApi import androidx.databinding.DataBindingUtil import androidx.navigation.NavOptions import androidx.navigation.findNavController @@ -75,6 +76,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { return binding.root } + @RequiresApi(Build.VERSION_CODES.N) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能 @@ -178,6 +180,8 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { try { signBean = it.getParcelable("SignBean") autoSave = it.getBoolean("AutoSave") + //高亮数据几何 + signBean?.let { it1 -> viewModel.show(it1.renderEntity) } } catch (_: java.lang.Exception) { } } 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 ffffb51d..000fd2b8 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 @@ -45,7 +45,9 @@ import io.realm.RealmList import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.locationtech.jts.geom.Geometry import org.oscim.core.GeoPoint +import org.oscim.core.GeometryBuffer.GeometryType import java.io.File import java.io.FileOutputStream import java.util.* @@ -73,6 +75,8 @@ class EvaluationResultViewModel @Inject constructor( private val TAG = "点选marker" + private val ELEMENT_MARKER = "elementMarker" + /** * 操作结束,销毁页面 */ @@ -155,8 +159,10 @@ class EvaluationResultViewModel @Inject constructor( override fun onCleared() { super.onCleared() mapController.mMapView.removeOnNIMapClickListener(TAG) + //移除要素marker + mapController.markerHandle.removeMarker(ELEMENT_MARKER) mapController.markerHandle.removeMarker() - mapController.lineHandler.removeLine() + mapController.lineHandler.removeAllLine() } @@ -204,7 +210,7 @@ class EvaluationResultViewModel @Inject constructor( } } else { liveDataQsRecordBean.value?.run { - elementId = bean.renderEntity.code + elementId = bean.renderEntity.id linkId = bean.linkId if (linkId.isNotEmpty()) { viewModelScope.launch { @@ -495,6 +501,7 @@ class EvaluationResultViewModel @Inject constructor( * 根据数据id,查询数据 */ + @RequiresApi(Build.VERSION_CODES.N) fun initData(id: String) { Log.e("jingo", "捕捉到的要素 id = $id") viewModelScope.launch(Dispatchers.Main) { @@ -545,14 +552,21 @@ class EvaluationResultViewModel @Inject constructor( // 显示语音数据到界面 getChatMsgEntityList() realm.close() - if (it.elementId == DataCodeEnum.OMDB_LANEINFO.code) { + //增加要素高亮 + if(it.elementId!=null){ val realm2 = realmOperateHelper.getSelectTaskRealmInstance() - val r = realm2.where(RenderEntity::class.java) - .equalTo("table", DataCodeEnum.OMDB_LANEINFO.name) - .equalTo("linkPid", it.linkId).findFirst() - if (r != null) { - renderEntity = realm2.copyFromRealm(r) - laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!) + val rEntity = realm2.where(RenderEntity::class.java).equalTo("id",it.elementId).findFirst() + if(rEntity!=null){ + show(rEntity!!) + } + if (it.classCode == DataCodeEnum.OMDB_LANEINFO.code) { + val r = realm2.where(RenderEntity::class.java) + .equalTo("table", DataCodeEnum.OMDB_LANEINFO.name) + .equalTo("linkPid", it.linkId).findFirst() + if (r != null) { + renderEntity = realm2.copyFromRealm(r) + laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!) + } } realm2.close() } @@ -561,8 +575,27 @@ class EvaluationResultViewModel @Inject constructor( liveDataToastMessage.postValue("数据读取失败") realm.close() } + } + } - + fun show(renderEntity: RenderEntity) { + if (renderEntity != null) { + if (renderEntity.wkt != null) { + mapController.markerHandle.removeMarker(ELEMENT_MARKER) + mapController.lineHandler.removeElementLine() + when (renderEntity.wkt!!.geometryType) { + Geometry.TYPENAME_POINT -> { + val geoPoint = GeometryTools.createGeoPoint(renderEntity.wkt!!.toText()) + mapController.markerHandle.addMarker(geoPoint, ELEMENT_MARKER) + } + Geometry.TYPENAME_LINESTRING -> { + mapController.lineHandler.showElementLine(renderEntity.wkt!!.toText()) + } + Geometry.TYPENAME_POLYGON -> { + mapController.lineHandler.showElementLine(renderEntity.wkt!!.toText()) + } + } + } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index 4b9a84b7..69924944 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -444,7 +444,7 @@ class TaskViewModel @Inject constructor( override fun onCleared() { mapController.mMapView.removeOnNIMapClickListener(TAG) - mapController.lineHandler.removeLine() + mapController.lineHandler.removeAllLine() sharedPreferences.unregisterOnSharedPreferenceChangeListener(this) super.onCleared() } diff --git a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt index 432ac0f7..a3d234fe 100644 --- a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt +++ b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt @@ -1858,7 +1858,7 @@ class SignUtil { "3" -> "三角形" "4" -> "圆形" "5" -> "菱形" - "6" -> "到三角形" + "6" -> "倒三角形" "7" -> "正方形" "8" -> "八角形" else -> "" diff --git a/app/src/main/res/menu/personal_center_menu.xml b/app/src/main/res/menu/personal_center_menu.xml index eddd9ad9..cc526bbd 100644 --- a/app/src/main/res/menu/personal_center_menu.xml +++ b/app/src/main/res/menu/personal_center_menu.xml @@ -64,7 +64,7 @@ + android:title="版本:24QE1_V1.1.1_20231115_A" /> diff --git a/collect-library/resources/rendertheme.xsd b/collect-library/resources/rendertheme.xsd index 150d511c..773ec248 100644 --- a/collect-library/resources/rendertheme.xsd +++ b/collect-library/resources/rendertheme.xsd @@ -245,6 +245,7 @@ + @@ -262,6 +263,10 @@ + + + + diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 548dc8b9..790ce262 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1560,15 +1560,18 @@ src="@img-src" symbol-height="24" degree="90"> - - - - + + src="@src" symbol-width="24" > + + + + + @@ -1594,11 +1597,9 @@ - + - + - - + - + - - + + + - - - + + + + + + + @@ -1644,20 +1650,31 @@ - - + - + + + + + + + + + + + + + + - - - + + - + @@ -1893,16 +1910,21 @@ - - + + + - - + + + + + + + + + @@ -1911,14 +1933,19 @@ - + - + + + + + + + @@ -1926,27 +1953,27 @@ - + - + + + src="assets:omdb/icon_4006_0.svg" symbol-width="24" > - + @@ -1956,13 +1983,13 @@ - - + + src="assets:omdb/icon_arrow_right.svg" symbol-width="24"> @@ -2024,7 +2051,7 @@ - + @@ -2035,7 +2062,7 @@ - + @@ -2053,7 +2080,7 @@ + src="@src" degree="90"> diff --git a/collect-library/src/main/assets/omdb/1301_1_v.svg b/collect-library/src/main/assets/omdb/1301_1_v.svg index 94806ed0..37f7c141 100644 --- a/collect-library/src/main/assets/omdb/1301_1_v.svg +++ b/collect-library/src/main/assets/omdb/1301_1_v.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/4010/icon_electroniceye_4010.svg b/collect-library/src/main/assets/omdb/4010/icon_electroniceye_4010.svg index cb0c181d..9f3b8322 100644 --- a/collect-library/src/main/assets/omdb/4010/icon_electroniceye_4010.svg +++ b/collect-library/src/main/assets/omdb/4010/icon_electroniceye_4010.svg @@ -1 +1,116 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/4010/left.svg b/collect-library/src/main/assets/omdb/4010/left.svg index 58e2c48e..f2dd8f88 100644 --- a/collect-library/src/main/assets/omdb/4010/left.svg +++ b/collect-library/src/main/assets/omdb/4010/left.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/4010/right.svg b/collect-library/src/main/assets/omdb/4010/right.svg index 27301104..5872709f 100644 --- a/collect-library/src/main/assets/omdb/4010/right.svg +++ b/collect-library/src/main/assets/omdb/4010/right.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/appendix/1105_00101_0.svg b/collect-library/src/main/assets/omdb/appendix/1105_00101_0.svg index 18fca483..89fc9e73 100644 --- a/collect-library/src/main/assets/omdb/appendix/1105_00101_0.svg +++ b/collect-library/src/main/assets/omdb/appendix/1105_00101_0.svg @@ -1,11 +1,25 @@ - + - - + + + + + + + + + + + + + + + + @@ -17,20 +31,26 @@ - - - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/appendix/1105_00101_0_2.svg b/collect-library/src/main/assets/omdb/appendix/1105_00101_0_2.svg new file mode 100644 index 00000000..8f7e2f92 --- /dev/null +++ b/collect-library/src/main/assets/omdb/appendix/1105_00101_0_2.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/appendix/icon_2013_2_3.svg b/collect-library/src/main/assets/omdb/appendix/icon_2013_2_3.svg new file mode 100644 index 00000000..1de2183e --- /dev/null +++ b/collect-library/src/main/assets/omdb/appendix/icon_2013_2_3.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_1012_0.svg b/collect-library/src/main/assets/omdb/icon_1012_0.svg index 6445aca0..b567d014 100644 --- a/collect-library/src/main/assets/omdb/icon_1012_0.svg +++ b/collect-library/src/main/assets/omdb/icon_1012_0.svg @@ -1 +1,58 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2013_3_1.svg b/collect-library/src/main/assets/omdb/icon_2013_2_2.svg similarity index 100% rename from collect-library/src/main/assets/omdb/icon_2013_3_1.svg rename to collect-library/src/main/assets/omdb/icon_2013_2_2.svg diff --git a/collect-library/src/main/assets/omdb/icon_2013_2_3.svg b/collect-library/src/main/assets/omdb/icon_2013_2_3.svg new file mode 100644 index 00000000..5dd6d81d --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2013_2_3.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2013_3.svg b/collect-library/src/main/assets/omdb/icon_2013_3.svg index 0c6d414c..41884305 100644 --- a/collect-library/src/main/assets/omdb/icon_2013_3.svg +++ b/collect-library/src/main/assets/omdb/icon_2013_3.svg @@ -1,1573 +1,3053 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2083_0.svg b/collect-library/src/main/assets/omdb/icon_2083_0.svg index e9433758..d9a06b28 100644 --- a/collect-library/src/main/assets/omdb/icon_2083_0.svg +++ b/collect-library/src/main/assets/omdb/icon_2083_0.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2083_7.svg b/collect-library/src/main/assets/omdb/icon_2083_7.svg deleted file mode 100644 index 9924fb43..00000000 --- a/collect-library/src/main/assets/omdb/icon_2083_7.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2083_7_1.svg b/collect-library/src/main/assets/omdb/icon_2083_7_1.svg deleted file mode 100644 index 6a3b8956..00000000 --- a/collect-library/src/main/assets/omdb/icon_2083_7_1.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2083_8.svg b/collect-library/src/main/assets/omdb/icon_2083_8.svg index a5e7bda8..350ee63b 100644 --- a/collect-library/src/main/assets/omdb/icon_2083_8.svg +++ b/collect-library/src/main/assets/omdb/icon_2083_8.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2083_81.svg b/collect-library/src/main/assets/omdb/icon_2083_81.svg deleted file mode 100644 index d23d1847..00000000 --- a/collect-library/src/main/assets/omdb/icon_2083_81.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4002_0.png b/collect-library/src/main/assets/omdb/icon_4002_0.png new file mode 100644 index 00000000..f2d54af2 Binary files /dev/null and b/collect-library/src/main/assets/omdb/icon_4002_0.png differ diff --git a/collect-library/src/main/assets/omdb/icon_4002_0.svg b/collect-library/src/main/assets/omdb/icon_4002_0.svg index 4f4ac0a7..498f6e29 100644 --- a/collect-library/src/main/assets/omdb/icon_4002_0.svg +++ b/collect-library/src/main/assets/omdb/icon_4002_0.svg @@ -1,43 +1,33 @@ - + + - + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4002_1.png b/collect-library/src/main/assets/omdb/icon_4002_1.png new file mode 100644 index 00000000..19dbf19a Binary files /dev/null and b/collect-library/src/main/assets/omdb/icon_4002_1.png differ diff --git a/collect-library/src/main/assets/omdb/icon_4002_1.svg b/collect-library/src/main/assets/omdb/icon_4002_1.svg index 158b4f48..bee6bedf 100644 --- a/collect-library/src/main/assets/omdb/icon_4002_1.svg +++ b/collect-library/src/main/assets/omdb/icon_4002_1.svg @@ -1 +1,38 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4003_0.svg b/collect-library/src/main/assets/omdb/icon_4003_0.svg index 50a7b3b7..a4b0b73b 100644 --- a/collect-library/src/main/assets/omdb/icon_4003_0.svg +++ b/collect-library/src/main/assets/omdb/icon_4003_0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4003_1.svg b/collect-library/src/main/assets/omdb/icon_4003_1.svg index 9254e9c0..656c30ea 100644 --- a/collect-library/src/main/assets/omdb/icon_4003_1.svg +++ b/collect-library/src/main/assets/omdb/icon_4003_1.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4004_0.svg b/collect-library/src/main/assets/omdb/icon_4004_0.svg index bbbc966e..6f7cd500 100644 --- a/collect-library/src/main/assets/omdb/icon_4004_0.svg +++ b/collect-library/src/main/assets/omdb/icon_4004_0.svg @@ -1,45 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4005.svg b/collect-library/src/main/assets/omdb/icon_4005.svg index f07e08a7..9827c834 100644 --- a/collect-library/src/main/assets/omdb/icon_4005.svg +++ b/collect-library/src/main/assets/omdb/icon_4005.svg @@ -1 +1,17 @@ - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4006_0.svg b/collect-library/src/main/assets/omdb/icon_4006_0.svg index 06c69498..5b844f39 100644 --- a/collect-library/src/main/assets/omdb/icon_4006_0.svg +++ b/collect-library/src/main/assets/omdb/icon_4006_0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4022_0.svg b/collect-library/src/main/assets/omdb/icon_4022_0.svg index efaaed34..f60939cc 100644 --- a/collect-library/src/main/assets/omdb/icon_4022_0.svg +++ b/collect-library/src/main/assets/omdb/icon_4022_0.svg @@ -1,24 +1,27 @@ - + - - - - - - + + + + + + + + + + + - + - + - + @@ -26,17 +29,17 @@ - + - + - + @@ -48,8 +51,8 @@ - + @@ -59,8 +62,8 @@ - + @@ -69,13 +72,13 @@ - + - + @@ -87,40 +90,44 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_5005_0.png b/collect-library/src/main/assets/omdb/icon_5005_0.png new file mode 100644 index 00000000..d8ebf366 Binary files /dev/null and b/collect-library/src/main/assets/omdb/icon_5005_0.png differ diff --git a/collect-library/src/main/assets/omdb/icon_arrow_right.svg b/collect-library/src/main/assets/omdb/icon_arrow_right.svg index 73b8c5dc..24109140 100644 --- a/collect-library/src/main/assets/omdb/icon_arrow_right.svg +++ b/collect-library/src/main/assets/omdb/icon_arrow_right.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_pole_3006.svg b/collect-library/src/main/assets/omdb/icon_pole_3006.svg index 9c70037f..65984f59 100644 --- a/collect-library/src/main/assets/omdb/icon_pole_3006.svg +++ b/collect-library/src/main/assets/omdb/icon_pole_3006.svg @@ -1 +1,47 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_pole_barrier.svg b/collect-library/src/main/assets/omdb/icon_pole_barrier.svg new file mode 100644 index 00000000..f57358c0 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_pole_barrier.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_crosswalk_3014.svg b/collect-library/src/main/assets/omdb/object_crosswalk_3014.svg index d8aceae7..84bc2411 100644 --- a/collect-library/src/main/assets/omdb/object_crosswalk_3014.svg +++ b/collect-library/src/main/assets/omdb/object_crosswalk_3014.svg @@ -1 +1,26 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg index 23936b2e..f6e36b0e 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg index 1ea27fef..d1fdf880 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg index 6f134c24..6b287a26 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg index 1a68fbe7..e8c7ec57 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg index c5878f4b..125f6def 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg index d4ab85b6..9d80a474 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt index 4bf9b066..8b375f3f 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt @@ -24,7 +24,6 @@ import java.util.* open class ReferenceEntity() : RealmObject(), Parcelable { @PrimaryKey var id: String = UUID.randomUUID().toString() // id - @Ignore lateinit var name: String //要素名 lateinit var table: String //要素表名 var propertiesDb: String = "" diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt index 139b2816..b20ad6c3 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt @@ -40,6 +40,24 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( layer } + /** + * 高亮线图层,同时只高亮一条线,如要素本身线型 + */ + private val mDataGeometryPathLayer: PathLayer by lazy { + //高亮线绘制线 样式 + val defaultLineStyle = Style.builder() + .stippleColor(context.resources.getColor(R.color.teal_200)) + .strokeWidth(5f) + .fillColor(context.resources.getColor(R.color.draw_line_blue2_color)) + .fillAlpha(0.3f) + .strokeColor(context.resources.getColor(R.color.draw_line_blue2_color)) + .fixed(true).build() + + val layer = PathLayer(mMapView.vtmMap, defaultLineStyle) + addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_LINE) + layer + } + /** * 路口高亮 @@ -139,6 +157,42 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( } } + /** + * 高亮一条线 + */ + fun showElementLine(list:List) { + try { + mDataGeometryPathLayer.clearPath() + mDataGeometryPathLayer.setPoints(list) + mDataGeometryPathLayer.isEnabled = true + } catch (e: Exception) { + Toast.makeText(mContext, "高亮路线失败 ${e.message}", Toast.LENGTH_SHORT).show() + } + } + + + + + /** + * 高亮一条线 + */ + fun showElementLine(geometry: String) { + try { + mDataGeometryPathLayer.clearPath() + mDataGeometryPathLayer.setPoints(GeometryTools.getGeoPoints(geometry)) + mDataGeometryPathLayer.isEnabled = true + } catch (e: Exception) { + Toast.makeText(mContext, "高亮路线失败 ${e.message}", Toast.LENGTH_SHORT).show() + } + } + + /** + * 取消高亮线 + */ + fun removeElementLine() { + mDataGeometryPathLayer.clearPath() + mDataGeometryPathLayer.isEnabled = false + } /** * 取消高亮线 @@ -148,6 +202,14 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( mDefaultPathLayer.isEnabled = false } + /** + * 取消高亮线 + */ + fun removeAllLine() { + removeLine() + removeElementLine() + } + /** * 移除所有任务高亮线 */ diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt index d7bc72c7..b93215e3 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt @@ -93,6 +93,26 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) : layer } + /** + * 默认marker图层 + */ + private val mDataMarkerLayer: ItemizedLayer by lazy { + //新增marker图标样式 + val mDefaultBitmap = + AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.mipmap.icon_path_maker)) + mDefaultBitmap.scaleTo(150, 150) + val markerSymbol = MarkerSymbol( + mDefaultBitmap, + MarkerSymbol.HotspotPlace.CENTER + ) + val layer = ItemizedLayer( + mapView.vtmMap, + markerSymbol, + ) + addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_MARKER) + layer + } + private val niLocationBitmap: Bitmap by lazy { AndroidBitmap( BitmapFactory.decodeResource( 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 d7505186..0db8f305 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 @@ -29,6 +29,7 @@ import org.oscim.tiling.source.mvt.TileDecoder; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,19 +70,54 @@ public class OMDBDataDecoder extends TileDecoder { mTileX = tile.tileX / mTileScale; mTileY = tile.tileY / mTileScale; mTileScale *= Tile.SIZE; + List list = new ArrayList<>(); + List traffList = new ArrayList<>(); listResult.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(RenderEntity renderEntity) { - if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) { - Map properties = new HashMap<>(renderEntity.getProperties().size()); - properties.putAll(renderEntity.getProperties()); - parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); + if (renderEntity.getCode().equals(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode())) { + list.add(renderEntity); + } else if (renderEntity.getCode().equals(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode())) { + traffList.add(renderEntity); + } else { + Map properties = new HashMap<>(renderEntity.getProperties().size()); + properties.putAll(renderEntity.getProperties()); + parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); + } } else { // Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()+"==="+renderEntity.getEnable()); } } }); + //增加交通标牌聚合显示 + List list1 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode(), list, 5.0); + if (list1 != null && list1.size() > 0) { + Log.e("qj", "聚合交通标牌转换开始" + list.size()); + list1.stream().iterator().forEachRemaining(new Consumer() { + @Override + public void accept(RenderEntity renderEntity) { + Map properties = new HashMap<>(renderEntity.getProperties().size()); + properties.putAll(renderEntity.getProperties()); + parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); + } + }); + Log.e("qj", "聚合交通标牌转换结束" + list1.size()); + } + //增加交通标牌聚合显示 + List list2 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode(), traffList, 5.0); + if (list2 != null && list2.size() > 0) { + Log.e("qj", "聚合红绿灯转换开始" + traffList.size()); + list2.stream().iterator().forEachRemaining(new Consumer() { + @Override + public void accept(RenderEntity renderEntity) { + Map properties = new HashMap<>(renderEntity.getProperties().size()); + properties.putAll(renderEntity.getProperties()); + parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); + } + }); + Log.e("qj", "聚合红绿灯转换结束" + list2.size()); + } return true; } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java index 12ad8caf..8fa9f0fc 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java @@ -113,9 +113,10 @@ public class OMDBTileDataSource implements ITileDataSource { } else { sql += " and enable>=0"; } + realmQuery.rawPredicate(sql); -// 筛选不显示的数据 + //筛选不显示的数据 if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { realmQuery.beginGroup(); for (String type : Constant.HAD_LAYER_INVISIABLE_ARRAY) { @@ -138,10 +139,7 @@ public class OMDBTileDataSource implements ITileDataSource { // .filter((RenderEntity renderEntity) -> MercatorProjection.longitudeToTileX(viewport.fromScreenPoint(0,0).getLongitude(), (byte) Constant.DATA_ZOOM) == currentTileX || renderEntity.getTileX().stream().min(Integer::compare).get() == currentTileX) .collect(Collectors.toList()); - List list = GeometryTools.groupByDistance("3005", listResult, 5.0); - - mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, list); - + mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, listResult); mapDataSink.completed(QueryResult.SUCCESS); } else { diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java index 1a660a89..ad59f465 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java @@ -35,7 +35,7 @@ import java.util.List; * @author qj 几何工具类 */ public class GeometryTools { - + private final static String TAG = "GeometryTools"; static final double PI = 3.14159216; private static volatile GeometryTools mInstance; static double earthRadiusMeters = 6371000.0; @@ -1581,7 +1581,7 @@ public class GeometryTools { * @param list * @return */ - public static List groupByDistance(String code,List list, double disance) { + public static synchronized List groupByDistance(String code, List list, double disance) { if (list == null || disance <= 0) { return null; @@ -1589,52 +1589,147 @@ public class GeometryTools { List listReslut = new ArrayList<>(); - java.util.Map calcMap = new HashMap<>(); + java.util.Map calcMap = new HashMap<>(); - int count = 0; + Log.e("qj", listReslut.size() + "==判断开始==" + list.size() + "===" + calcMap.size()); //遍历开始 for (RenderEntity renderEntity : list) { - if(!TextUtils.isEmpty(code)&&!renderEntity.getCode().equals(code)){ - listReslut.add(renderEntity); - calcMap.put(renderEntity.getId(),renderEntity); - continue; - } + int count = 0; + Log.e("qj", listReslut.size() + "==判断0000"); + + //计算过的不在进行遍历 if (!calcMap.containsKey(renderEntity.getId())) { //跟要素遍历对比,如果统一个点直接标记计算并记录在内,已经计算过不在二次计算 for (RenderEntity renderEntityTemp : list) { - if (!calcMap.containsKey(renderEntity.getId())) { - if (renderEntity.getId().equals(renderEntityTemp.getId())) { - listReslut.add(renderEntityTemp); - count++; - Log.e("qj", "====计算间距" + count); - calcMap.put(renderEntityTemp.getId(), renderEntityTemp); + if (!calcMap.containsKey(renderEntityTemp.getId())) { + + //非当前code不参与运算 + if (!TextUtils.isEmpty(code) && !renderEntityTemp.getCode().equals(code)) { + listReslut.add(renderEntity); + calcMap.put(renderEntityTemp.getId(), renderEntityTemp.getCode()); + Log.e("qj", listReslut.size() + "==判断1111"); } else { GeoPoint geoPoint = createGeoPoint(renderEntity.getGeometry()); GeoPoint geoPoint1 = createGeoPoint(renderEntityTemp.getGeometry()); double dis = getDistance(geoPoint.getLatitude(), geoPoint.getLongitude(), geoPoint1.getLatitude(), geoPoint1.getLongitude()); - Log.e("qj", "====计算间距" + dis); if (geoPoint != null && geoPoint1 != null && dis <= disance) { - //只取第一个坐标 - renderEntityTemp.setGeometry(renderEntity.getGeometry()); - //renderEntity.setProperties(renderEntity.getProperties()); - calcMap.put(renderEntityTemp.getId(), renderEntityTemp); - listReslut.add(renderEntityTemp); + count++; + //只保留一条 + if (count == 1) { + renderEntityTemp.getProperties().put("src", "assets:omdb/appendix/1105_00101_0.svg"); + listReslut.add(renderEntityTemp); + Log.e("qj", listReslut.size() + "==判断3333"); + } + calcMap.put(renderEntityTemp.getId(), renderEntityTemp.getCode()); + Log.e("qj", "====计算间距" + dis); } } } } - + //增加同点位聚合个数统计 + if (listReslut.size() > 0) { + if (count > 1) { + listReslut.get(listReslut.size() - 1).getProperties().put("name", count + ""); + } else { + listReslut.get(listReslut.size() - 1).getProperties().put("name", ""); + } + } } } - Log.e("qj", listReslut.size()+"==判断后=="+list.size()+"==="+calcMap.size()); + Log.e("qj", listReslut.size() + "==判断结束==" + list.size() + "===" + calcMap.size()); return listReslut; } + + /** + * 线几何按距离等分点 + */ + public static synchronized List getLineToDengGeoPints(Geometry lineGeometry, double dengDisance) { + List geoPointList = new ArrayList<>(); + //获取线几何点 + List list = getGeoPoints(lineGeometry); + + if(list!=null&&list.size()>=2) { + + for (int i = 0; i < list.size() - 1; i++) { + + GeoPoint geoPoint1 = list.get(i); + + GeoPoint geoPoint2 = list.get(i + 1); + + double disance = getDistance(geoPoint1.getLatitude(), geoPoint1.getLongitude(), geoPoint2.getLatitude(), geoPoint2.getLongitude()); + + //只有第一个点进行添加,后面数据过滤掉 + if(i==0){ + geoPointList.add(geoPoint1); + } + + geoPointList.add(geoPoint2); + + if (disance > dengDisance) { + //向上取整 + int num = (int) Math.ceil(disance / dengDisance); + + //计算等分数据 + List dengList = getDengGeoPoint(geoPoint1, geoPoint2, num); + + if (dengList != null && dengList.size() > 0) { + + geoPointList.addAll(dengList); + } + } + } + } + return geoPointList; + } + + + /** + * 计算两点之间等距的经纬度 + */ + private static List getDengGeoPoint(GeoPoint geoPoint1, GeoPoint geoPoint2, int number) { + + double aaa, bbb, ccc = 0, ddd = 0; + + List geoPointList = new ArrayList<>(); + + for (int i = 1; i < number + 1; i++) { + if (geoPoint1.getLongitude() > geoPoint2.getLongitude() && geoPoint1.getLatitude() > geoPoint2.getLatitude()) { + aaa = (geoPoint1.getLongitude() - geoPoint2.getLongitude()) / (number + 1); + ccc = geoPoint2.getLongitude() + aaa * (i); + bbb = (geoPoint1.getLatitude() - geoPoint2.getLatitude()) / (number + 1); + ddd = bbb * (i) + geoPoint2.getLatitude(); + Log.e(TAG, "getLatLng:a " + ddd + " " + ccc); + } else if (geoPoint1.getLongitude() < geoPoint2.getLongitude() && geoPoint1.getLatitude() < geoPoint2.getLatitude()) { + aaa = (geoPoint2.getLongitude() - geoPoint1.getLongitude()) / (number + 1); + ccc = geoPoint1.getLongitude() + aaa * (i); + bbb = (geoPoint2.getLatitude() - geoPoint1.getLatitude()) / (number + 1); + ddd = geoPoint1.getLatitude() + bbb * i; + Log.e(TAG, "getLatLng:b " + ddd + " " + ccc); + } else if (geoPoint1.getLongitude() > geoPoint2.getLongitude() && geoPoint1.getLatitude() < geoPoint2.getLatitude()) { + aaa = (geoPoint1.getLongitude() - geoPoint2.getLongitude()) / (number + 1); + ccc = geoPoint2.getLongitude() + aaa * (number + 1 - i); + bbb = (geoPoint2.getLatitude() - geoPoint1.getLatitude()) / (number + 1); + ddd = geoPoint1.getLatitude() + bbb * i; + Log.e(TAG, "getLatLng:c " + ddd + " " + ccc); + } else if (geoPoint1.getLongitude() < geoPoint2.getLongitude() && geoPoint1.getLatitude() > geoPoint2.getLatitude()) { + aaa = (geoPoint2.getLongitude() - geoPoint1.getLongitude()) / (number + 1); + ccc = geoPoint1.getLongitude() + aaa * (i); + bbb = (geoPoint1.getLatitude() - geoPoint2.getLatitude()) / (number + 1); + ddd = geoPoint1.getLatitude() - bbb * i; + Log.e(TAG, "getLatLng:d " + ddd + " " + ccc); + } + + geoPointList.add(new GeoPoint(ddd, ccc)); + } + + return geoPointList; + } }