Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS

 Conflicts:
	app/src/main/assets/omdb_config.json
	app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
	app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt
	vtm
This commit is contained in:
squallzhjch
2023-10-26 09:45:16 +08:00
19 changed files with 1018 additions and 760 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -458,10 +458,10 @@ class ImportOMDBHelper @AssistedInject constructor(
}
}
} else if (renderEntity.code.toInt() == DataCodeEnum.OMDB_INTERSECTION.code.toInt() && renderEntity.properties.containsKey(
"linkList"
)
) {
} else if (renderEntity.code.toInt() == DataCodeEnum.OMDB_INTERSECTION.code.toInt()||renderEntity.code.toInt() == DataCodeEnum.OMDB_LANE_CONSTRUCTION.code.toInt() && renderEntity.properties.containsKey(
"linkList"
)
) {
if (renderEntity.properties["linkList"] != null) {
@@ -805,26 +805,6 @@ class ImportOMDBHelper @AssistedInject constructor(
}
bufferedReader.close()
}
// // 将listResult数据插入到Realm数据库中
// currentConfig.let {
// val list = FileIOUtils.readFile2List(txtFile, "UTF-8")
//// Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}")
// if (list != null) {
// // 将list数据转换为map
// for ((index, line) in list.withIndex()) {
//
// }
//
// }
// }
// // 如果当前解析的是OMDB_RD_LINK数据将其缓存在预处理类中以便后续处理其他要素时使用
// if (currentConfig.code == DataCodeEnum.OMDB_RD_LINK.code.toInt()) {
//// importConfig.preProcess.cacheRdLink =
//// listResult.associateBy { it.properties["linkPid"] }
// // 将sNodeId和eNodeId放在外层关联对象中优化查询效率
// }
// 1个文件发送一次flow流
emit("${processIndex}/${tableNum}")
// Log.d("ImportOMDBHelper", "表解析===2${currentConfig.table}")

View File

@@ -10,6 +10,7 @@ import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.StrZipUtil
import com.navinfo.omqs.Constant
import io.realm.Realm
import io.realm.RealmModel
import org.json.JSONArray
import org.json.JSONObject
import org.locationtech.jts.algorithm.Angle
@@ -57,9 +58,6 @@ class ImportPreProcess {
}
}
}
// // 根据linkIn和linkOut从数据库获取对应的link数据
// Realm.getInstance(Constant.currentInstallTaskConfig)
return true
}
@@ -248,6 +246,59 @@ class ImportPreProcess {
insertData(listResult)
}
/**
* 生成车道类型起终点参考数据
* */
fun generateLaneTypeAccessS2ERefPoint(renderEntity: RenderEntity) {
// 如果车道类型非常规车道(第0bit的数据),则需要生成辅助数据
if (renderEntity.properties["laneType"]!!.toInt()>0) {
val geometry = GeometryTools.createGeometry(renderEntity.properties["geometry"])
val pointEnd = geometry!!.coordinates[geometry.numPoints - 1] // 获取这个geometry对应的结束点坐标
val pointStart = geometry!!.coordinates[0] // 获取这个geometry对应的起点
val listResult = mutableListOf<ReferenceEntity>()
// 将这个起终点的线记录在数据中
val startReference = ReferenceEntity()
startReference.renderEntityId = renderEntity.id
startReference.name = "${renderEntity.name}参考点"
startReference.code = renderEntity.code
startReference.table = renderEntity.table
startReference.zoomMin = renderEntity.zoomMin
startReference.zoomMax = renderEntity.zoomMax
startReference.taskId = renderEntity.taskId
startReference.enable = renderEntity.enable
// 起点坐标
startReference.geometry =
GeometryTools.createGeometry(GeoPoint(pointStart.y, pointStart.x)).toString()
startReference.properties["qi_table"] = renderEntity.table
startReference.properties["type"] = "s_2_p"
startReference.properties["geometry"] = startReference.geometry
listResult.add(startReference)
val endReference = ReferenceEntity()
endReference.renderEntityId = renderEntity.id
endReference.name = "${renderEntity.name}参考点"
endReference.code = renderEntity.code
endReference.table = renderEntity.table
endReference.zoomMin = renderEntity.zoomMin
endReference.zoomMax = renderEntity.zoomMax
endReference.taskId = renderEntity.taskId
endReference.enable = renderEntity.enable
// 终点坐标
endReference.geometry =
GeometryTools.createGeometry(GeoPoint(pointEnd.y, pointEnd.x)).toString()
endReference.properties["qi_table"] = renderEntity.table
endReference.properties["type"] = "e_2_p"
endReference.properties["geometry"] = endReference.geometry
listResult.add(endReference)
insertData(listResult)
}
}
fun generateS2EReferencePoint(
renderEntity: RenderEntity,
proKey: String = "",
@@ -463,30 +514,90 @@ class ImportPreProcess {
* 解析车道边线数据二级属性
* */
fun unpackingLaneBoundary(renderEntity: RenderEntity) {
var shape: JSONObject = JSONObject(
mapOf(
"lateralOffset" to 0,
"markType" to 1,
"markColor" to 0,
"markMaterial" to 1,
"markSeqNum" to 1,
"markWidth" to 10,
"markingCount" to 1
)
)
if (renderEntity.code == "2013" && !renderEntity.properties["shapeList"].isNullOrEmpty() && renderEntity.properties["shapeList"] != "null") {
if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code && !renderEntity.properties["shapeList"].isNullOrEmpty() && renderEntity.properties["shapeList"] != "null") {
// 解析shapeList将数组中的属性放会properties
val shapeList = JSONArray(renderEntity.properties["shapeList"])
for (i in 0 until shapeList.length()) {
shape = shapeList.getJSONObject(i)
if (shape.optInt("lateralOffset", 0) == 0) {
break
val boundaryType = renderEntity.properties["boundaryType"]
val listResult = mutableListOf<RenderEntity>()
if (boundaryType != null) {
var isExistOffSet0 = false
//只处理标线类型,App要求值渲染1、2、6、8
if (boundaryType.toInt() == 2) {
for (i in 0 until shapeList.length()) {
var shape = shapeList.getJSONObject(i)
val lateralOffset = shape.optInt("lateralOffset", 0)
//999999时不应用也不渲染
if (lateralOffset != 999999) {
//需要做偏移处理
if (lateralOffset != 0) {
when (shape.optInt("markType", 0)) {
1, 2, 6, 8 -> {
val renderEntityTemp = RenderEntity()
for (key in shape.keys()) {
renderEntityTemp.properties[key] = shape[key].toString()
}
renderEntityTemp.properties["qi_table"] =
renderEntity.properties["qi_table"]
renderEntityTemp.properties["qi_code"] =
renderEntity.properties["qi_code"]
renderEntityTemp.properties["qi_zoomMin"] =
renderEntity.properties["qi_zoomMin"]
renderEntityTemp.properties["qi_zoomMax"] =
renderEntity.properties["qi_zoomMax"]
renderEntityTemp.properties["name"] =
renderEntity.properties["name"]
renderEntityTemp.properties["qi_name"] =
renderEntity.properties["qi_name"]
renderEntityTemp.properties["boundaryType"] =
renderEntity.properties["boundaryType"]
renderEntityTemp.properties["featureClass"] =
renderEntity.properties["featureClass"]
renderEntityTemp.properties["featurePid"] =
renderEntity.properties["featurePid"]
renderEntityTemp.code = renderEntity.code
renderEntityTemp.table = renderEntity.table
renderEntityTemp.name = renderEntity.name
renderEntityTemp.zoomMin = renderEntity.zoomMin
renderEntityTemp.zoomMax = renderEntity.zoomMax
renderEntityTemp.enable = renderEntity.enable
renderEntityTemp.taskId = renderEntity.taskId
renderEntityTemp.catchEnable = renderEntity.catchEnable
var dis = -lateralOffset.toDouble() / 100000000
//最小值取10厘米否正渲染太近无法显示
if (dis > 0 && dis < 0.0000028) {
dis = 0.0000028
} else if (dis > -0.0000028 && dis < 0) {
dis = -0.0000028
}
renderEntityTemp.geometry = GeometryTools.computeLine(
dis,
renderEntity.geometry
)
listResult.add(renderEntityTemp)
}
}
} else {
isExistOffSet0 = true
//遍历赋值
for (key in shape.keys()) {
renderEntity.properties[key] = shape[key].toString()
}
}
}
}
//如果不存在偏移的数据时,数据本身不渲染同时也不进行捕捉
if (!isExistOffSet0) {
renderEntity.catchEnable = 0
}
if (listResult.size > 0) {
insertData(listResult)
}
}
}
}
for (key in shape.keys()) {
renderEntity.properties[key] = shape[key].toString()
}
}
/**
@@ -604,29 +715,6 @@ class ImportPreProcess {
}
}
/**
* 通过rdDirect对象向rdLink的relation字段
* */
// fun addRdLinkDirect(renderEntity: RenderEntity) {
// // 尝试更新RD_link的relation记录中的方向字段
// val rdLinkEntity = queryRdLink(renderEntity.properties["linkPid"]!!)
// if (rdLinkEntity?.linkRelation == null) {
// rdLinkEntity?.linkRelation = LinkRelation()
// }
// rdLinkEntity?.linkRelation?.direct = renderEntity.properties["direct"]!!.toInt()
// Realm.getInstance(Constant.currentInstallTaskConfig).insertOrUpdate(rdLinkEntity)
// }
/**
* 查询指定的Rdlink数据
* */
// fun queryRdLink(rdLinkId: String): RenderEntity? {
// //////// return Realm.getInstance(Constant.currentInstallTaskConfig).where(RenderEntity::class.java)
// .equalTo("code", DataCodeEnum.OMDB_RD_LINK.code)
// .and().equalTo("linkPid", rdLinkId)
// .findFirst()
// }
/**
* 生成电子眼对应的渲染名称
* */
@@ -645,31 +733,26 @@ class ImportPreProcess {
* 生成车道中心线面宽度
* */
fun generateAddWidthLine(renderEntity: RenderEntity) {
try {
// 添加车道中心面渲染原则,根据车道宽度进行渲染
val angleReference = ReferenceEntity()
// angleReference.renderEntityId = renderEntity.id
angleReference.name = "${renderEntity.name}车道中线面"
angleReference.table = renderEntity.table
angleReference.geometry =
GeometryTools.createGeometry(renderEntity.geometry).buffer(0.000035)
.toString()//GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
angleReference.properties["qi_table"] = renderEntity.table
angleReference.properties["widthProperties"] = "3"
angleReference.zoomMin = renderEntity.zoomMin
angleReference.zoomMax = renderEntity.zoomMax
angleReference.taskId = renderEntity.taskId
angleReference.enable = renderEntity.enable
val listResult = mutableListOf<ReferenceEntity>()
angleReference.propertiesDb = StrZipUtil.compress(
gson.toJson(angleReference.properties).toString()
)
listResult.add(angleReference)
insertData(listResult)
} catch (e: Exception) {
Log.e("jingo", "车道中心线 generateAddWidthLine ${e.message}")
}
// 添加车道中心面渲染原则,根据车道宽度进行渲染
val angleReference = ReferenceEntity()
// angleReference.renderEntityId = renderEntity.id
angleReference.name = "${renderEntity.name}车道中线面"
angleReference.table = renderEntity.table
angleReference.geometry =
GeometryTools.createGeometry(renderEntity.geometry).buffer(0.000035)
.toString()//GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
angleReference.properties["qi_table"] = renderEntity.table
angleReference.properties["widthProperties"] = "3"
angleReference.zoomMin = renderEntity.zoomMin
angleReference.zoomMax = renderEntity.zoomMax
angleReference.taskId = renderEntity.taskId
angleReference.enable = renderEntity.enable
val listResult = mutableListOf<ReferenceEntity>()
angleReference.propertiesDb = StrZipUtil.compress(
gson.toJson(angleReference.properties).toString()
)
listResult.add(angleReference)
insertData(listResult)
}
@@ -976,4 +1059,50 @@ class ImportPreProcess {
GeometryTools.createGeometry(GeoPoint(centerPoint!!.y, centerPoint.x)).toString()
}
}
/**
* 生成通行车辆类型Lane的渲染名称字段
* */
fun generateLaneAccessType(renderEntity: RenderEntity): Boolean {
if (renderEntity.properties.containsKey("accessCharacteristic")) {
// 解析accessCharacteristic判断是否存在指定属性
val accessCharacteristic = renderEntity.properties["accessCharacteristic"].toString().toInt()
var str = ""
if (accessCharacteristic.and(4)>0) {
str += ""
}
if (accessCharacteristic.and(8)>0) {
if (str.isNotEmpty()) {
str += "|"
}
str += ""
}
if (accessCharacteristic.and(64)>0) {
if (str.isNotEmpty()) {
str += "|"
}
str += ""
}
if (accessCharacteristic.and(128)>0) {
if (str.isNotEmpty()) {
str += "|"
}
str += ""
}
if (str.isNotEmpty()) {
renderEntity.properties["name"] = str
return true
}
}
return false
}
/**
* 生成车道点限速的名称
* */
fun obtainLaneSpeedLimitName(renderEntity: RenderEntity) {
if (renderEntity.properties.containsKey("maxSpeed")&&renderEntity.properties.containsKey("minSpeed")) {
renderEntity.properties["ref"] = "${renderEntity.properties["maxSpeed"]}|${renderEntity.properties["minSpeed"]}"
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -672,7 +672,7 @@ class MainViewModel @Inject constructor(
*/
private suspend fun captureItem(point: GeoPoint) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
var buffer = 3.2
var buffer = 8.0
if (mapController.mMapView.mapLevel >= 18) {
buffer = 2.0
}
@@ -733,7 +733,7 @@ class MainViewModel @Inject constructor(
)
}
}
DataCodeEnum.OMDB_PHY_LANENUM.code,//物理车道数
DataCodeEnum.OMDB_LANE_NUM.code, //车道数
DataCodeEnum.OMDB_RD_LINK_KIND.code,//种别,
DataCodeEnum.OMDB_RD_LINK_FUNCTION_CLASS.code, // 功能等级,
@@ -889,7 +889,7 @@ class MainViewModel @Inject constructor(
)
}
}
DataCodeEnum.OMDB_PHY_LANENUM.code,//物理车道数
DataCodeEnum.OMDB_LANE_NUM.code, //车道数
DataCodeEnum.OMDB_RD_LINK_KIND.code,//种别,
DataCodeEnum.OMDB_RD_LINK_FUNCTION_CLASS.code, // 功能等级,

View File

@@ -710,10 +710,10 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
* 更新相机状态资源
*/
public void updateCameraResources(int statusType, int indexClentCamera) {
int resId = R.id.main_activity_camera;
int resId = R.id.main_activity_status_camera;
if (indexClentCamera == 2)
resId = R.id.main_activity_camera2;
resId = R.id.main_activity_status_camera;
Drawable drawable = context.getResources().getDrawable(R.drawable.icon_page_video_a0);
@@ -770,10 +770,10 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
}
public void updateCameraBackgroundResources(int drawable, int indexClentCamera) {
int resId = R.id.main_activity_camera;
int resId = R.id.main_activity_status_camera;
if (indexClentCamera == 2)
resId = R.id.main_activity_camera2;
resId = R.id.main_activity_status_camera;
ImageView ivStatus = (ImageView) findViewById(resId);
@@ -1547,9 +1547,9 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
private int getResId() {
if (getmDeviceNum() == 2)
return R.id.main_activity_camera2;
return R.id.main_activity_status_camera;
return R.id.main_activity_camera;
return R.id.main_activity_status_camera;
}
public ShareUtil getmShareUtil() {

View File

@@ -182,7 +182,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
// 定位到指定位置
niMapController.mMapView.vtmMap.animator()
// .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708 ))
.animateTo(GeoPoint(40.0882756, 116.3033581))
.animateTo(GeoPoint(31.205913609396507, 121.56955739056055 ))
}
R.id.personal_center_menu_open_all_layer -> {

View File

@@ -104,14 +104,15 @@ class SignUtil {
else -> ""
}
}
//车道数
DataCodeEnum.OMDB_LANE_NUM.code -> {
//物理车道数OMDB_PHY_LANENUM
DataCodeEnum.OMDB_LANE_NUM.code,
DataCodeEnum.OMDB_PHY_LANENUM.code -> {
"${data.properties["laneNum"]}|${data.properties["laneS2e"]}|${data.properties["laneE2s"]}"
}
//常规点限速,条件点限速
DataCodeEnum.OMDB_SPEEDLIMIT.code, DataCodeEnum.OMDB_SPEEDLIMIT_COND.code -> getSpeedLimitMaxText(
data
)
DataCodeEnum.OMDB_SPEEDLIMIT.code, DataCodeEnum.OMDB_SPEEDLIMIT_COND.code -> getSpeedLimitMaxText(data)
//上下线分离
DataCodeEnum.OMDB_MULTI_DIGITIZED.code -> {
if (data.properties["multiDigitized"] == "1") "上下线" else " "
@@ -282,7 +283,8 @@ class SignUtil {
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code -> {
list.addAll(getLinkSpeedLimitMoreInfo(data))
}
//车道数
//车道数//增加物理车道数DataCodeEnum.OMDB_PHY_LANENUM.code
DataCodeEnum.OMDB_PHY_LANENUM.code,
DataCodeEnum.OMDB_LANE_NUM.code -> {
list.add(
TwoItemAdapterItem(
@@ -1424,6 +1426,7 @@ class SignUtil {
)
DataCodeEnum.OMDB_RD_LINK_KIND.code -> stringBuffer.append("种别${item.iconText},")
DataCodeEnum.OMDB_LINK_DIRECT.code -> stringBuffer.append("${item.iconText},")
DataCodeEnum.OMDB_PHY_LANENUM.code,//物理车道数
DataCodeEnum.OMDB_LANE_NUM.code -> stringBuffer.append(
"${
item.iconText.substringBefore(
@@ -1751,6 +1754,7 @@ class SignUtil {
*/
fun getRoadInfoIndex(element: RenderEntity): Int {
return when (element.code) {
DataCodeEnum.OMDB_PHY_LANENUM.code,//物理车道数
DataCodeEnum.OMDB_LANE_NUM.code -> 0
DataCodeEnum.OMDB_RD_LINK_KIND.code -> 1
DataCodeEnum.OMDB_RD_LINK_FUNCTION_CLASS.code -> 2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

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

View File

@@ -102,7 +102,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/top_right_drawer_btns_mr"
app:constraint_referenced_ids="main_activity_add_new,main_activity_task_line,main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_calc_distance,main_activity_menu"
app:constraint_referenced_ids="main_activity_add_new,main_activity_task_line,main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_calc_distance,main_activity_menu_layout"
app:flow_horizontalGap="6dp"
app:flow_wrapMode="aligned"
app:layout_constraintRight_toLeftOf="@id/main_activity_right_fragment"
@@ -157,13 +157,29 @@
android:onClick="@{()->mainActivity.onClickTaskLink()}"
android:src="@drawable/icon_add_road" />
<ImageButton
android:id="@+id/main_activity_menu"
android:layout_width="@dimen/top_right_drawer_wh"
android:layout_height="@dimen/top_right_drawer_wh"
android:background="@drawable/chk_icon_menu_open_close_xml"
android:elevation="2dp"
android:onClick="@{()->mainActivity.onClickMenu()}" />
<FrameLayout
android:id="@+id/main_activity_menu_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/main_activity_menu"
android:layout_width="@dimen/top_right_drawer_wh"
android:layout_height="@dimen/top_right_drawer_wh"
android:background="@drawable/chk_icon_menu_open_close_xml"
android:elevation="2dp"
android:onClick="@{()->mainActivity.onClickMenu()}" />
<ImageView
android:layout_marginLeft="16dp"
android:id="@+id/main_activity_status_camera"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/chk_icon_camera_contect_discontect_xml"
android:elevation="2dp"
tools:ignore="DuplicateIds,MissingConstraints" />
</FrameLayout>
<include
android:id="@+id/main_activity_measuring_tool"

View File

@@ -110,6 +110,7 @@
android:src="@drawable/icon_camera_img" />
<LinearLayout
android:visibility="gone"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="bottom"

View File

@@ -59,7 +59,7 @@
<item
android:id="@+id/personal_center_menu_version"
android:icon="@drawable/ic_baseline_layers_24"
android:title="版本23QE4_V1.5.6_20230928_A" />
android:title="版本23QE4_V1.5.7_20231011_A" />
</group>
<group android:checkableBehavior="single">
<item android:title="小标题">