fix: 完善路口和电子眼渲染样式
This commit is contained in:
parent
3d4d6c13a7
commit
8551ce43a7
@ -224,7 +224,7 @@
|
|||||||
"k": "geometry",
|
"k": "geometry",
|
||||||
"v": "~",
|
"v": "~",
|
||||||
"klib": "geometry",
|
"klib": "geometry",
|
||||||
"vlib": "generateDirectReferenceLine()"
|
"vlib": "generateDirectReferenceLine(direct=3)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"k": "geometry",
|
"k": "geometry",
|
||||||
@ -239,12 +239,6 @@
|
|||||||
"code": 4022,
|
"code": 4022,
|
||||||
"name": "交通灯",
|
"name": "交通灯",
|
||||||
"transformer": [
|
"transformer": [
|
||||||
{
|
|
||||||
"k": "angle",
|
|
||||||
"v": "~",
|
|
||||||
"klib": "angle",
|
|
||||||
"vlib": "0"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"4601":{
|
"4601":{
|
||||||
|
@ -38,7 +38,7 @@ class ImportConfig {
|
|||||||
if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据
|
if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据
|
||||||
for (v in processKeyOrValue(value)) {
|
for (v in processKeyOrValue(value)) {
|
||||||
if ("~" == v ) { // ~符可以匹配任意元素
|
if ("~" == v ) { // ~符可以匹配任意元素
|
||||||
if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
|
if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
|
||||||
// 获取方法名
|
// 获取方法名
|
||||||
val methodName = valuelib.substringBefore("(")
|
val methodName = valuelib.substringBefore("(")
|
||||||
// 获取参数
|
// 获取参数
|
||||||
@ -51,8 +51,9 @@ class ImportConfig {
|
|||||||
methodParams[1] to renderEntity
|
methodParams[1] to renderEntity
|
||||||
)
|
)
|
||||||
for ((index, value) in params.withIndex()) {
|
for ((index, value) in params.withIndex()) {
|
||||||
if (methodParams.size>index+1) {
|
// 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置
|
||||||
callByParams[methodParams[index+1]] = value
|
if (methodParams.size>index+2) {
|
||||||
|
callByParams[methodParams[index+2]] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
when(val result = method.callBy(callByParams)) { // 如果方法返回的数据类型是boolean,且返回为false,则该数据不处理
|
when(val result = method.callBy(callByParams)) { // 如果方法返回的数据类型是boolean,且返回为false,则该数据不处理
|
||||||
@ -66,7 +67,7 @@ class ImportConfig {
|
|||||||
}
|
}
|
||||||
break@m
|
break@m
|
||||||
} else if (renderEntity.properties[k] == v) { // 完全匹配
|
} else if (renderEntity.properties[k] == v) { // 完全匹配
|
||||||
if (valuelib.endsWith("()")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
|
if (valuelib.endsWith(")")) { // 以()结尾,说明该value配置是一个function,需要通过反射调用指定方法
|
||||||
// 获取方法名
|
// 获取方法名
|
||||||
val methodName = valuelib.substringBefore("(")
|
val methodName = valuelib.substringBefore("(")
|
||||||
// 获取参数
|
// 获取参数
|
||||||
@ -79,8 +80,9 @@ class ImportConfig {
|
|||||||
methodParams[1] to renderEntity
|
methodParams[1] to renderEntity
|
||||||
)
|
)
|
||||||
for ((index, value) in params.withIndex()) {
|
for ((index, value) in params.withIndex()) {
|
||||||
if (methodParams.size>index+1) {
|
// 前2个参数确定为对象本身和RenderEntity,因此自定义参数从index+2开始设置
|
||||||
callByParams[methodParams[index+1]] = value
|
if (methodParams.size>index+2) {
|
||||||
|
callByParams[methodParams[index+2]] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
when(val result = method.callBy(callByParams)) {
|
when(val result = method.callBy(callByParams)) {
|
||||||
|
@ -26,7 +26,7 @@ class ImportPreProcess {
|
|||||||
Log.d("checkCircleRoad", "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${linkOutEntity?.properties?.get("enodePid")}")
|
Log.d("checkCircleRoad", "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${linkOutEntity?.properties?.get("enodePid")}")
|
||||||
// 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false
|
// 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false
|
||||||
if (linkInEntity!=null&&linkOutEntity!=null) {
|
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"])
|
|| linkInEntity.properties["snodePid"] == linkOutEntity.properties["snodePid"]|| linkInEntity.properties["enodePid"] == linkOutEntity.properties["enodePid"])
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -48,11 +48,13 @@ class ImportPreProcess {
|
|||||||
isReverse = true;
|
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()!!
|
var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
|
||||||
if (isReverse) {
|
if (isReverse) {
|
||||||
angle += 180
|
angle += 180
|
||||||
}
|
}
|
||||||
|
// angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
|
||||||
|
angle=(450-angle)%360
|
||||||
radian = Math.toRadians(angle)
|
radian = Math.toRadians(angle)
|
||||||
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
||||||
var coordinates = geometry.coordinates
|
var coordinates = geometry.coordinates
|
||||||
@ -99,6 +101,8 @@ class ImportPreProcess {
|
|||||||
if (isReverse) {
|
if (isReverse) {
|
||||||
angle += 180
|
angle += 180
|
||||||
}
|
}
|
||||||
|
// angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
|
||||||
|
angle=(450-angle)%360
|
||||||
radian = Math.toRadians(angle)
|
radian = Math.toRadians(angle)
|
||||||
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
||||||
var coordinates = geometry.coordinates
|
var coordinates = geometry.coordinates
|
||||||
@ -169,6 +173,8 @@ class ImportPreProcess {
|
|||||||
if (isReverse) {
|
if (isReverse) {
|
||||||
angle += 180
|
angle += 180
|
||||||
}
|
}
|
||||||
|
// angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角
|
||||||
|
angle=(450-angle)%360
|
||||||
radian = Math.toRadians(angle)
|
radian = Math.toRadians(angle)
|
||||||
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
|
||||||
var coordinates = geometry.coordinates
|
var coordinates = geometry.coordinates
|
||||||
@ -186,7 +192,7 @@ class ImportPreProcess {
|
|||||||
val dx: Double = GeometryTools.convertDistanceToDegree(3.0, geometry?.coordinate?.y!!) * Math.cos(radian)
|
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 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()
|
val angleReference = ReferenceEntity()
|
||||||
angleReference.renderEntityId = renderEntity.id
|
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成默认道路名数据
|
* 生成默认道路名数据
|
||||||
|
@ -230,7 +230,7 @@ class MainActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
//监听地图中点变化
|
//监听地图中点变化
|
||||||
viewModel.liveDataCenterPoint.observe(this) {
|
viewModel.liveDataCenterPoint.observe(this) {
|
||||||
Log.e("qj", "${it.longitude}")
|
// Log.e("qj", "${it.longitude}")
|
||||||
try {
|
try {
|
||||||
if (it != null && it.longitude != null && it.latitude != null) {
|
if (it != null && it.longitude != null && it.latitude != null) {
|
||||||
binding.mainActivityGeometry.text = "经纬度:${
|
binding.mainActivityGeometry.text = "经纬度:${
|
||||||
|
@ -112,7 +112,7 @@ class PersonalCenterFragment(private var backListener: (() -> Unit?)? = null) :
|
|||||||
viewModel.readRealmData()
|
viewModel.readRealmData()
|
||||||
// 定位到指定位置
|
// 定位到指定位置
|
||||||
niMapController.mMapView.vtmMap.animator()
|
niMapController.mMapView.vtmMap.animator()
|
||||||
.animateTo(GeoPoint( 39.80130797136839, 116.51808677349096 ))
|
.animateTo(GeoPoint( 39.799624915997725, 116.51407667184905 ))
|
||||||
}
|
}
|
||||||
// R.id.personal_center_menu_task_list -> {
|
// R.id.personal_center_menu_task_list -> {
|
||||||
// findNavController().navigate(R.id.TaskManagerFragment)
|
// findNavController().navigate(R.id.TaskManagerFragment)
|
||||||
|
@ -1809,6 +1809,7 @@
|
|||||||
<symbol repeat="false" repeat-start="0" rotate="false"
|
<symbol repeat="false" repeat-start="0" rotate="false"
|
||||||
src="assets:symbols/volcano.svg" symbol-height="69" symbol-width="69"></symbol>
|
src="assets:symbols/volcano.svg" symbol-height="69" symbol-width="69"></symbol>
|
||||||
</m>
|
</m>
|
||||||
|
<caption k="name" fill="#000000" priority="0" size="14" stroke="#ffffff" stroke-width="1.0" dy="-30"></caption>
|
||||||
<m k="type" v="angle">
|
<m k="type" v="angle">
|
||||||
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true"
|
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true"
|
||||||
src="assets:omdb/icon_arrow_right.svg" symbol-height="76"
|
src="assets:omdb/icon_arrow_right.svg" symbol-height="76"
|
||||||
@ -1817,9 +1818,8 @@
|
|||||||
<m k="type" v="s_2_e">
|
<m k="type" v="s_2_e">
|
||||||
<line use="s2e" />
|
<line use="s2e" />
|
||||||
</m>
|
</m>
|
||||||
<text use="road" dy="30"></text>
|
</m>
|
||||||
</m>
|
<!-- 路口 -->
|
||||||
<!-- 路口 -->
|
|
||||||
<m v="OMDB_INTERSECTION">
|
<m v="OMDB_INTERSECTION">
|
||||||
<m k="type" v="node">
|
<m k="type" v="node">
|
||||||
<symbol src="assets:symbols/dot_blue_dark.svg"></symbol>
|
<symbol src="assets:symbols/dot_blue_dark.svg"></symbol>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user