diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index db3273a8..a211f51e 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -224,7 +224,7 @@ "k": "geometry", "v": "~", "klib": "geometry", - "vlib": "generateDirectReferenceLine()" + "vlib": "generateDirectReferenceLine(direct=3)" }, { "k": "geometry", @@ -239,12 +239,6 @@ "code": 4022, "name": "交通灯", "transformer": [ - { - "k": "angle", - "v": "~", - "klib": "angle", - "vlib": "0" - } ] }, "4601":{ diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index 1d74d315..5c6683b2 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -38,7 +38,7 @@ class ImportConfig { if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据 for (v in processKeyOrValue(value)) { if ("~" == v ) { // ~符可以匹配任意元素 - if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 + if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 // 获取方法名 val methodName = valuelib.substringBefore("(") // 获取参数 @@ -51,8 +51,9 @@ class ImportConfig { methodParams[1] to renderEntity ) for ((index, value) in params.withIndex()) { - if (methodParams.size>index+1) { - callByParams[methodParams[index+1]] = value + // 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置 + if (methodParams.size>index+2) { + callByParams[methodParams[index+2]] = value } } when(val result = method.callBy(callByParams)) { // 如果方法返回的数据类型是boolean,且返回为false,则该数据不处理 @@ -66,7 +67,7 @@ class ImportConfig { } break@m } else if (renderEntity.properties[k] == v) { // 完全匹配 - if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 + if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法 // 获取方法名 val methodName = valuelib.substringBefore("(") // 获取参数 @@ -79,8 +80,9 @@ class ImportConfig { methodParams[1] to renderEntity ) for ((index, value) in params.withIndex()) { - if (methodParams.size>index+1) { - callByParams[methodParams[index+1]] = value + // 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置 + if (methodParams.size>index+2) { + callByParams[methodParams[index+2]] = value } } when(val result = method.callBy(callByParams)) { 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 f556e19c..de475584 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -26,7 +26,7 @@ class ImportPreProcess { Log.d("checkCircleRoad", "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${linkOutEntity?.properties?.get("enodePid")}") // 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false if (linkInEntity!=null&&linkOutEntity!=null) { - if ((linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"]) || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"] + if (linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"] || linkInEntity.properties["snodePid"] == linkOutEntity.properties["snodePid"]|| linkInEntity.properties["enodePid"] == linkOutEntity.properties["enodePid"]) return false } @@ -48,11 +48,13 @@ class ImportPreProcess { isReverse = true; } } - if (Geometry.TYPENAME_POINT == geometry?.geometryType) { + if (Geometry.TYPENAME_POINT == geometry?.geometryType) { // angle为与正北方向的顺时针夹角 var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! if (isReverse) { angle += 180 } + // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 + angle=(450-angle)%360 radian = Math.toRadians(angle) } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { var coordinates = geometry.coordinates @@ -99,6 +101,8 @@ class ImportPreProcess { if (isReverse) { angle += 180 } + // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 + angle=(450-angle)%360 radian = Math.toRadians(angle) } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { var coordinates = geometry.coordinates @@ -169,6 +173,8 @@ class ImportPreProcess { if (isReverse) { angle += 180 } + // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 + angle=(450-angle)%360 radian = Math.toRadians(angle) } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { var coordinates = geometry.coordinates @@ -186,7 +192,7 @@ class ImportPreProcess { val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian) val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian) - val coorEnd = Coordinate(point.getX() + dy, point.getY() - dx) + val coorEnd = Coordinate(point.getX() + dx, point.getY() + dy) val angleReference = ReferenceEntity() angleReference.renderEntityId = renderEntity.id @@ -249,102 +255,6 @@ class ImportPreProcess { } - /** - * 自动生成普通交限的参考数据 - * */ - fun generateRestrictionRerference(renderEntity: RenderEntity) { - // 获取当前renderEntity的geometry - val geometry = renderEntity.wkt - var radian = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 - var point = Coordinate(geometry?.coordinate) - if (Geometry.TYPENAME_POINT == geometry?.geometryType) { - var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! - radian = Math.toRadians(angle) - } - - // 计算偏移距离 - val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian) - val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian) - - // 计算偏移后的点 - val pointTranS = - GeoPoint(point.getY() - dx, point.getX() + dy) // 向右偏移的点 - - // 计算与原有方向平行的终点坐标 - val pointTranE = GeoPoint(pointTranS.latitude + dy, pointTranS.longitude + dx) - - renderEntity.geometry = GeometryTools.createGeometry(pointTranS).toString() - - // 将这个点记录在数据中 - val startEndReference = ReferenceEntity() - startEndReference.renderEntityId = renderEntity.id - startEndReference.name = "普通交限参考线" - startEndReference.table = renderEntity.table - // 起终点坐标组成的线 - startEndReference.geometry = GeometryTools.createLineString(listOf(GeoPoint(point.y, point.x), pointTranS)).toString() - startEndReference.properties["qi_table"] = renderEntity.table - startEndReference.properties["type"] = "s_2_e" - Realm.getDefaultInstance().insert(startEndReference) - - val angleReference = ReferenceEntity() - angleReference.renderEntityId = renderEntity.id - angleReference.name = "普通交限参考方向" - angleReference.table = renderEntity.table - // 与原有方向指向平行的线 - angleReference.geometry = GeometryTools.createLineString(listOf(pointTranS, pointTranE)).toString() - angleReference.properties["qi_table"] = renderEntity.table - angleReference.properties["type"] = "angle" - Realm.getDefaultInstance().insert(angleReference) - } - - /** - * 自动生成电子眼的参考数据 - * */ - fun generateElectronicEyeRerference(renderEntity: RenderEntity) { - // 获取当前renderEntity的geometry - val geometry = renderEntity.wkt - var radian = 0.0 // geometry的角度,如果是点,获取angle,如果是线,获取最后两个点的方向 - var point = Coordinate(geometry?.coordinate) - if (Geometry.TYPENAME_POINT == geometry?.geometryType) { - var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! - radian = Math.toRadians(angle) - } - - // 计算偏移距离 - val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.sin(radian) - val dy: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian) - - // 计算偏移后的点 - val pointTranS = - GeoPoint(point.getY() - dx, point.getX() + dy) // 向右偏移的点 - - // 计算与原有方向平行的终点坐标 - val pointTranE = GeoPoint(pointTranS.latitude + dy, pointTranS.longitude + dx) - - renderEntity.geometry = GeometryTools.createGeometry(pointTranS).toString() - - // 记录参考数据,绘制电子眼方向 - val startEndReference = ReferenceEntity() - startEndReference.renderEntityId = renderEntity.id - startEndReference.name = "电子眼参考线" - startEndReference.table = renderEntity.table - // 起终点坐标组成的线 - startEndReference.geometry = GeometryTools.createLineString(listOf(GeoPoint(point.y, point.x), pointTranS)).toString() - startEndReference.properties["qi_table"] = renderEntity.table - startEndReference.properties["type"] = "s_2_e" - Realm.getDefaultInstance().insert(startEndReference) - - val angleReference = ReferenceEntity() - angleReference.renderEntityId = renderEntity.id - angleReference.name = "电子眼参考方向" - angleReference.table = renderEntity.table - // 与原有方向指向平行的线 - angleReference.geometry = GeometryTools.createLineString(listOf(pointTranS, pointTranE)).toString() - angleReference.properties["qi_table"] = renderEntity.table - angleReference.properties["type"] = "angle" - Realm.getDefaultInstance().insert(angleReference) - } - /** * 生成默认道路名数据 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 c46932f7..d1a82fbd 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 @@ -230,7 +230,7 @@ class MainActivity : BaseActivity() { } //监听地图中点变化 viewModel.liveDataCenterPoint.observe(this) { - Log.e("qj", "${it.longitude}") +// Log.e("qj", "${it.longitude}") try { if (it != null && it.longitude != null && it.latitude != null) { binding.mainActivityGeometry.text = "经纬度:${ diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index 69881185..3c687be0 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -112,7 +112,7 @@ class PersonalCenterFragment(private var backListener: (() -> Unit?)? = null) : viewModel.readRealmData() // 定位到指定位置 niMapController.mMapView.vtmMap.animator() - .animateTo(GeoPoint( 39.80130797136839, 116.51808677349096 )) + .animateTo(GeoPoint( 39.799624915997725, 116.51407667184905 )) } // R.id.personal_center_menu_task_list -> { // findNavController().navigate(R.id.TaskManagerFragment) diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 543f0a22..29d2d7b1 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1809,6 +1809,7 @@ + - - - + +