增加要素按任务关联LinkPid进行渲染业务

This commit is contained in:
qiji4215 2023-08-04 15:50:42 +08:00
parent 8a8a48fbb5
commit 1765b8801b
11 changed files with 183 additions and 110 deletions

View File

@ -26,14 +26,16 @@
"code": 2008, "code": 2008,
"name": "道路种别", "name": "道路种别",
"zoomMin": 16, "zoomMin": 16,
"zoomMax": 19 "zoomMax": 19,
"checkLinkId": false
}, },
"2010": { "2010": {
"table": "OMDB_LINK_DIRECT", "table": "OMDB_LINK_DIRECT",
"code": 2010, "code": 2010,
"name": "道路方向", "name": "道路方向",
"zoomMin": 16, "zoomMin": 16,
"zoomMax": 19 "zoomMax": 19,
"checkLinkId": false
}, },
"2011": { "2011": {
"table": "OMDB_LINK_NAME", "table": "OMDB_LINK_NAME",
@ -41,6 +43,7 @@
"name": "道路名", "name": "道路名",
"zoomMin": 16, "zoomMin": 16,
"zoomMax": 19, "zoomMax": 19,
"checkLinkId": false,
"transformer": [ "transformer": [
{ {
"k": "geometry", "k": "geometry",

View File

@ -102,10 +102,13 @@ class ImportOMDBHelper @AssistedInject constructor(
FIELD_TYPE_NULL -> rowMap[columnName] = "" FIELD_TYPE_NULL -> rowMap[columnName] = ""
FIELD_TYPE_INTEGER -> rowMap[columnName] = FIELD_TYPE_INTEGER -> rowMap[columnName] =
getInt(columnIndex) getInt(columnIndex)
FIELD_TYPE_FLOAT -> rowMap[columnName] = FIELD_TYPE_FLOAT -> rowMap[columnName] =
getFloat(columnIndex) getFloat(columnIndex)
FIELD_TYPE_BLOB -> rowMap[columnName] = FIELD_TYPE_BLOB -> rowMap[columnName] =
String(getBlob(columnIndex), Charsets.UTF_8) String(getBlob(columnIndex), Charsets.UTF_8)
else -> rowMap[columnName] = getString(columnIndex) else -> rowMap[columnName] = getString(columnIndex)
} }
} }
@ -124,7 +127,8 @@ class ImportOMDBHelper @AssistedInject constructor(
* @param omdbZipFile omdb数据抽取生成的Zip文件 * @param omdbZipFile omdb数据抽取生成的Zip文件
* @param configFile 对应的配置文件 * @param configFile 对应的配置文件
* */ * */
suspend fun importOmdbZipFile(omdbZipFile: File, task: TaskBean): Flow<String> = withContext(Dispatchers.IO) { suspend fun importOmdbZipFile(omdbZipFile: File, task: TaskBean): Flow<String> =
withContext(Dispatchers.IO) {
val unZipFolder = File(omdbZipFile.parentFile, "result") val unZipFolder = File(omdbZipFile.parentFile, "result")
flow { flow {
if (unZipFolder.exists()) { if (unZipFolder.exists()) {
@ -154,14 +158,18 @@ class ImportOMDBHelper @AssistedInject constructor(
if (line == null || line.trim() == "") { if (line == null || line.trim() == "") {
continue continue
} }
Log.d("ImportOMDBHelper", "解析第:${index+1}") Log.d("ImportOMDBHelper", "解析第:${index + 1}")
val map = gson.fromJson<Map<String, Any>>(line, object:TypeToken<Map<String, Any>>(){}.getType()) val map = gson.fromJson<Map<String, Any>>(
line,
object : TypeToken<Map<String, Any>>() {}.getType()
)
.toMutableMap() .toMutableMap()
map["qi_table"] = currentConfig.table map["qi_table"] = currentConfig.table
map["qi_name"] = currentConfig.name map["qi_name"] = currentConfig.name
map["qi_code"] = map["qi_code"] =
if (currentConfig.code == 0) currentConfig.code else currentEntry.key if (currentConfig.code == 0) currentConfig.code else currentEntry.key
map["qi_code"] = if (currentConfig.code == 0) currentConfig.code else currentEntry.key map["qi_code"] =
if (currentConfig.code == 0) currentConfig.code else currentEntry.key
map["qi_zoomMin"] = currentConfig.zoomMin map["qi_zoomMin"] = currentConfig.zoomMin
map["qi_zoomMax"] = currentConfig.zoomMax map["qi_zoomMax"] = currentConfig.zoomMax
@ -177,39 +185,54 @@ class ImportOMDBHelper @AssistedInject constructor(
// 其他数据插入到Properties中 // 其他数据插入到Properties中
renderEntity.geometry = map["geometry"].toString() renderEntity.geometry = map["geometry"].toString()
for ((key, value) in map) { for ((key, value) in map) {
when (value) { when (value) {
is String -> renderEntity.properties.put(key, value)
is Int -> renderEntity.properties.put( is String -> renderEntity.properties[key] = value
key,
value.toInt().toString() is Int -> renderEntity.properties[key] = value.toInt().toString()
)
is Double -> renderEntity.properties.put( is Double -> renderEntity.properties[key] = value.toDouble().toString()
key,
value.toDouble().toString() else -> renderEntity.properties[key] = value.toString()
)
else -> renderEntity.properties.put(key, value.toString())
} }
} }
//如果要素不包括linkPid需要从其他字段获得
if(!renderEntity.properties.containsKey("linkPid")){
//交限从进入线获取
if(renderEntity.properties.containsKey("linkIn")){
renderEntity.properties["linkPid"]= renderEntity.properties["linkIn"]
}
}
//遍历判断只显示与任务Link相关的任务数据 //遍历判断只显示与任务Link相关的任务数据
if(renderEntity.properties.containsKey("linkPid")){ if (currentConfig.checkLinkId && renderEntity.properties.containsKey("linkPid")) {
task.hadLinkDvoList.forEach{
if(it.linkPid==renderEntity.properties["linkPid"]){ var currentLinkPid = renderEntity.properties["linkPid"]
renderEntity.visable = 1
Log.e("qj","${renderEntity.name}==包括任务link") task.hadLinkDvoList.forEach {
if (it.linkPid == currentLinkPid) {
renderEntity.enable = 1
Log.e("qj", "${renderEntity.name}==包括任务link")
return@forEach return@forEach
} }
} }
}else{ } else {
renderEntity.visable = 1 renderEntity.enable = 2
Log.e("qj","${renderEntity.name}==不包括任务linkPid") Log.e("qj", "${renderEntity.name}==不包括任务linkPid")
} }
listResult.add(renderEntity) listResult.add(renderEntity)
// 对renderEntity做预处理后再保存 // 对renderEntity做预处理后再保存
val resultEntity = importConfig.transformProperties(renderEntity) val resultEntity = importConfig.transformProperties(renderEntity)
if (resultEntity != null) { if (resultEntity != null) {
realm.insert(renderEntity) realm.insert(renderEntity)
} }
} }
} }
} }

View File

@ -194,7 +194,7 @@ class ImportPreProcess {
startEndReference.zoomMin = renderEntity.zoomMin startEndReference.zoomMin = renderEntity.zoomMin
startEndReference.zoomMax = renderEntity.zoomMax startEndReference.zoomMax = renderEntity.zoomMax
startEndReference.taskId = renderEntity.taskId startEndReference.taskId = renderEntity.taskId
startEndReference.visable = renderEntity.visable startEndReference.enable = renderEntity.enable
// 起终点坐标组成的线 // 起终点坐标组成的线
startEndReference.geometry = startEndReference.geometry =
GeometryTools.createLineString(arrayOf<Coordinate>(pointStart, pointEnd)).toString() GeometryTools.createLineString(arrayOf<Coordinate>(pointStart, pointEnd)).toString()
@ -221,7 +221,7 @@ class ImportPreProcess {
startReference.zoomMin = renderEntity.zoomMin startReference.zoomMin = renderEntity.zoomMin
startReference.zoomMax = renderEntity.zoomMax startReference.zoomMax = renderEntity.zoomMax
startReference.taskId = renderEntity.taskId startReference.taskId = renderEntity.taskId
startReference.visable = renderEntity.visable startReference.enable = renderEntity.enable
// 起点坐标 // 起点坐标
startReference.geometry = startReference.geometry =
@ -248,7 +248,7 @@ class ImportPreProcess {
endReference.zoomMin = renderEntity.zoomMin endReference.zoomMin = renderEntity.zoomMin
endReference.zoomMax = renderEntity.zoomMax endReference.zoomMax = renderEntity.zoomMax
endReference.taskId = renderEntity.taskId endReference.taskId = renderEntity.taskId
endReference.visable = renderEntity.visable endReference.enable = renderEntity.enable
// 终点坐标 // 终点坐标
endReference.geometry = endReference.geometry =
@ -350,7 +350,7 @@ class ImportPreProcess {
angleReference.zoomMin = renderEntity.zoomMin angleReference.zoomMin = renderEntity.zoomMin
angleReference.zoomMax = renderEntity.zoomMax angleReference.zoomMax = renderEntity.zoomMax
angleReference.taskId = renderEntity.taskId angleReference.taskId = renderEntity.taskId
angleReference.visable = renderEntity.visable angleReference.enable = renderEntity.enable
// 与原有方向指向平行的线 // 与原有方向指向平行的线
angleReference.geometry = angleReference.geometry =
WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd))) WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd)))
@ -511,7 +511,7 @@ class ImportPreProcess {
angleReference.zoomMin = renderEntity.zoomMin angleReference.zoomMin = renderEntity.zoomMin
angleReference.zoomMax = renderEntity.zoomMax angleReference.zoomMax = renderEntity.zoomMax
angleReference.taskId = renderEntity.taskId angleReference.taskId = renderEntity.taskId
angleReference.visable = renderEntity.visable angleReference.enable = renderEntity.enable
Realm.getDefaultInstance().insert(angleReference) Realm.getDefaultInstance().insert(angleReference)
} }
@ -532,7 +532,7 @@ class ImportPreProcess {
intersectionReference.zoomMin = renderEntity.zoomMin intersectionReference.zoomMin = renderEntity.zoomMin
intersectionReference.zoomMax = renderEntity.zoomMax intersectionReference.zoomMax = renderEntity.zoomMax
intersectionReference.taskId = renderEntity.taskId intersectionReference.taskId = renderEntity.taskId
intersectionReference.visable = renderEntity.visable intersectionReference.enable = renderEntity.enable
// 与原有方向指向平行的线 // 与原有方向指向平行的线
intersectionReference.geometry = intersectionReference.geometry =
GeometryTools.createGeometry(nodeJSONObject["geometry"].toString()).toString() GeometryTools.createGeometry(nodeJSONObject["geometry"].toString()).toString()

View File

@ -133,6 +133,24 @@ class RealmOperateHelper() {
return link return link
} }
suspend fun queryLinkToMutableRenderEntityList(linkPid: String): MutableList<RenderEntity>? {
val resultList = mutableListOf<RenderEntity>()
val realm = Realm.getDefaultInstance()
val realmR = realm.where(RenderEntity::class.java)
.equalTo("properties['${LinkTable.linkPid}']", linkPid)
.findAll()
val dataList = realm.copyFromRealm(realmR)
dataList.forEach {
resultList.add(it)
}
return resultList
}
/** /**
* 根据当前点位查询匹配的除Link外的其他要素数据 * 根据当前点位查询匹配的除Link外的其他要素数据
* @param point 点位经纬度信息 * @param point 点位经纬度信息

View File

@ -421,8 +421,21 @@ class TaskViewModel @Inject constructor(
r.copyToRealmOrUpdate(hadLinkDvoBean) r.copyToRealmOrUpdate(hadLinkDvoBean)
r.copyToRealmOrUpdate(currentSelectTaskBean!!) r.copyToRealmOrUpdate(currentSelectTaskBean!!)
} }
//根据Link数据查询对应数据上要素对要素进行显示重置
l.properties["linkPid"]?.let {
realmOperateHelper.queryLinkToMutableRenderEntityList(it)
?.forEach { renderEntity ->
if(renderEntity.enable!=1){
renderEntity.enable = 1
realm.executeTransaction { r ->
r.copyToRealmOrUpdate(renderEntity)
}
}
}
}
liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList) liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
mapController.lineHandler.addTaskLink(hadLinkDvoBean) mapController.lineHandler.addTaskLink(hadLinkDvoBean)
mapController.mMapView.vtmMap.updateMap(true)
} }
} }
} }
@ -461,7 +474,23 @@ class TaskViewModel @Inject constructor(
) { dialog, _ -> ) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
//重置数据为隐藏
if(hadLinkDvoBean.linkStatus==2){
realmOperateHelper.queryLinkToMutableRenderEntityList(hadLinkDvoBean.linkPid)
?.forEach { renderEntity ->
if(renderEntity.enable==1){
renderEntity.enable = 0
realm.executeTransaction { r ->
r.copyToRealmOrUpdate(renderEntity)
}
}
}
mapController.mMapView.vtmMap.updateMap(true)
}
realm.executeTransaction { realm.executeTransaction {
for (link in currentSelectTaskBean!!.hadLinkDvoList) { for (link in currentSelectTaskBean!!.hadLinkDvoList) {
if (link.linkPid == hadLinkDvoBean.linkPid) { if (link.linkPid == hadLinkDvoBean.linkPid) {

View File

@ -38,7 +38,7 @@
<item <item
android:id="@+id/personal_center_menu_version" android:id="@+id/personal_center_menu_version"
android:icon="@drawable/ic_baseline_layers_24" android:icon="@drawable/ic_baseline_layers_24"
android:title="版本ONE_QE_V1.5.0_20230728_A" /> android:title="版本ONE_23QE4_V1.1.0_20230804_A" />
</group> </group>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">
<item android:title="小标题"> <item android:title="小标题">

View File

@ -23,7 +23,7 @@ open class ReferenceEntity() : RealmObject() {
var zoomMin: Int = 18 //显示最小级别 var zoomMin: Int = 18 //显示最小级别
var zoomMax: Int = 23 //显示最大级别 var zoomMax: Int = 23 //显示最大级别
var taskId: Int = 0 //任务ID var taskId: Int = 0 //任务ID
var visable:Int = 0 // 默认0不是显示 1为渲染显示 var enable:Int = 0 // 默认0不是显示 1为渲染显示
var geometry: String = "" // 要素渲染参考的geometry该数据可能会在导入预处理环节被修改原始geometry会保存在properties的geometry字段下 var geometry: String = "" // 要素渲染参考的geometry该数据可能会在导入预处理环节被修改原始geometry会保存在properties的geometry字段下
get() { get() {
@ -62,5 +62,4 @@ open class ReferenceEntity() : RealmObject() {
constructor(name: String): this() { constructor(name: String): this() {
this.name = name this.name = name
} }
} }

View File

@ -62,7 +62,7 @@ open class RenderEntity() : RealmObject(), Parcelable {
var taskId: Int = 0 //任务ID var taskId: Int = 0 //任务ID
var zoomMin: Int = 18 //显示最小级别 var zoomMin: Int = 18 //显示最小级别
var zoomMax: Int = 23 //显示最大级别 var zoomMax: Int = 23 //显示最大级别
var visable:Int = 0 // 默认0不是显示 1为渲染显示 var enable:Int = 0 // 默认0不是显示 1为渲染显示 2为常显
constructor(name: String) : this() { constructor(name: String) : this() {
this.name = name this.name = name

View File

@ -71,12 +71,13 @@ public class OMDBDataDecoder extends TileDecoder {
listResult.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() { listResult.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
@Override @Override
public void accept(RenderEntity renderEntity) { public void accept(RenderEntity renderEntity) {
if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){ if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){
Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size()); Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size());
properties.putAll(renderEntity.getProperties()); properties.putAll(renderEntity.getProperties());
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
}else{ }else{
Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()); Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()+"==="+renderEntity.getEnable());
} }
} }
}); });

View File

@ -38,7 +38,7 @@ public class OMDBReferenceDataSource implements ITileDataSource {
int yEnd = (int) ((tile.tileY + 1) << m); int yEnd = (int) ((tile.tileY + 1) << m);
Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd); Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd);
RealmQuery<ReferenceEntity> realmQuery = Realm.getDefaultInstance().where(ReferenceEntity.class) RealmQuery<ReferenceEntity> realmQuery = Realm.getDefaultInstance().where(ReferenceEntity.class)
.rawPredicate("taskId=" + Constant.TASK_ID + " and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd); .rawPredicate("taskId=" + Constant.TASK_ID + " and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1");
// 筛选不显示的数据 // 筛选不显示的数据
if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) {
realmQuery.beginGroup(); realmQuery.beginGroup();

View File

@ -39,7 +39,7 @@ public class OMDBTileDataSource implements ITileDataSource {
int yStart = (int) tile.tileY << m; int yStart = (int) tile.tileY << m;
int yEnd = (int) ((tile.tileY + 1) << m); int yEnd = (int) ((tile.tileY + 1) << m);
Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd); Log.e("jingo", Constant.TASK_ID + " " + xStart + " " + xEnd + " " + yStart + " " + yEnd);
RealmQuery<RenderEntity> realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate("tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd+ " and visable=1"); RealmQuery<RenderEntity> realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate("tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + " and enable>=1");
// 筛选不显示的数据 // 筛选不显示的数据
if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) {
realmQuery.beginGroup(); realmQuery.beginGroup();