fix: 增加右偏功能,增加角度计算功能

This commit is contained in:
2023-05-24 14:04:11 +08:00
parent f160f1dd00
commit 4d579d87c4
5 changed files with 51 additions and 31 deletions

View File

@@ -25,6 +25,12 @@
"v": "0", "v": "0",
"klib": "maxSpeed", "klib": "maxSpeed",
"vlib": "限" "vlib": "限"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
} }
] ]
}, },
@@ -76,12 +82,7 @@
"code": 2041, "code": 2041,
"name": "车道数", "name": "车道数",
"transformer": [ "transformer": [
{
"k": "laneS2e",
"v": "~",
"klib": "left_00",
"vlib": "laneNumLeft00()"
}
] ]
} }
} }

View File

@@ -32,23 +32,25 @@ class ImportConfig {
} }
// 开始解析key和value并对数据进行匹配 // 开始解析key和value并对数据进行匹配
m@ for (k in processKeyOrValue(key)) { m@ for (k in processKeyOrValue(key)) {
for (v in processKeyOrValue(value)) { if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据
if ("~" == v &&renderEntity.properties.containsKey(k)) { // ~符可以匹配任意元素 for (v in processKeyOrValue(value)) {
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法 if ("~" == v ) { // ~符可以匹配任意元素
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") } if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
method.call(preProcess, renderEntity) val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
} else { method.call(preProcess, renderEntity)
renderEntity.properties[keylib] = valuelib } else {
renderEntity.properties[keylib] = valuelib
}
break@m
} else if (renderEntity.properties[k] == v) { // 完全匹配
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
}
break@m
} }
break@m
} else if (renderEntity.properties[k] == v) {
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
}
break@m
} }
} }
} }

View File

@@ -23,21 +23,19 @@ class ImportPreProcess {
fun translateRight(renderEntity: RenderEntity): RenderEntity { fun translateRight(renderEntity: RenderEntity): RenderEntity {
// 获取当前renderEntity的geometry // 获取当前renderEntity的geometry
val geometry = renderEntity.wkt val geometry = renderEntity.wkt
var angle = 0.0 // geometry的角度如果是点获取angle如果是线获取最后两个点的方向 var radian = 0.0 // geometry的角度如果是点获取angle如果是线获取最后两个点的方向
var point = Coordinate(geometry?.coordinate) var point = Coordinate(geometry?.coordinate)
if (Geometry.TYPENAME_POINT == geometry?.geometryType) { if (Geometry.TYPENAME_POINT == geometry?.geometryType) {
angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!! val angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
radian = Math.toRadians(angle)
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) { } else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2) val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2)
val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1) val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1)
// 计算线段的方向 // 计算线段的方向
angle = Angle.angle(p1, p2) radian = Angle.angle(p1, p2)
point = p2 point = p2
} }
// 将角度转换为弧度
val radian = Math.toRadians(angle)
// 计算偏移距离 // 计算偏移距离
val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian) val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian)
val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian) val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian)
@@ -47,7 +45,26 @@ class ImportPreProcess {
Coordinate(point.getX() + dy, point.getY() - dx) Coordinate(point.getX() + dy, point.getY() - dx)
// 将这个点记录在数据中 // 将这个点记录在数据中
renderEntity.properties["geometry"] = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)).toString() val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
renderEntity.geometry = geometryTranslate.toString()
return renderEntity return renderEntity
} }
fun addAngleFromGeometry(renderEntity: RenderEntity): String {
renderEntity.properties.put("angle", "0")
if (renderEntity.wkt!=null) {
val geometry = renderEntity.wkt
if (geometry?.numPoints!!>=2) {
val p1: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 2)!!
val p2: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 1)!!
val angle = Angle.angle(p1, p2).toString()
// 计算线段的方向
renderEntity.properties["angle"] = angle
return angle
} else {
renderEntity.properties["angle"] = "90"
}
}
return "0"
}
} }

View File

@@ -111,7 +111,7 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
viewModel.readRealmData() viewModel.readRealmData()
// 定位到指定位置 // 定位到指定位置
niMapController.mMapView.vtmMap.animator() niMapController.mMapView.vtmMap.animator()
.animateTo(GeoPoint(40.1012346774074730, 116.25571303257621)) .animateTo(GeoPoint(30.26491197757836, 113.8408333015833 ))
} }
R.id.personal_center_menu_task_list -> { R.id.personal_center_menu_task_list -> {
findNavController().navigate(R.id.TaskManagerFragment) findNavController().navigate(R.id.TaskManagerFragment)

2
vtm

Submodule vtm updated: ab81b7838c...dd13e533c3