1、增加要素线捕捉开关2、增加图层开关与要素捕捉联动3、个人中心增加Marker显隐开关4、修复道路属性不显示道路种别问题

This commit is contained in:
qiji4215 2023-09-21 16:13:46 +08:00
parent 028fda54b5
commit ab27048d54
15 changed files with 164 additions and 61 deletions

View File

@ -152,6 +152,7 @@
"table": "OMDB_BRIDGE", "table": "OMDB_BRIDGE",
"code": 2201, "code": 2201,
"name": "桥", "name": "桥",
"catch":true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"transformer": [ "transformer": [
@ -169,6 +170,7 @@
"name": "隧道", "name": "隧道",
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"catch":true,
"transformer": [ "transformer": [
{ {
"k": "geometry", "k": "geometry",
@ -205,6 +207,7 @@
"checkLinkId": false, "checkLinkId": false,
"zoomMin": 18, "zoomMin": 18,
"zoomMax": 20, "zoomMax": 20,
"catch":true,
"transformer": [ "transformer": [
{ {
"k": "geometry", "k": "geometry",
@ -319,6 +322,7 @@
"table": "OMDB_SPEEDLIMIT_COND", "table": "OMDB_SPEEDLIMIT_COND",
"code": 4003, "code": 4003,
"name": "条件点限速", "name": "条件点限速",
"catch":true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"transformer": [ "transformer": [
@ -334,6 +338,7 @@
"table": "OMDB_SPEEDLIMIT_VAR", "table": "OMDB_SPEEDLIMIT_VAR",
"code": 4004, "code": 4004,
"name": "可变点限速", "name": "可变点限速",
"catch":true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"transformer": [ "transformer": [
@ -540,6 +545,7 @@
"code": 2004, "code": 2004,
"name": "道路属性", "name": "道路属性",
"existSubCode": true, "existSubCode": true,
"catch":true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"transformer": [ "transformer": [
@ -577,6 +583,7 @@
"table": "OMDB_ROUNDABOUT", "table": "OMDB_ROUNDABOUT",
"code": 2204, "code": 2204,
"name": "环岛", "name": "环岛",
"catch":true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 17, "zoomMax": 17,
"transformer": [ "transformer": [

View File

@ -108,6 +108,16 @@ class Constant {
*/ */
var MapRotateEnable = false var MapRotateEnable = false
/**
* Marker显隐
*/
var MapMarkerCloseEnable = false
/**
* 是否开启线捕捉
*/
var MapCatchLine = false
/** /**
* 全要素捕捉 * 全要素捕捉
*/ */

View File

@ -21,6 +21,7 @@ import org.locationtech.jts.operation.buffer.BufferOp
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
import org.oscim.core.MercatorProjection import org.oscim.core.MercatorProjection
import javax.inject.Inject import javax.inject.Inject
import kotlin.reflect.jvm.jvmName
import kotlin.streams.toList import kotlin.streams.toList
class RealmOperateHelper() { class RealmOperateHelper() {
@ -158,6 +159,7 @@ class RealmOperateHelper() {
result.addAll(it) result.addAll(it)
} }
} }
realm.close()
return result return result
} }
@ -278,36 +280,30 @@ class RealmOperateHelper() {
val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null)
val realm = getSelectTaskRealmInstance() val realm = getSelectTaskRealmInstance()
var realmList = mutableListOf<RenderEntity>() var realmList = mutableListOf<RenderEntity>()
val realmQuery = getSelectTaskRealmTools(RenderEntity::class.java, false)
.greaterThanOrEqualTo("tileX", xStart)
.lessThanOrEqualTo("tileX", xEnd)
.greaterThanOrEqualTo("tileY", yStart)
.lessThanOrEqualTo("tileY", yEnd)
// 筛选不显示的数据
if (catchAll) { if (catchAll) {
// 查询realm中对应tile号的数据 // 查询realm中对应tile号的数据
realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) realmList = realmQuery.findAll()
.greaterThanOrEqualTo("tileX", xStart)
.lessThanOrEqualTo("tileX", xEnd)
.greaterThanOrEqualTo("tileY", yStart)
.lessThanOrEqualTo("tileY", yEnd)
.findAll()
} else { } else {
// 查询realm中对应tile号的数据 // 查询realm中对应tile号的数据
if (Constant.CATCH_ALL) { if (Constant.CATCH_ALL) {
realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) realmList = realmQuery.findAll()
.greaterThanOrEqualTo("tileX", xStart)
.lessThanOrEqualTo("tileX", xEnd)
.greaterThanOrEqualTo("tileY", yStart)
.lessThanOrEqualTo("tileY", yEnd)
.findAll()
} else { } else {
realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) realmList = realmQuery.greaterThan("catchEnable", 0).findAll()
.greaterThanOrEqualTo("tileX", xStart)
.lessThanOrEqualTo("tileX", xEnd)
.greaterThanOrEqualTo("tileY", yStart)
.lessThanOrEqualTo("tileY", yEnd)
.greaterThan("catchEnable", 0)
.findAll()
} }
} }
// 将获取到的数据和查询的polygon做相交只返回相交的数据 // 将获取到的数据和查询的polygon做相交只返回相交的数据
val queryResult = realmList?.stream()?.filter { val queryResult = realmList?.stream()?.filter {
polygon.intersects(it.wkt) if(Constant.MapCatchLine){
polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase().equals("LINESTRING")||it.wkt?.geometryType?.uppercase().equals("POLYGON")
}else{
polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase().equals("POINT")||it.wkt?.geometryType?.uppercase().equals("POLYGON")
}
}?.toList() }?.toList()
queryResult?.let { queryResult?.let {
if (sort) { if (sort) {
@ -331,7 +327,7 @@ class RealmOperateHelper() {
val result = mutableListOf<RenderEntity>() val result = mutableListOf<RenderEntity>()
val realm = getSelectTaskRealmInstance() val realm = getSelectTaskRealmInstance()
val realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) val realmList = getSelectTaskRealmTools(RenderEntity::class.java, false)
.notEqualTo("table", DataCodeEnum.OMDB_RD_LINK_KIND.name) .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name)
.equalTo("properties['${LinkTable.linkPid}']", linkPid) .equalTo("properties['${LinkTable.linkPid}']", linkPid)
.findAll() .findAll()
result.addAll(realm.copyFromRealm(realmList)) result.addAll(realm.copyFromRealm(realmList))
@ -433,19 +429,26 @@ class RealmOperateHelper() {
clazz: Class<E>, clazz: Class<E>,
enableSql: Boolean enableSql: Boolean
): RealmQuery<E> { ): RealmQuery<E> {
return if (MapParamUtils.getDataLayerEnum() != null) { var realmQuery = getSelectTaskRealmInstance().where(clazz)
if (MapParamUtils.getDataLayerEnum() != null) {
if (enableSql) { if (enableSql) {
var sql = var sql =
" enable${MapParamUtils.getDataLayerEnum().sql}" " enable${MapParamUtils.getDataLayerEnum().sql}"
getSelectTaskRealmInstance().where(clazz).rawPredicate(sql) getSelectTaskRealmInstance().where(clazz).rawPredicate(sql)
} else {
getSelectTaskRealmInstance().where(clazz)
} }
} else {
getSelectTaskRealmInstance().where(clazz)
} }
if(clazz.name==RenderEntity::class.jvmName){
// 筛选不显示的数据
if (com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY != null && com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY.size > 0) {
realmQuery.beginGroup()
for (type in com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY) {
realmQuery.notEqualTo("table", type)
}
realmQuery.endGroup()
}
}
return realmQuery
} }
fun getSelectTaskRealmInstance(): Realm { fun getSelectTaskRealmInstance(): Realm {

View File

@ -781,10 +781,11 @@ class MainActivity : BaseActivity() {
} }
/** /**
* 刷新地图 * 线捕捉开关
*/ */
fun refrushOnclick(view: View) { fun catchLineOnclick(view: View) {
mapController.layerManagerHandler.updateOMDBVectorTileLayer() viewModel.setCatchRoad(!viewModel.isCatchRoad())
binding.mainActivityMapCatchLine.isSelected = viewModel.isCatchRoad()
} }
/** /**

View File

@ -180,6 +180,11 @@ class MainViewModel @Inject constructor(
*/ */
private var bHighRoad = true private var bHighRoad = true
/**
* 是不是捕捉线
*/
private var bCatchRoad = false
/** /**
* 是不是选择轨迹点 * 是不是选择轨迹点
*/ */
@ -597,11 +602,15 @@ class MainViewModel @Inject constructor(
*/ */
private suspend fun captureItem(point: GeoPoint) { private suspend fun captureItem(point: GeoPoint) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
var buffer = 3.2
if(mapController.mMapView.mapLevel>=18){
buffer = 2.0
}
val itemList = realmOperateHelper.queryElement( val itemList = realmOperateHelper.queryElement(
GeometryTools.createPoint( GeometryTools.createPoint(
point.longitude, point.latitude point.longitude, point.latitude
), ),
buffer = 3.2, catchAll = false, buffer = buffer, catchAll = false,
) )
//增加道路线过滤原则 //增加道路线过滤原则
val filterResult = itemList.filter { val filterResult = itemList.filter {
@ -1111,6 +1120,14 @@ class MainViewModel @Inject constructor(
} }
/**
* 开启捕捉线
*/
fun setCatchRoad(select: Boolean) {
bCatchRoad = select
Constant.MapCatchLine = bCatchRoad
}
/** /**
* 是否开启线高亮 * 是否开启线高亮
*/ */
@ -1118,6 +1135,13 @@ class MainViewModel @Inject constructor(
return bHighRoad return bHighRoad
} }
/**
* 是否开启捕捉线
*/
fun isCatchRoad(): Boolean {
return bCatchRoad
}
/** /**
* 开启轨迹选择 * 开启轨迹选择
*/ */

View File

@ -152,6 +152,17 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
it.title = "锁定地图旋转及视角" it.title = "锁定地图旋转及视角"
} }
} }
R.id.personal_center_menu_marker -> {
niMapController.mMapView.vtmMap.eventLayer.enableTilt(Constant.MapRotateEnable)
Constant.MapMarkerCloseEnable = !Constant.MapMarkerCloseEnable
//增加开关控制
niMapController.markerHandle.setQsRecordMarkEnable(Constant.MapMarkerCloseEnable)
if (Constant.MapMarkerCloseEnable) {
it.title = "显示Marker"
} else {
it.title = "隐藏Marker"
}
}
R.id.personal_center_menu_catch_all -> { R.id.personal_center_menu_catch_all -> {
Constant.CATCH_ALL = !Constant.CATCH_ALL Constant.CATCH_ALL = !Constant.CATCH_ALL
if (Constant.CATCH_ALL) { if (Constant.CATCH_ALL) {
@ -220,6 +231,13 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
it.title = "开启全要素捕捉" it.title = "开启全要素捕捉"
} }
} }
R.id.personal_center_menu_marker -> {
if (Constant.MapMarkerCloseEnable) {
it.title = "显示Marker"
} else {
it.title = "隐藏Marker"
}
}
} }
} }
} }

View File

@ -487,31 +487,55 @@ class TaskViewModel @Inject constructor(
fun checkUploadTask(context: Context, taskBean: TaskBean) { fun checkUploadTask(context: Context, taskBean: TaskBean) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
var result = 0
val map: MutableMap<TaskBean, Boolean> = HashMap<TaskBean, Boolean>()
taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> taskBean.hadLinkDvoList.forEach { hadLinkDvoBean ->
val objects = val objects =
realm.where(QsRecordBean::class.java).equalTo("linkId", hadLinkDvoBean.linkPid) realm.where(QsRecordBean::class.java).equalTo("linkId", hadLinkDvoBean.linkPid)
.and().equalTo("taskId", hadLinkDvoBean.taskId).findAll() .and().equalTo("taskId", hadLinkDvoBean.taskId).findAll()
val map: MutableMap<TaskBean, Boolean> = HashMap<TaskBean, Boolean>()
if (objects.isEmpty() && hadLinkDvoBean.reason.isEmpty()) { if (objects.isEmpty() && hadLinkDvoBean.reason.isEmpty()) {
withContext(Dispatchers.Main) { if(hadLinkDvoBean.linkStatus==3){
liveDataTaskUpload.postValue(map) result = 1
val mDialog = FirstDialog(context) realm.close()
mDialog.setTitle("提示?") return@forEach
mDialog.setMessage("此任务中存在未测评link请确认") }else{
mDialog.setPositiveButton( result = 2
"确定"
) { _, _ ->
mDialog.dismiss()
map[taskBean] = true
liveDataTaskUpload.postValue(map)
}
mDialog.setNegativeButton(
"取消"
) { _, _ -> mDialog.dismiss() }
mDialog.show()
} }
return@launch
} }
}
if(result==1){
withContext(Dispatchers.Main) {
liveDataTaskUpload.postValue(map)
val mDialog = FirstDialog(context)
mDialog.setTitle("提示?")
mDialog.setMessage("此任务中存在新增Link无问题记录请添加至少一条记录")
mDialog.setPositiveButton(
"确定"
) { _, _ ->
mDialog.dismiss()
}
mDialog.setCancelVisibility(View.GONE)
mDialog.show()
}
}else if(result==2){
withContext(Dispatchers.Main) {
liveDataTaskUpload.postValue(map)
val mDialog = FirstDialog(context)
mDialog.setTitle("提示?")
mDialog.setMessage("此任务中存在未测评link请确认")
mDialog.setPositiveButton(
"确定"
) { _, _ ->
mDialog.dismiss()
map[taskBean] = true
liveDataTaskUpload.postValue(map)
}
mDialog.setNegativeButton(
"取消"
) { _, _ -> mDialog.dismiss() }
mDialog.show()
}
}else{
map[taskBean] = true map[taskBean] = true
liveDataTaskUpload.postValue(map) liveDataTaskUpload.postValue(map)
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_open_catch_line" android:state_selected="true"></item>
<item android:drawable="@drawable/icon_close_catch_line" />
</selector>

View File

@ -248,13 +248,14 @@
app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview" /> app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview" />
<ImageButton <ImageButton
android:id="@+id/main_activity_map_update" android:id="@+id/main_activity_map_catch_line"
style="@style/zoom_btns_style" style="@style/zoom_btns_style"
android:background="@drawable/selector_road_line_bg"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:onClick="@{(view)->mainActivity.refrushOnclick(view)}" android:onClick="@{(view)->mainActivity.catchLineOnclick(view)}"
android:src="@drawable/icon_map_refrush" android:src="@drawable/selector_catch_line_src"
app:layout_constraintBottom_toTopOf="@id/main_activity_zoom_in" app:layout_constraintBottom_toTopOf="@id/main_activity_location"
app:layout_constraintRight_toRightOf="@id/main_activity_zoom_in" /> app:layout_constraintRight_toRightOf="@id/main_activity_location" />
<ImageButton <ImageButton
@ -287,8 +288,8 @@
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:onClick="@{()->mainActivity.onClickLocation()}" android:onClick="@{()->mainActivity.onClickLocation()}"
android:src="@drawable/icon_location_north" android:src="@drawable/icon_location_north"
app:layout_constraintBottom_toTopOf="@id/main_activity_map_update" app:layout_constraintBottom_toTopOf="@id/main_activity_zoom_in"
app:layout_constraintRight_toRightOf="@id/main_activity_map_update" /> app:layout_constraintRight_toRightOf="@id/main_activity_zoom_in" />
<ImageButton <ImageButton
android:id="@+id/main_activity_note" android:id="@+id/main_activity_note"
@ -296,8 +297,8 @@
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:onClick="@{()->mainActivity.onClickNewNote()}" android:onClick="@{()->mainActivity.onClickNewNote()}"
android:src="@drawable/icon_menu_note" android:src="@drawable/icon_menu_note"
app:layout_constraintBottom_toTopOf="@id/main_activity_location" app:layout_constraintBottom_toTopOf="@id/main_activity_map_catch_line"
app:layout_constraintRight_toRightOf="@id/main_activity_location" /> app:layout_constraintRight_toRightOf="@id/main_activity_map_catch_line" />
<ImageButton <ImageButton
android:id="@+id/main_activity_voice" android:id="@+id/main_activity_voice"
@ -338,7 +339,7 @@
android:id="@+id/main_activity_right_visibility_buttons_group2" android:id="@+id/main_activity_right_visibility_buttons_group2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:constraint_referenced_ids="main_activity_close_line,main_activity_select_line,main_activity_voice,main_activity_note,main_activity_map_update,main_activity_zoom_in,main_activity_zoom_out,main_activity_geometry,main_activity_location" /> app:constraint_referenced_ids="main_activity_close_line,main_activity_select_line,main_activity_voice,main_activity_note,main_activity_map_catch_line,main_activity_zoom_in,main_activity_zoom_out,main_activity_geometry,main_activity_location" />
<fragment <fragment
android:id="@+id/main_activity_middle_fragment" android:id="@+id/main_activity_middle_fragment"

View File

@ -46,6 +46,11 @@
android:icon="@drawable/baseline_person_24" android:icon="@drawable/baseline_person_24"
android:visible="true" android:visible="true"
android:title="锁定地图旋转及视角" /> android:title="锁定地图旋转及视角" />
<item
android:id="@+id/personal_center_menu_marker"
android:icon="@drawable/baseline_person_24"
android:visible="true"
android:title="隐藏Marker" />
<item <item
android:id="@+id/personal_center_menu_catch_all" android:id="@+id/personal_center_menu_catch_all"
android:icon="@drawable/baseline_person_24" android:icon="@drawable/baseline_person_24"

View File

@ -1811,7 +1811,7 @@
<!-- 环岛 --> <!-- 环岛 -->
<m v="OMDB_ROUNDABOUT"> <m v="OMDB_ROUNDABOUT">
<line stroke="#fcba5a" width="0.5" /> <line stroke="#fcba5a" width="0.5" />
<symbol repeat="false" repeat-start="0" gland="false" repeat-gap="32" src="assets:omdb/icon_2204_0.svg"></symbol> <symbol repeat="false" repeat-start="0" gland="false" repeat-gap="0" src="assets:omdb/icon_2204_0.svg"></symbol>
</m> </m>
<!-- 停止位置 --> <!-- 停止位置 -->

View File

@ -372,6 +372,11 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
mMapView.updateMap(true) mMapView.updateMap(true)
} }
fun setQsRecordMarkEnable(enable:Boolean){
qsRecordItemizedLayer.isEnabled = enable
mMapView.updateMap(true)
}
/** /**
* 增加或更新便签 * 增加或更新便签

2
vtm

@ -1 +1 @@
Subproject commit 719c44b65d3ed26d725b24b3a5366b281c9e4fad Subproject commit 271e7b22785b0570a34c50476e17a98dfcca7e71