feat: 添加车信测试图标

This commit is contained in:
xiaoyan 2023-06-30 15:35:05 +08:00
parent 8551ce43a7
commit c1616ed744
8 changed files with 93 additions and 32 deletions

View File

@ -224,7 +224,7 @@
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateDirectReferenceLine(direct=3)"
"vlib": "generateDirectReferenceLine()"
},
{
"k": "geometry",
@ -250,19 +250,19 @@
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateBack()"
"vlib": "translateRight(direct=3)"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
"vlib": "unpackingLaneInfo()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateDirectReferenceLine()"
"vlib": "generateS2EReferenceLine()"
}
]
},

View File

@ -16,6 +16,7 @@ import org.oscim.core.GeoPoint
class ImportPreProcess {
val code2NameMap = Code2NameMap()
lateinit var cacheRdLink: Map<String?, RenderEntity>
val defaultTranslateDistance = 3.0
fun checkCircleRoad(renderEntity: RenderEntity): Boolean {
val linkInId = renderEntity.properties["linkIn"]
@ -50,9 +51,9 @@ class ImportPreProcess {
}
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
}
// if (isReverse) {
// angle += 180
// }
// angle角度为与正北方向的顺时针夹角将其转换为与X轴正方向的逆时针夹角即为正东方向的夹角
angle=(450-angle)%360
radian = Math.toRadians(angle)
@ -65,20 +66,26 @@ class ImportPreProcess {
val p2: Coordinate = coordinates.get(coordinates.size - 1)
// 计算线段的方向
radian = Angle.angle(p1, p2)
point = p2
point = p1
}
// 计算偏移距离
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 dx: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.cos(radian)
val dy: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.sin(radian)
// 计算偏移后的点
val coord =
Coordinate(point.getX() + dy, point.getY() - dx)
// 将这个点记录在数据中
val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
renderEntity.geometry = geometryTranslate.toString()
// 记录偏移后的点位或线数据,如果数据为线时,记录的偏移后数据为倒数第二个点右移后,方向与线的最后两个点平行同向的单位向量
if (Geometry.TYPENAME_POINT == geometry?.geometryType) {
val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
renderEntity.geometry = geometryTranslate.toString()
} else {
val coorEnd = Coordinate(coord.x+dx, coord.y+dy)
val geometryTranslate: Geometry = GeometryTools.createLineString(arrayOf(coord, coorEnd))
renderEntity.geometry = geometryTranslate.toString()
}
}
/**
@ -98,9 +105,9 @@ class ImportPreProcess {
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()!!
if (isReverse) {
angle += 180
}
// if (isReverse) {
// angle += 180
// }
// angle角度为与正北方向的顺时针夹角将其转换为与X轴正方向的逆时针夹角即为正东方向的夹角
angle=(450-angle)%360
radian = Math.toRadians(angle)
@ -117,8 +124,8 @@ 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 dx: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.cos(radian)
val dy: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.sin(radian)
// 计算偏移后的点
val coord =
@ -137,8 +144,14 @@ class ImportPreProcess {
val translateGeometry = renderEntity.wkt
val startGeometry = GeometryTools.createGeometry(renderEntity.properties["geometry"])
val pointEnd = translateGeometry!!.coordinates[translateGeometry.numPoints-1] // 获取这个geometry对应的结束点坐标
val pointStart = startGeometry!!.coordinates[startGeometry.numPoints-1] // 获取这个geometry对应的结束点坐标
var pointEnd = translateGeometry!!.coordinates[translateGeometry.numPoints-1] // 获取这个geometry对应的结束点坐标
var pointStart = startGeometry!!.coordinates[startGeometry.numPoints-1] // 获取这个geometry对应的结束点坐标
if (translateGeometry.geometryType == Geometry.TYPENAME_LINESTRING) { // 如果是线数据,则取倒数第二个点作为偏移的起止点
pointEnd = translateGeometry!!.coordinates[translateGeometry.numPoints-2] // 获取这个geometry对应的结束点坐标
}
if (startGeometry.geometryType == Geometry.TYPENAME_LINESTRING) { // 如果是线数据,则取倒数第二个点作为偏移的起止点
pointStart = startGeometry!!.coordinates[startGeometry.numPoints-2] // 获取这个geometry对应的结束点坐标
}
// 将这个起终点的线记录在数据中
val startEndReference = ReferenceEntity()
@ -162,7 +175,7 @@ class ImportPreProcess {
if (direction.isNotEmpty()) {
val paramDirections = direction.split("=")
if (paramDirections.size>=2 && renderEntity.properties[paramDirections[0].trim()] == paramDirections[1].trim()) {
isReverse = true;
isReverse = true
}
}
var radian = 0.0 // geometry的角度如果是点获取angle如果是线获取最后两个点的方向
@ -170,9 +183,9 @@ class ImportPreProcess {
if (Geometry.TYPENAME_POINT == geometry?.geometryType) {
point = Coordinate(geometry?.coordinate)
var angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
if (isReverse) {
angle += 180
}
// if (isReverse) {
// angle += 180
// }
// angle角度为与正北方向的顺时针夹角将其转换为与X轴正方向的逆时针夹角即为正东方向的夹角
angle=(450-angle)%360
radian = Math.toRadians(angle)
@ -185,12 +198,12 @@ class ImportPreProcess {
val p2: Coordinate = coordinates.get(coordinates.size - 1)
// 计算线段的方向
radian = Angle.angle(p1, p2)
point = p2
point = p1
}
// 计算偏移距离
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 dx: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.cos(radian)
val dy: Double = GeometryTools.convertDistanceToDegree(defaultTranslateDistance, geometry?.coordinate?.y!!) * Math.sin(radian)
val coorEnd = Coordinate(point.getX() + dx, point.getY() + dy)
@ -254,6 +267,35 @@ class ImportPreProcess {
}
}
/**
* 解析车信数据二级属性
* */
fun unpackingLaneInfo(renderEntity: RenderEntity) {
if (renderEntity.code == 4601) {
if (!renderEntity.properties["laneinfoGroup"].isNullOrEmpty()&&renderEntity.properties["laneinfoGroup"]!="null") {
// 解析laneinfoGroup将数组中的属性放会properties
val laneinfoGroup = JSONArray(renderEntity.properties["laneinfoGroup"].toString().replace("{", "[").replace("}", "]"))
// 分别获取两个数组中的数据,取第一个作为主数据,另外两个作为辅助渲染数据
val laneInfoDirectArray = JSONArray(laneinfoGroup[0].toString())
val laneInfoTypeArray = JSONArray(laneinfoGroup[1].toString())
for (i in 0 until laneInfoDirectArray.length()) {
// 根据后续的数据生成辅助表数据
val referenceEntity = ReferenceEntity()
referenceEntity.renderEntityId = renderEntity.id
referenceEntity.name = "${renderEntity.name}参考方向"
referenceEntity.table = renderEntity.table
// 与原数据使用相同的geometry
referenceEntity.geometry = renderEntity.geometry.toString()
referenceEntity.properties["qi_table"] = renderEntity.table
referenceEntity.properties["currentDirect"] = laneInfoDirectArray[i].toString().split(",").distinct().joinToString("_")
referenceEntity.properties["currentType"] = laneInfoTypeArray[i].toString().split(",").distinct().joinToString("_")
Realm.getDefaultInstance().insert(referenceEntity)
}
}
}
}
/**

View File

@ -112,7 +112,7 @@ class PersonalCenterFragment(private var backListener: (() -> Unit?)? = null) :
viewModel.readRealmData()
// 定位到指定位置
niMapController.mMapView.vtmMap.animator()
.animateTo(GeoPoint( 39.799624915997725, 116.51407667184905 ))
.animateTo(GeoPoint( 39.79440941020727, 116.51302718503038 ))
}
// R.id.personal_center_menu_task_list -> {
// findNavController().navigate(R.id.TaskManagerFragment)

View File

@ -1600,7 +1600,7 @@
</m>
</m>
<!-- 道路线 -->
<m v="OMDB_RD_LINK">
<m k="qi_table" v="OMDB_RD_LINK">
<line stroke="#9c9c9c" width="1" />
</m>
<!--道路种别-->
@ -1818,8 +1818,9 @@
<m k="type" v="s_2_e">
<line use="s2e" />
</m>
</m>
<!-- 路口 -->
</m>
<!-- 路口 -->
<m v="OMDB_INTERSECTION">
<m k="type" v="node">
<symbol src="assets:symbols/dot_blue_dark.svg"></symbol>
@ -1834,7 +1835,21 @@
</m>
<!-- 车信 -->
<m v="OMDB_LANEINFO">
<text use="road"></text>
<m k="currentType" v="0">
<m k="currentDirect">
<symbol repeat="false" repeat-start="0" repeat-gap="2000"
src="assets:omdb/1301_0_j.svg" symbol-height="29" symbol-width="29"></symbol>
</m>
</m>
<m k="currentType" v="1|2">
<m k="currentDirect">
<symbol repeat="false" repeat-start="0" repeat-gap="2000"
src="assets:omdb/1301_1_j.svg" symbol-height="29" symbol-width="29"></symbol>
</m>
</m>
<m k="type" v="s_2_e">
<line use="s2e" />
</m>
</m>
</m>
</rendertheme>

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="30" height="18" viewBox="0 0 30 18"><defs><style>.e{fill:none;}.f{fill:#2271ff;}</style></defs><g id="c"><g id="d"><path class="f" d="M25.1,7.7h-3.1l3.5,4.2h-7.4c.5-.4,1.1-1.3,1.5-2.1,.5-1,.4-3.3,.4-3.3V3.5l3.5,2.9V3.7L19.1,.1l-4.6,3.6v2.7l3.8-3.1v3.3s.3,1.9-.5,3c-.6,.9-1.5,1.8-2.1,2.2h-3c1.8-2.9,.8-8-3.2-7.9H3.8L6.9,.4h-2.1L.9,5l3.9,4.4h2.3l-3.2-3.5h5c3.6,0,3.5,5.7,0,5.9H.8v2.1H25.4l-3.1,3.8h2.9l4-4.9-4-5.1h0Z"/><rect class="e" width="30" height="18"/></g></g></svg>

After

Width:  |  Height:  |  Size: 563 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="30" height="24" viewBox="0 0 30 24"><defs><style>.e{fill:none;}.f{fill:#2271ff;}</style></defs><g id="c"><g id="d"><path class="f" d="M19.3,20.2v-2.6l-3.5,2.9v-3s0-1.8-.4-2.9c-.3-.5-.7-1.2-1.1-1.7h6.4L26.5,3.4l1.5,4.6,1.5-2.3L27.5,.2l-5.7,.7-1.3,2.2,4.4-.6-5.2,8.4H1v2H11.1c.6,.1,1.6,.5,2.2,1.3,.8,1.1,.7,3,.7,3v3.3l-3.7-3.1v2.7l4.5,3.6,4.5-3.6h0Z"/><rect class="e" width="30" height="24"/></g></g></svg>

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="30" height="18" viewBox="0 0 30 18"><defs><style>.d{fill:none;}.e{fill:#ffb400;}</style></defs><g id="c"><path class="e" d="M25.1,7.7h-3.1c0,0,3.5,4.2,3.5,4.2h-7.4c.5-.4,1.1-1.3,1.5-2.1,.5-1,.4-3.3,.4-3.3V3.5s3.5,2.9,3.5,2.9V3.7c0,0-4.4-3.6-4.4-3.6l-4.6,3.6v2.7c0,0,3.8-3.1,3.8-3.1v3.3s.3,1.9-.5,3c-.6,.9-1.5,1.8-2.1,2.2h-3c1.8-2.9,.8-8-3.2-7.9H3.8S6.9,.4,6.9,.4h-2.1c0,0-3.9,4.6-3.9,4.6l3.9,4.4h2.3s-3.2-3.5-3.2-3.5h5c3.6,.1,3.5,5.7,0,5.9h0s-8.1,0-8.1,0v2.1H25.4s-3.1,3.8-3.1,3.8h2.9c0,0,4-4.9,4-4.9l-4-5.1Z"/><rect class="d" width="30" height="18"/></g></svg>

After

Width:  |  Height:  |  Size: 653 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="30" height="24" viewBox="0 0 30 24"><defs><style>.d{fill:none;}.e{fill:#ffb400;}</style></defs><g id="c"><path class="e" d="M19.3,20.2v-2.6c0,0-3.5,2.9-3.5,2.9v-3s0-1.8-.4-2.9c-.3-.5-.7-1.2-1.1-1.7h6.4s0,0,0,0L26.5,3.4l1.5,4.6,1.5-2.3L27.5,.2l-5.7,.7-1.3,2.2,4.4-.6-5.2,8.4H1s0,2,0,2H11.1c.6,.1,1.6,.5,2.2,1.3,.8,1.1,.7,3,.7,3v3.3s-3.7-3.1-3.7-3.1v2.7c0,0,4.5,3.6,4.5,3.6l4.5-3.6Z"/><rect class="d" width="30" height="24"/></g></svg>

After

Width:  |  Height:  |  Size: 525 B