fix: 增加右偏功能,增加角度计算功能
This commit is contained in:
@@ -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()"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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
2
vtm
Submodule vtm updated: ab81b7838c...dd13e533c3
Reference in New Issue
Block a user