提交代码,修复交通标牌不显示,增加车道、道路边界类型杆状障碍物渲染

This commit is contained in:
qiji4215 2023-11-21 17:05:35 +08:00
parent 3de8ce6a39
commit 796ced9243
25 changed files with 3602 additions and 1671 deletions

View File

@ -65,8 +65,8 @@
"table": "OMDB_LINK_NAME",
"code": 2011,
"name": "道路名",
"zoomMin": 15,
"zoomMax": 17,
"zoomMin": 18,
"zoomMax": 20,
"checkLinkId": false,
"transformer": [
{
@ -110,14 +110,54 @@
"code": 2019,
"name": "常规线限速",
"zoomMin": 15,
"zoomMax": 17
"zoomMax": 17,
"transformer": [
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateS2EReferenceLine()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateDirectReferenceLine()"
}
]
},
"2020": {
"table": "OMDB_LINK_SPEEDLIMIT_COND",
"code": 2020,
"name": "条件线限速",
"zoomMin": 15,
"zoomMax": 17
"zoomMax": 17,
"transformer": [
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateS2EReferenceLine()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateDirectReferenceLine()"
}
]
},
"2021": {
"table": "OMDB_LINK_SPEEDLIMIT_VAR",
@ -134,7 +174,15 @@
"filterData": true,
"zoomMin": 18,
"zoomMax": 20,
"catch": true
"catch": true,
"transformer": [
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "dengfenLineString()"
}
]
},
"2090": {
"table": "OMDB_LANE_CONSTRUCTION",
@ -387,6 +435,18 @@
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateS2EReferenceLine()"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "generateDirectReferenceLine()"
}
]
},

View File

@ -455,7 +455,7 @@ class ImportOMDBHelper @AssistedInject constructor(
val boundaryType = renderEntity.properties["boundaryType"]
if (boundaryType != null) {
when (boundaryType.toInt()) {
0, 1, 6, 8, 9 -> {
0, 1, 7, 8 -> {
renderEntity.enable = 0
line = bufferedReader.readLine()
continue
@ -468,7 +468,7 @@ class ImportOMDBHelper @AssistedInject constructor(
val boundaryType = renderEntity.properties["boundaryType"]
if (boundaryType != null) {
when (boundaryType.toInt()) {
0, 1, 3, 4, 5, 7, 9 -> {
0, 1, 2, 7, 8 -> {
renderEntity.enable = 0
line = bufferedReader.readLine()
continue
@ -770,8 +770,8 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.properties.remove("linkPid")
}
//去掉暂用控件较大的字段多余属性字段
if (renderEntity.properties.containsKey("shapeList")) {
//去掉暂用控件较大的字段多余属性字段,保留道路名用于展示详情
if (renderEntity.code!=DataCodeEnum.OMDB_LINK_NAME.code&&renderEntity.properties.containsKey("shapeList")) {
renderEntity.properties.remove("shapeList")
}

View File

@ -95,7 +95,6 @@ class ImportPreProcess {
) != null
) {
// 带有angle字段的数据也有可能是线需要判断是否需要根据指定字段判断数据是否为逆向
var angle = renderEntity?.properties?.get("angle")?.toDouble()!!
// angle角度为与正北方向的顺时针夹角将其转换为与X轴正方向的逆时针夹角即为正东方向的夹角
angle = ((450 - angle) % 360)
@ -226,7 +225,6 @@ class ImportPreProcess {
// 将这个起终点的线记录在数据中
val startEndReference = ReferenceEntity()
// startEndReference.renderEntityId = renderEntity.id
startEndReference.name = "${renderEntity.name}参考线"
startEndReference.table = renderEntity.table
startEndReference.code = renderEntity.code
@ -239,11 +237,8 @@ class ImportPreProcess {
GeometryTools.createLineString(arrayOf<Coordinate>(pointStart, pointEnd)).toString()
startEndReference.properties["qi_table"] = renderEntity.table
startEndReference.properties["type"] = "s_2_e"
val listResult = mutableListOf<ReferenceEntity>()
startEndReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(startEndReference.properties))
renderEntity.referenceEntitys?.add(startEndReference)
//listResult.add(startEndReference)
//insertData(listResult)
renderEntity.referenceEntitys.add(startEndReference)
}
/**
@ -306,7 +301,7 @@ class ImportPreProcess {
endReference.properties["qi_table"] = renderEntity.table
endReference.properties["type"] = "e${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}"
endReference.properties["geometry"] = endReference.geometry
renderEntity.referenceEntitys?.add(endReference)
renderEntity.referenceEntitys.add(endReference)
//listResult.add(endReference)
//insertData(listResult)
}
@ -325,7 +320,6 @@ class ImportPreProcess {
// 将这个起终点的线记录在数据中
val startReference = ReferenceEntity()
// startReference.renderEntityId = renderEntity.id
startReference.name = "${renderEntity.name}参考点"
startReference.code = renderEntity.code
startReference.table = renderEntity.table
@ -363,7 +357,6 @@ class ImportPreProcess {
Log.e("qj", "generateS2EReferencePoint===1")
val endReference = ReferenceEntity()
// endReference.renderEntityId = renderEntity.id
endReference.name = "${renderEntity.name}参考点"
endReference.code = renderEntity.code
endReference.table = renderEntity.table
@ -393,10 +386,8 @@ class ImportPreProcess {
}
endReference.properties["geometry"] = endReference.geometry
endReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(endReference.properties))
renderEntity.referenceEntitys?.add(endReference)
//listResult.add(endReference)
renderEntity.referenceEntitys.add(endReference)
Log.e("qj", "generateS2EReferencePoint===4")
//insertData(listResult)
}
/**
@ -407,6 +398,7 @@ class ImportPreProcess {
direction: String = "",
distance: String = ""
) {
Log.e("qj", "generateDirectReferenceLine===0==${renderEntity.code}")
// 根据数据或angle计算方向对应的角度和偏移量
val geometry = renderEntity.wkt
var isReverse = false // 是否为逆向
@ -473,13 +465,11 @@ class ImportPreProcess {
geometry?.coordinate?.y!!
) * Math.sin(radian)
}
val listResult = mutableListOf<ReferenceEntity>()
for (pointStart in pointStartArray) {
val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z)
val angleReference = ReferenceEntity()
// angleReference.renderEntityId = renderEntity.id
angleReference.name = "${renderEntity.name}参考方向"
angleReference.table = renderEntity.table
angleReference.code = renderEntity.code
@ -493,10 +483,9 @@ class ImportPreProcess {
angleReference.properties["qi_table"] = renderEntity.table
angleReference.properties["type"] = "angle"
angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
renderEntity.referenceEntitys?.add(angleReference)
//listResult.add(angleReference)
renderEntity.referenceEntitys.add(angleReference)
}
//insertData(listResult)
Log.e("qj", "generateDirectReferenceLine===1")
}
fun addAngleFromGeometry(renderEntity: RenderEntity): String {
@ -574,6 +563,8 @@ class ImportPreProcess {
renderEntityTemp.zoomMax = renderEntity.zoomMax
renderEntityTemp.enable = renderEntity.enable
renderEntityTemp.taskId = renderEntity.taskId
renderEntityTemp.linkPid = renderEntity.linkPid
renderEntity.linkRelation = renderEntity.linkRelation
renderEntityTemp.catchEnable = renderEntity.catchEnable
var dis = -lateralOffset.toDouble() / 100000000
//最小值取10厘米否正渲染太近无法显示
@ -607,6 +598,37 @@ class ImportPreProcess {
if (listResult.size > 0) {
insertData(listResult)
}
}else if(boundaryType.toInt() == 9){//根据线型平分为点数据用于渲染3D标
dengfenLineString(renderEntity)
}
}
}
}
fun dengfenLineString(renderEntity: RenderEntity){
if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code||renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code){
val boundaryType = renderEntity.properties["boundaryType"]
if (boundaryType != null) {
if(boundaryType.toInt()==9){
Log.e("qj","杆状物转换开始")
val geopointList = GeometryTools.getLineToDengGeoPints(renderEntity.wkt,5.0)
geopointList.forEach{
val referenceEntity = ReferenceEntity()
referenceEntity.name = "${renderEntity.name}线转点坐标"
referenceEntity.table = renderEntity.table
referenceEntity.code = renderEntity.code
referenceEntity.geometry = GeometryTools.createGeometry(it).toString()
Log.e("jingo", "几何转换结束")
referenceEntity.properties["qi_table"] = renderEntity.table
referenceEntity.properties["boundaryType"] = "pole"
referenceEntity.zoomMin = renderEntity.zoomMin
referenceEntity.zoomMax = renderEntity.zoomMax
referenceEntity.taskId = renderEntity.taskId
referenceEntity.enable = renderEntity.enable
referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
renderEntity.referenceEntitys.add(referenceEntity)
}
Log.e("qj","杆状物转换结束")
}
}
}
@ -652,11 +674,9 @@ class ImportPreProcess {
"assets:omdb/4601/${type}/1301_${referenceEntity.properties["currentDirect"]}.svg"
Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString())
referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
renderEntity.referenceEntitys?.add(referenceEntity)
renderEntity.referenceEntitys.add(referenceEntity)
Log.e("qj", "车信===插入车信箭头")
//listResult.add(referenceEntity)
}
//insertData(listResult)
}
//将主表线转化为单个点,按点要素实现捕捉
if (Geometry.TYPENAME_LINESTRING == renderEntity.wkt?.geometryType) {
@ -774,7 +794,7 @@ class ImportPreProcess {
angleReference.enable = renderEntity.enable
val listResult = mutableListOf<ReferenceEntity>()
angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
renderEntity.referenceEntitys?.add(angleReference)
renderEntity.referenceEntitys.add(angleReference)
//listResult.add(angleReference)
//insertData(listResult)
}
@ -806,7 +826,7 @@ class ImportPreProcess {
intersectionReference.properties["qi_table"] = renderEntity.table
intersectionReference.properties["type"] = "node"
intersectionReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(intersectionReference.properties))
renderEntity.referenceEntitys?.add(intersectionReference)
renderEntity.referenceEntitys.add(intersectionReference)
//listResult.add(intersectionReference)
}
//insertData(listResult)
@ -992,7 +1012,7 @@ class ImportPreProcess {
val code = renderEntity.properties[codeName]
dynamicSrcReference.properties["src"] = "${prefix}${code}${suffix}"
dynamicSrcReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(dynamicSrcReference.properties))
renderEntity.referenceEntitys?.add(dynamicSrcReference)
renderEntity.referenceEntitys.add(dynamicSrcReference)
//listResult.add(dynamicSrcReference)
}
//insertData(listResult)

View File

@ -181,7 +181,7 @@ class RealmOperateHelper() {
var nearLast: Double = 99999.99
for (link in realmList) {
if (polygon.intersects(GeometryTools.createGeometry(link.geometry))) {
val near = point.distance(GeometryTools.createGeoPoint(link.geometry))
val near = GeometryTools.createGeometry(link.geometry).distance(GeometryTools.createGeometry(point))
if (near < nearLast) {
nearLast = near
linkBean = link
@ -302,6 +302,7 @@ class RealmOperateHelper() {
// 将获取到的数据和查询的polygon做相交只返回相交的数据
val queryResult = realmList?.stream()?.filter {
if (Constant.MapCatchLine) {
Log.e("qj",it.code+"捕捉要素编码"+it.enable+"==="+it.catchEnable)
polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase()
.equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON")
} else {

View File

@ -127,6 +127,7 @@ class LoginActivity : CheckPermissionsActivity() {
private fun initView() {
//登录校验,初始化成功
viewModel.loginStatus.observe(this, loginObserve)
viewModel.lastLoginUserInfo(this)
}
/**

View File

@ -87,10 +87,17 @@ class LoginViewModel @Inject constructor(
var sharedPreferences: SharedPreferences? = null
init {
loginUser.value = LoginUserBean(userCode = "lixiaoming00427", passWord = "123456")
}
fun lastLoginUserInfo(context: Context){
sharedPreferences =
context.getSharedPreferences("USER_SHAREDPREFERENCES", Context.MODE_PRIVATE)
val userNameCache = sharedPreferences?.getString("userName", "lixiaoming00427")
val passwordCache = sharedPreferences?.getString("passWord", "123456")
loginUser.value = LoginUserBean(userCode = "$userNameCache", passWord = "$passwordCache")
}
/**
* 处理注册按钮
*/

View File

@ -22,8 +22,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.ClipboardUtils
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.tabs.TabLayout
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.enums.DataCodeEnum
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.MeasureLayerHandler
import com.navinfo.collect.library.utils.DeflaterUtil
@ -688,7 +686,7 @@ class MainActivity : BaseActivity() {
index = p0.position
editText.text = null
//清理已绘制线
mapController.lineHandler.removeLine()
mapController.lineHandler.removeAllLine()
mapController.markerHandle.removeMarker("location")
when (p0.position) {
0 -> editText.hint = "请输入LinkPid例如12345678"
@ -819,35 +817,15 @@ class MainActivity : BaseActivity() {
* zoomOut
*/
fun zoomOutOnclick(view: View) {
/* val result = mutableListOf<RenderEntity>()
for (i in 0 until 10) {
var renderEntity: RenderEntity = RenderEntity()
renderEntity.code = "3005"
renderEntity.geometry = "POINT(116.2694${i}13016946 40.0844${i}5791644373 0)"
result.add(renderEntity)
val lineString =
"LINESTRING(115.92708317758513 40.42230758745775 0, 115.9272990153405 40.422317981061205 0, 115.92750895192124 40.42232797132084 0, 115.9277199918031 40.422337964543026 0)"
val geometry = GeometryTools.createGeometry(lineString)
//定位
mapController.animationHandler.animationByLatLon(geometry.centroid.y,geometry.centroid.x,500)
GeometryTools.getLineToDengGeoPints(geometry, 5.0)?.forEach {
mapController.markerHandle.addMarker(it, it.toString())
}
var renderEntity: RenderEntity = RenderEntity()
renderEntity.code = "3006"
renderEntity.geometry = "POINT(116.269413016946 40.08445791644373 0)"
result.add(renderEntity)
var renderEntity1: RenderEntity = RenderEntity()
renderEntity1.code = "3007"
renderEntity1.geometry = "POINT(116.269413016946 40.08445791644373 0)"
result.add(renderEntity1)
//计算后
var index = 0
Log.e("qj","====计算开始")
var lastRender:RenderEntity = RenderEntity()
GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,result, 5.0)?.forEach {
if(lastRender!=null&&lastRender.geometry!=null&& lastRender.geometry != ""){
if(it.geometry!=lastRender.geometry){
Log.e("qj","${index++}====计算后"+it.geometry)
}
}
lastRender = it
}*/
Log.e("qj","====计算结束")
mapController.lineHandler.showLine(geometry.toString())
mapController.animationHandler.zoomOut()
}

View File

@ -1340,9 +1340,9 @@ class MainViewModel @Inject constructor(
)
}
if (data.wkt != null) {
/* if (data.wkt != null) {
mapController.markerHandle.removeMarker("moreInfo")
mapController.lineHandler.removeLine()
mapController.lineHandler.removeAllLine()
when (data.wkt!!.geometryType) {
Geometry.TYPENAME_POINT -> {
val geoPoint = GeometryTools.createGeoPoint(data.wkt!!.toText())
@ -1350,10 +1350,10 @@ class MainViewModel @Inject constructor(
}
Geometry.TYPENAME_LINESTRING -> {
mapController.lineHandler.showLine(data.wkt!!.toText())
mapController.lineHandler.showSubLine(data.wkt!!.toText())
}
}
}
}*/
}
fun sendServerCommand(

View File

@ -12,6 +12,7 @@ import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.databinding.DataBindingUtil
import androidx.navigation.NavOptions
import androidx.navigation.findNavController
@ -75,6 +76,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
return binding.root
}
@RequiresApi(Build.VERSION_CODES.N)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
@ -178,6 +180,8 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
try {
signBean = it.getParcelable("SignBean")
autoSave = it.getBoolean("AutoSave")
//高亮数据几何
signBean?.let { it1 -> viewModel.show(it1.renderEntity) }
} catch (_: java.lang.Exception) {
}
}

View File

@ -45,7 +45,9 @@ import io.realm.RealmList
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.locationtech.jts.geom.Geometry
import org.oscim.core.GeoPoint
import org.oscim.core.GeometryBuffer.GeometryType
import java.io.File
import java.io.FileOutputStream
import java.util.*
@ -73,6 +75,8 @@ class EvaluationResultViewModel @Inject constructor(
private val TAG = "点选marker"
private val ELEMENT_MARKER = "elementMarker"
/**
* 操作结束销毁页面
*/
@ -155,8 +159,10 @@ class EvaluationResultViewModel @Inject constructor(
override fun onCleared() {
super.onCleared()
mapController.mMapView.removeOnNIMapClickListener(TAG)
//移除要素marker
mapController.markerHandle.removeMarker(ELEMENT_MARKER)
mapController.markerHandle.removeMarker()
mapController.lineHandler.removeLine()
mapController.lineHandler.removeAllLine()
}
@ -204,7 +210,7 @@ class EvaluationResultViewModel @Inject constructor(
}
} else {
liveDataQsRecordBean.value?.run {
elementId = bean.renderEntity.code
elementId = bean.renderEntity.id
linkId = bean.linkId
if (linkId.isNotEmpty()) {
viewModelScope.launch {
@ -495,6 +501,7 @@ class EvaluationResultViewModel @Inject constructor(
* 根据数据id查询数据
*/
@RequiresApi(Build.VERSION_CODES.N)
fun initData(id: String) {
Log.e("jingo", "捕捉到的要素 id = $id")
viewModelScope.launch(Dispatchers.Main) {
@ -545,14 +552,21 @@ class EvaluationResultViewModel @Inject constructor(
// 显示语音数据到界面
getChatMsgEntityList()
realm.close()
if (it.elementId == DataCodeEnum.OMDB_LANEINFO.code) {
//增加要素高亮
if(it.elementId!=null){
val realm2 = realmOperateHelper.getSelectTaskRealmInstance()
val r = realm2.where(RenderEntity::class.java)
.equalTo("table", DataCodeEnum.OMDB_LANEINFO.name)
.equalTo("linkPid", it.linkId).findFirst()
if (r != null) {
renderEntity = realm2.copyFromRealm(r)
laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!)
val rEntity = realm2.where(RenderEntity::class.java).equalTo("id",it.elementId).findFirst()
if(rEntity!=null){
show(rEntity!!)
}
if (it.classCode == DataCodeEnum.OMDB_LANEINFO.code) {
val r = realm2.where(RenderEntity::class.java)
.equalTo("table", DataCodeEnum.OMDB_LANEINFO.name)
.equalTo("linkPid", it.linkId).findFirst()
if (r != null) {
renderEntity = realm2.copyFromRealm(r)
laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!)
}
}
realm2.close()
}
@ -561,8 +575,27 @@ class EvaluationResultViewModel @Inject constructor(
liveDataToastMessage.postValue("数据读取失败")
realm.close()
}
}
}
fun show(renderEntity: RenderEntity) {
if (renderEntity != null) {
if (renderEntity.wkt != null) {
mapController.markerHandle.removeMarker(ELEMENT_MARKER)
mapController.lineHandler.removeElementLine()
when (renderEntity.wkt!!.geometryType) {
Geometry.TYPENAME_POINT -> {
val geoPoint = GeometryTools.createGeoPoint(renderEntity.wkt!!.toText())
mapController.markerHandle.addMarker(geoPoint, ELEMENT_MARKER)
}
Geometry.TYPENAME_LINESTRING -> {
mapController.lineHandler.showElementLine(renderEntity.wkt!!.toText())
}
Geometry.TYPENAME_POLYGON -> {
mapController.lineHandler.showElementLine(renderEntity.wkt!!.toText())
}
}
}
}
}

View File

@ -444,7 +444,7 @@ class TaskViewModel @Inject constructor(
override fun onCleared() {
mapController.mMapView.removeOnNIMapClickListener(TAG)
mapController.lineHandler.removeLine()
mapController.lineHandler.removeAllLine()
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onCleared()
}

View File

@ -1858,7 +1858,7 @@ class SignUtil {
"3" -> "三角形"
"4" -> "圆形"
"5" -> "菱形"
"6" -> "三角形"
"6" -> "三角形"
"7" -> "正方形"
"8" -> "八角形"
else -> ""

View File

@ -1615,24 +1615,29 @@
src="assets:omdb/icon_4023_0.svg" symbol-height="56" symbol-width="56"></symbol>
</m>
</m>
<!-- 道路边界类型 -->
<m v="OMDB_RDBOUND_BOUNDARYTYPE">
<outline-layer id="boundaryType" stroke="#8e44ad" width="0.1" />
<!--护栏-->
<m k="boundaryType" v="4">
<line stroke="#FFBC6E" use="boundaryType" width="0.1"/>
<symbol repeat-gap="12" repeat="true" repeat-start="0" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="46"></symbol>
<symbol repeat="true" repeat-gap="12" gland="true" repeat-start="0.01" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="36"></symbol>
</m>
<!--路牙-->
<m k="boundaryType" v="3">
<symbol repeat="true" repeat-gap="10" repeat-start="0" src="assets:omdb/icon_2013_3.svg" symbol-width="16" symbol-height="10"></symbol>
<symbol repeat="true" repeat-gap="12" gland="true" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="16" symbol-height="10"></symbol>
</m>
<m k="boundaryType" v="2|6">
<line stroke="#ffffff" use="boundaryType" width="0.1"/>
<!---->
<m k="boundaryType" v="5">
<symbol repeat="true" gland="true" repeat-gap="12" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="24" symbol-height="12"></symbol>
</m>
<m k="boundaryType" v="8">
<line stroke="#FFBC6E" use="boundaryType" width="0.1"/>
<symbol repeat-gap="12" repeat="true" repeat-start="0" src="assets:omdb/icon_2083_8.svg" symbol-width="24" symbol-height="32"></symbol>
<!--铺设路面边缘-->
<m k="boundaryType" v="6">
<line stroke="#8a8a8a" use="boundaryType"/>
</m>
<!--杆状障碍物-->
<m k="boundaryType" v="pole">
<symbol src="assets:omdb/icon_pole_barrier.svg" gland="true"></symbol>
</m>
</m>
@ -1643,14 +1648,25 @@
<!--护栏-->
<m k="boundaryType" v="4">
<line stroke="#FFBC6E" use="boundaryType" width="0.1"/>
<symbol repeat-gap="12" repeat="true" repeat-start="0" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="46"></symbol>
<symbol repeat="true" repeat-gap="12" gland="true" repeat-start="0.01" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="36"></symbol>
</m>
<!--路牙-->
<m k="boundaryType" v="3">
<symbol repeat="true" repeat-gap="10" repeat-start="0" src="assets:omdb/icon_2013_3.svg" symbol-width="16" symbol-height="10"></symbol>
<symbol repeat="true" gland="true" repeat-gap="12" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="16" symbol-height="10"></symbol>
</m>
<!---->
<m k="boundaryType" v="5">
<symbol repeat="true" gland="true" repeat-gap="12" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="24" symbol-height="12"></symbol>
</m>
<!--铺设路面边缘-->
<m k="boundaryType" v="6">
<line stroke="#8a8a8a" use="boundaryType"/>
</m>
<!--杆状障碍物-->
<m k="boundaryType" v="pole">
<line stroke="#ffffff" use="boundaryType"/>
<symbol src="assets:omdb/icon_pole_barrier.svg" gland="true"></symbol>
</m>
<m k="boundaryType" v="2">
<!--标线-->
<m k="markMaterial" v="2|3">
@ -1894,14 +1910,19 @@
<m k="speedFlag" v="0">
<caption fill="#000000" k="maxSpeed" priority="0" size="12" stroke="#ffffff"
stroke-width="1.0"></caption>
<symbol src="assets:omdb/icon_4002_0.svg" symbol-height="38"
symbol-width="20"></symbol>
<symbol src="assets:omdb/icon_4002_0.svg" symbol-width="24"></symbol>
</m>
<m k="speedFlag" v="1">
<caption fill="#000000" k="maxSpeed" priority="0" size="10" stroke="#ffffff"
stroke-width="1.0"></caption>
<symbol src="assets:omdb/icon_4002_1.svg" symbol-height="38"
symbol-width="20"></symbol>
<symbol src="assets:omdb/icon_4002_1.svg" symbol-width="24"></symbol>
</m>
<m k="type" v="angle">
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true" symbol-width="24"
src="assets:omdb/icon_arrow_right.svg" ></symbol>
</m>
<m k="type" v="s_2_e">
<line use="s2e" />
</m>
</m>
@ -1910,14 +1931,19 @@
<m k="speedFlag" v="0">
<caption fill="#000000" k="maxSpeed" priority="0" size="12" stroke="#ffffff"
stroke-width="1.0"></caption>
<symbol src="assets:omdb/icon_4003_0.svg" symbol-height="38"
symbol-width="20"></symbol>
<symbol src="assets:omdb/icon_4003_0.svg" symbol-width="24"></symbol>
</m>
<m k="speedFlag" v="1">
<caption fill="#000000" k="maxSpeed" priority="0" size="12" stroke="#ffffff"
stroke-width="1.0"></caption>
<symbol src="assets:omdb/icon_4003_1.svg" symbol-height="38"
symbol-width="20"></symbol>
<symbol src="assets:omdb/icon_4003_1.svg" symbol-width="24"></symbol>
</m>
<m k="type" v="angle">
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true" symbol-width="24"
src="assets:omdb/icon_arrow_right.svg" ></symbol>
</m>
<m k="type" v="s_2_e">
<line use="s2e" />
</m>
</m>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 683 KiB

After

Width:  |  Height:  |  Size: 777 KiB

View File

@ -1 +1,9 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1689041545166" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30665" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512.005117 958.708971C265.683035 958.708971 65.290005 758.316965 65.290005 511.99386c0-246.310825 200.39303-446.703855 446.715111-446.703855 246.310825 0 446.703855 200.39303 446.703855 446.703855C958.708971 758.316965 758.316965 958.708971 512.005117 958.708971zM512.005117 169.716356c-188.738595 0-342.289784 153.545048-342.289784 342.277504 0 188.738595 153.551188 342.289784 342.289784 342.289784 188.733479 0 342.278527-153.551188 342.278527-342.289784C854.283644 323.261405 700.738595 169.716356 512.005117 169.716356z" p-id="30666" fill="#fcba5a"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1689041545166" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="30665" width="16" height="16"
xmlns:xlink="http://www.w3.org/1999/xlink">
<path
d="M512.005117 958.708971C265.683035 958.708971 65.290005 758.316965 65.290005 511.99386c0-246.310825 200.39303-446.703855 446.715111-446.703855 246.310825 0 446.703855 200.39303 446.703855 446.703855C958.708971 758.316965 758.316965 958.708971 512.005117 958.708971zM512.005117 169.716356c-188.738595 0-342.289784 153.545048-342.289784 342.277504 0 188.738595 153.551188 342.289784 342.289784 342.289784 188.733479 0 342.278527-153.551188 342.278527-342.289784C854.283644 323.261405 700.738595 169.716356 512.005117 169.716356z"
p-id="30666" fill="#fcba5a"></path>
</svg>

Before

Width:  |  Height:  |  Size: 900 B

After

Width:  |  Height:  |  Size: 935 B

View File

@ -1 +1,18 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1695778478511" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11568" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M773.504 615.189333S771.157333 597.333333 746.688 597.333333h-79.338667c17.024 56.981333 31.936 109.546667 31.936 112.618667 0 50.922667-72.554667 72.384-190.229333 72.384-117.653333 0-184.554667-20.053333-184.554667-70.954667 0-3.562667 21.290667-57.429333 38.208-114.048h-86.677333c-17.194667 0-19.989333 15.978667-19.989333 15.978667L174.058667 874.368 188.053333 896h653.909334l8.021333-21.632-76.48-259.178667z" fill="#e54031" p-id="11569" data-spm-anchor-id="a313x.search_index.0.i15.29a03a81xPIsNv" class="selected"></path><path d="M512.021333 128c-21.952 0-39.765333 3.818667-39.765333 8.490667-10.496 31.637333-173.269333 557.717333-173.269333 571.178666 0 50.944 95.381333 81.642667 213.013333 81.642667s213.034667-30.698667 213.034667-81.642667c0-11.712-162.432-539.050667-173.269334-571.178666 0.021333-4.672-17.770667-8.490667-39.744-8.490667z" fill="#ffffff" p-id="11570" data-spm-anchor-id="a313x.search_index.0.i13.29a03a81xPIsNv" class=""></path><path d="M708.181333 649.536C683.349333 687.616 604.608 725.333333 512.981333 725.333333c-92.586667 0-173.994667-36.181333-197.994666-74.88-10.645333 31.637333-19.029333 56.469333-19.029334 69.973334 0 50.901333 96.704 90.218667 216.064 90.218666s216.128-39.338667 216.128-90.218666c0-11.690667-8.938667-38.72-19.968-70.890667zM669.589333 518.698667l-44.245333-144.938667s-39.616 31.552-113.301333 31.552c-73.664 0-113.408-31.552-113.408-31.552l-44.394667 145.194667S398.357333 576 512.042667 576c114.624 0 157.546667-57.301333 157.546666-57.301333zM581.141333 230.592l-29.354666-94.08s-1.770667-8.490667-39.765334-8.490667c-39.338667 0-39.765333 8.490667-39.765333 8.490667l-29.354667 94.016S461.781333 256 512 256c50.24 0 69.141333-25.408 69.141333-25.408z" fill="#e54031" p-id="11571" data-spm-anchor-id="a313x.search_index.0.i12.29a03a81xPIsNv" class="selected"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1695778478511" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="11568" xmlns:xlink="http://www.w3.org/1999/xlink"
width="64" height="64">
<path
d="M773.504 615.189333S771.157333 597.333333 746.688 597.333333h-79.338667c17.024 56.981333 31.936 109.546667 31.936 112.618667 0 50.922667-72.554667 72.384-190.229333 72.384-117.653333 0-184.554667-20.053333-184.554667-70.954667 0-3.562667 21.290667-57.429333 38.208-114.048h-86.677333c-17.194667 0-19.989333 15.978667-19.989333 15.978667L174.058667 874.368 188.053333 896h653.909334l8.021333-21.632-76.48-259.178667z"
fill="#e54031" p-id="11569" data-spm-anchor-id="a313x.search_index.0.i15.29a03a81xPIsNv"
class="selected"></path>
<path
d="M512.021333 128c-21.952 0-39.765333 3.818667-39.765333 8.490667-10.496 31.637333-173.269333 557.717333-173.269333 571.178666 0 50.944 95.381333 81.642667 213.013333 81.642667s213.034667-30.698667 213.034667-81.642667c0-11.712-162.432-539.050667-173.269334-571.178666 0.021333-4.672-17.770667-8.490667-39.744-8.490667z"
fill="#ffffff" p-id="11570" data-spm-anchor-id="a313x.search_index.0.i13.29a03a81xPIsNv"
class=""></path>
<path
d="M708.181333 649.536C683.349333 687.616 604.608 725.333333 512.981333 725.333333c-92.586667 0-173.994667-36.181333-197.994666-74.88-10.645333 31.637333-19.029333 56.469333-19.029334 69.973334 0 50.901333 96.704 90.218667 216.064 90.218666s216.128-39.338667 216.128-90.218666c0-11.690667-8.938667-38.72-19.968-70.890667zM669.589333 518.698667l-44.245333-144.938667s-39.616 31.552-113.301333 31.552c-73.664 0-113.408-31.552-113.408-31.552l-44.394667 145.194667S398.357333 576 512.042667 576c114.624 0 157.546667-57.301333 157.546666-57.301333zM581.141333 230.592l-29.354666-94.08s-1.770667-8.490667-39.765334-8.490667c-39.338667 0-39.765333 8.490667-39.765333 8.490667l-29.354667 94.016S461.781333 256 512 256c50.24 0 69.141333-25.408 69.141333-25.408z"
fill="#e54031" p-id="11571" data-spm-anchor-id="a313x.search_index.0.i12.29a03a81xPIsNv"
class="selected"></path>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="69.7" height="136" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 69.7 136"><defs><radialGradient id="d" cx="16.6" cy="167.7" fx="16.6" fy="167.7" r="1.3" gradientTransform="translate(-4555.9 6707) rotate(38.9) scale(76 -48) skewX(-8.4)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b5b4b4"/><stop offset=".7" stop-color="#6e6c6c"/><stop offset="1" stop-color="#2f2f2f"/></radialGradient><radialGradient id="e" cx="16.4" cy="167.9" fx="16.4" fy="167.9" r=".5" gradientTransform="translate(-867.4 9288.4) scale(54.9 -54.9)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e75545"/><stop offset=".8" stop-color="#c4483b"/><stop offset="1" stop-color="#983b31"/></radialGradient></defs><g id="c"><rect x="0" width="69.7" height="136" style="fill:none; stroke-width:0px;"/><ellipse cx="34.8" cy="123.5" rx="24.2" ry="8.5" style="fill:#4d4d4d; isolation:isolate; opacity:.3; stroke-width:0px;"/><ellipse cx="34.8" cy="123.5" rx="8.5" ry="3.3" style="fill:#363333; isolation:isolate; opacity:.7; stroke-width:0px;"/><path d="m23,104.9c-.5-.5-1-1-1.5-1.5C8.2,97.4-.2,84.2,0,69.7,0,49.6,15.6,33.3,34.8,33.3s34.8,16.3,34.8,36.4-9,28.3-21.7,33.7c-.4.4-.8.9-1.2,1.4-4.7,5.6-8.6,11.9-11.5,18.6,0,0-5-11.2-12.4-18.6Z" style="fill:url(#d); stroke-width:0px;"/><circle cx="34.5" cy="68.4" r="27.5" style="fill:url(#e); stroke-width:0px;"/><circle cx="34.8" cy="68" r="28" style="fill:#fff; stroke-width:0px;"/><circle cx="34.8" cy="68" r="26.5" style="fill:none; stroke:#db4646; stroke-width:3px;"/><circle cx="34.8" cy="68" r="28" style="fill:#fff; stroke-width:0px;"/><circle cx="34.8" cy="68" r="26.5" style="fill:none; stroke:#2f2f2f; stroke-width:3px;"/><line x1="11" y1="79.4" x2="44.8" y2="45.3" style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;"/><line x1="15.8" y1="85.9" x2="52.3" y2="49.5" style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;"/><path d="m22.8,91.7l18.7-18.7,16.5-16.5" style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="69.7" height="136"
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 69.7 136">
<defs>
<radialGradient id="d" cx="16.6" cy="167.7" fx="16.6" fy="167.7" r="1.3"
gradientTransform="translate(-4555.9 6707) rotate(38.9) scale(76 -48) skewX(-8.4)"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#b5b4b4" />
<stop offset=".7" stop-color="#6e6c6c" />
<stop offset="1" stop-color="#2f2f2f" />
</radialGradient>
<radialGradient id="e" cx="16.4" cy="167.9" fx="16.4" fy="167.9" r=".5"
gradientTransform="translate(-867.4 9288.4) scale(54.9 -54.9)"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#e75545" />
<stop offset=".8" stop-color="#c4483b" />
<stop offset="1" stop-color="#983b31" />
</radialGradient>
</defs>
<g id="c">
<rect x="0" width="69.7" height="136" style="fill:none; stroke-width:0px;" />
<ellipse cx="34.8" cy="123.5" rx="24.2" ry="8.5"
style="fill:#4d4d4d; isolation:isolate; opacity:.3; stroke-width:0px;" />
<ellipse cx="34.8" cy="123.5" rx="8.5" ry="3.3"
style="fill:#363333; isolation:isolate; opacity:.7; stroke-width:0px;" />
<path
d="m23,104.9c-.5-.5-1-1-1.5-1.5C8.2,97.4-.2,84.2,0,69.7,0,49.6,15.6,33.3,34.8,33.3s34.8,16.3,34.8,36.4-9,28.3-21.7,33.7c-.4.4-.8.9-1.2,1.4-4.7,5.6-8.6,11.9-11.5,18.6,0,0-5-11.2-12.4-18.6Z"
style="fill:url(#d); stroke-width:0px;" />
<circle cx="34.5" cy="68.4" r="27.5" style="fill:url(#e); stroke-width:0px;" />
<circle cx="34.8" cy="68" r="28" style="fill:#fff; stroke-width:0px;" />
<circle cx="34.8" cy="68" r="26.5" style="fill:none; stroke:#db4646; stroke-width:3px;" />
<circle cx="34.8" cy="68" r="28" style="fill:#fff; stroke-width:0px;" />
<circle cx="34.8" cy="68" r="26.5" style="fill:none; stroke:#2f2f2f; stroke-width:3px;" />
<line x1="11" y1="79.4" x2="44.8" y2="45.3"
style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;" />
<line x1="15.8" y1="85.9" x2="52.3" y2="49.5"
style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;" />
<path d="m22.8,91.7l18.7-18.7,16.5-16.5"
style="fill:none; stroke:#2f2f2f; stroke-linecap:round; stroke-width:2px;" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 28 124">
<defs>
<style>
.cls-1 {
fill: #aa211a;
mix-blend-mode: multiply;
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9 {
stroke-width: 0px;
}
.cls-2 {
fill: none;
opacity: 0;
}
.cls-10 {
isolation: isolate;
}
.cls-3 {
fill: url(#_铃琨眄沭噤桢眚_3);
}
.cls-4 {
fill: #721715;
}
.cls-5 {
fill: #d24f00;
}
.cls-6 {
fill: #dd2824;
}
.cls-7 {
fill: #bc1919;
}
.cls-8 {
fill: #ffe2d6;
}
.cls-9 {
fill: #ff4545;
}
</style>
<linearGradient id="_铃琨眄沭噤桢眚_3" data-name="铃琨眄沭噤桢眚 3" x1="-3198.91" y1="65.71" x2="-3176.55" y2="65.71" gradientTransform="translate(-3173.67) rotate(-180) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#d87a1e"/>
<stop offset=".21" stop-color="#d87a1e"/>
<stop offset=".21" stop-color="#c4660a"/>
<stop offset=".79" stop-color="#9f3e00"/>
<stop offset=".79" stop-color="#913300"/>
<stop offset="1" stop-color="#9d3f00"/>
</linearGradient>
</defs>
<g class="cls-10">
<g id="_图层_2" data-name="图层 2">
<g id="_图层_1-2" data-name="图层 1">
<rect class="cls-2" width="28" height="124"/>
<g>
<g>
<path class="cls-3" d="m2.88,64.12v-1.9l22.36-.58v1.32c-.02,1.74-1.12,3.48-3.3,4.81-4.38,2.67-11.46,2.69-15.81.03-2.18-1.33-3.27-3.09-3.25-4.84v1.16Z"/>
<path class="cls-6" d="m6.13,67.06c4.35,2.66,11.43,2.64,15.81-.03,4.38-2.67,4.4-7,.05-9.66-4.35-2.66-11.43-2.64-15.81.03-4.38,2.67-4.4,7-.05,9.66Z"/>
</g>
<g>
<path class="cls-5" d="m7.52,54.02l3.57-32.53-3.62,32c0,.18.02.35.06.53Z"/>
<path class="cls-5" d="m6.99,58.87c-.04-.09-.07-.19-.1-.28l-.42,3.75s.08.09.13.14l.39-3.6Z"/>
<path class="cls-1" d="m10.41,21.64s-4.45,38.19-4.45,38.52c0,.8.1,1.33.3,1.97,0,0,.07.08.19.21l.42-3.75.58-5.09,3.62-32-.68.15Z"/>
<path class="cls-6" d="m14.8,62.49l-.08-4.63-.63-35.83h-1.41l-1.63,35.39-.21,4.61-.14,3.13c1.2.47,2.6.78,4.17.7l-.06-3.37Z"/>
<path class="cls-7" d="m11.09,21.49l-3.57,32.53-.53,4.85-.39,3.6c.61.61,2.04,1.9,4.09,2.71l.14-3.13.21-4.61,1.63-35.39-1.59-.55Z"/>
<path class="cls-5" d="m7.52,54.02c-.03-.18-.05-.35-.06-.53l-.58,5.09c.03.09.06.19.1.28l.53-4.85Z"/>
<path class="cls-7" d="m17.6,21.86l-.77.18,3.66,31.62.57,4.92.53,4.59c.31-.97.43-2.01.43-3.01l-4.42-38.29Z"/>
<path class="cls-9" d="m21.06,58.58l-.57-4.92-3.66-31.62h-2.75l.63,35.83.08,4.63.06,3.37c2-.11,4.28-.85,6.73-2.7l-.53-4.59Z"/>
</g>
<g>
<path class="cls-4" d="m16.56,23.23c-1.4.86-3.69.85-5.1,0-1.41-.86-1.42-2.26-.02-3.11,1.4-.86,3.69-.85,5.1,0,1.41.86,1.42,2.26.02,3.11Z"/>
<path class="cls-4" d="m16.3,23.12c-1.34.82-3.52.81-4.86,0-1.35-.82-1.35-2.15-.02-2.97,1.34-.82,3.52-.81,4.86,0,1.35.82,1.35,2.15.02,2.97Z"/>
</g>
<g>
<path class="cls-8" d="m19.24,52.34c-3.2,2.75-8.04,2.48-10.81-.59-.59-.66-1.04-1.39-1.35-2.16-.26,2.29-.5,4.35-.69,5.99.33,1.07.89,2.1,1.71,3,3,3.33,8.17,3.76,11.55.98.91-.75,1.59-1.66,2.04-2.64l-.77-6.65c-.42.76-.98,1.47-1.68,2.08Z"/>
<path class="cls-8" d="m19.34,47.54c.43-.36.8-.76,1.12-1.19l-.75-6.53c-.23.27-.48.54-.75.78-3.02,2.64-7.59,2.39-10.21-.57-.18-.2-.34-.41-.49-.63-.23,2.01-.47,4.04-.69,5.99.25.42.54.83.88,1.21,2.83,3.2,7.72,3.62,10.91.94Z"/>
<path class="cls-8" d="m19.18,35.21l-.68-5.9c-2.74,1.8-6.51,1.69-9.05-.22-.2,1.69-.41,3.56-.64,5.51,2.82,2.45,7.32,2.73,10.37.6Z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -24,7 +24,6 @@ import java.util.*
open class ReferenceEntity() : RealmObject(), Parcelable {
@PrimaryKey
var id: String = UUID.randomUUID().toString() // id
@Ignore
lateinit var name: String //要素名
lateinit var table: String //要素表名
var propertiesDb: String = ""

View File

@ -40,6 +40,24 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
layer
}
/**
* 高亮线图层同时只高亮一条线如要素本身线型
*/
private val mDataGeometryPathLayer: PathLayer by lazy {
//高亮线绘制线 样式
val defaultLineStyle = Style.builder()
.stippleColor(context.resources.getColor(R.color.teal_200))
.strokeWidth(5f)
.fillColor(context.resources.getColor(R.color.draw_line_blue2_color))
.fillAlpha(0.3f)
.strokeColor(context.resources.getColor(R.color.draw_line_blue2_color))
.fixed(true).build()
val layer = PathLayer(mMapView.vtmMap, defaultLineStyle)
addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_LINE)
layer
}
/**
* 路口高亮
@ -139,6 +157,42 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
}
}
/**
* 高亮一条线
*/
fun showElementLine(list:List<GeoPoint>) {
try {
mDataGeometryPathLayer.clearPath()
mDataGeometryPathLayer.setPoints(list)
mDataGeometryPathLayer.isEnabled = true
} catch (e: Exception) {
Toast.makeText(mContext, "高亮路线失败 ${e.message}", Toast.LENGTH_SHORT).show()
}
}
/**
* 高亮一条线
*/
fun showElementLine(geometry: String) {
try {
mDataGeometryPathLayer.clearPath()
mDataGeometryPathLayer.setPoints(GeometryTools.getGeoPoints(geometry))
mDataGeometryPathLayer.isEnabled = true
} catch (e: Exception) {
Toast.makeText(mContext, "高亮路线失败 ${e.message}", Toast.LENGTH_SHORT).show()
}
}
/**
* 取消高亮线
*/
fun removeElementLine() {
mDataGeometryPathLayer.clearPath()
mDataGeometryPathLayer.isEnabled = false
}
/**
* 取消高亮线
@ -148,6 +202,14 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
mDefaultPathLayer.isEnabled = false
}
/**
* 取消高亮线
*/
fun removeAllLine() {
removeLine()
removeElementLine()
}
/**
* 移除所有任务高亮线
*/

View File

@ -93,6 +93,26 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
layer
}
/**
* 默认marker图层
*/
private val mDataMarkerLayer: ItemizedLayer by lazy {
//新增marker图标样式
val mDefaultBitmap =
AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.mipmap.icon_path_maker))
mDefaultBitmap.scaleTo(150, 150)
val markerSymbol = MarkerSymbol(
mDefaultBitmap,
MarkerSymbol.HotspotPlace.CENTER
)
val layer = ItemizedLayer(
mapView.vtmMap,
markerSymbol,
)
addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
layer
}
private val niLocationBitmap: Bitmap by lazy {
AndroidBitmap(
BitmapFactory.decodeResource(

View File

@ -75,11 +75,10 @@ public class OMDBDataDecoder extends TileDecoder {
listResult.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
@Override
public void accept(RenderEntity renderEntity) {
if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) {
if (renderEntity.getCode().equals(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode())) {
list.add(renderEntity);
}else if (renderEntity.getCode().equals(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode())) {
} else if (renderEntity.getCode().equals(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode())) {
traffList.add(renderEntity);
} else {
Map<String, Object> properties = new HashMap<>(renderEntity.getProperties().size());
@ -93,8 +92,8 @@ public class OMDBDataDecoder extends TileDecoder {
});
//增加交通标牌聚合显示
List<RenderEntity> list1 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode(), list, 5.0);
if(list1!=null&&list1.size()>0){
Log.e("qj","聚合交通标牌转换开始"+list.size());
if (list1 != null && list1.size() > 0) {
Log.e("qj", "聚合交通标牌转换开始" + list.size());
list1.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
@Override
public void accept(RenderEntity renderEntity) {
@ -103,12 +102,12 @@ public class OMDBDataDecoder extends TileDecoder {
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
}
});
Log.e("qj","聚合交通标牌转换结束"+list1.size());
Log.e("qj", "聚合交通标牌转换结束" + list1.size());
}
//增加交通标牌聚合显示
List<RenderEntity> list2 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode(), traffList, 5.0);
if(list2!=null&&list2.size()>0){
Log.e("qj","聚合红绿灯转换开始"+traffList.size());
if (list2 != null && list2.size() > 0) {
Log.e("qj", "聚合红绿灯转换开始" + traffList.size());
list2.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
@Override
public void accept(RenderEntity renderEntity) {
@ -117,7 +116,7 @@ public class OMDBDataDecoder extends TileDecoder {
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
}
});
Log.e("qj","聚合红绿灯转换结束"+list2.size());
Log.e("qj", "聚合红绿灯转换结束" + list2.size());
}
return true;
}

View File

@ -127,7 +127,6 @@ public class OMDBTileDataSource implements ITileDataSource {
for (String type : Constant.HAD_LAYER_INVISIABLE_ARRAY) {
realmQuery.notEqualTo("table", type);
}
realmQuery.notEqualTo("table", "OMDB_TRAFFIC_SIGN");
realmQuery.endGroup();
}
long time = System.currentTimeMillis();

View File

@ -35,7 +35,7 @@ import java.util.List;
* @author qj 几何工具类
*/
public class GeometryTools {
private final static String TAG = "GeometryTools";
static final double PI = 3.14159216;
private static volatile GeometryTools mInstance;
static double earthRadiusMeters = 6371000.0;
@ -1647,4 +1647,89 @@ public class GeometryTools {
return listReslut;
}
/**
* 线几何按距离等分点
*/
public static synchronized List<GeoPoint> getLineToDengGeoPints(Geometry lineGeometry, double dengDisance) {
List<GeoPoint> geoPointList = new ArrayList<>();
//获取线几何点
List<GeoPoint> list = getGeoPoints(lineGeometry);
if(list!=null&&list.size()>=2) {
for (int i = 0; i < list.size() - 1; i++) {
GeoPoint geoPoint1 = list.get(i);
GeoPoint geoPoint2 = list.get(i + 1);
double disance = getDistance(geoPoint1.getLatitude(), geoPoint1.getLongitude(), geoPoint2.getLatitude(), geoPoint2.getLongitude());
//只有第一个点进行添加后面数据过滤掉
if(i==0){
geoPointList.add(geoPoint1);
}
geoPointList.add(geoPoint2);
if (disance > dengDisance) {
//向上取整
int num = (int) Math.ceil(disance / dengDisance);
//计算等分数据
List<GeoPoint> dengList = getDengGeoPoint(geoPoint1, geoPoint2, num);
if (dengList != null && dengList.size() > 0) {
geoPointList.addAll(dengList);
}
}
}
}
return geoPointList;
}
/**
* 计算两点之间等距的经纬度
*/
private static List<GeoPoint> getDengGeoPoint(GeoPoint geoPoint1, GeoPoint geoPoint2, int number) {
double aaa, bbb, ccc = 0, ddd = 0;
List<GeoPoint> geoPointList = new ArrayList<>();
for (int i = 1; i < number + 1; i++) {
if (geoPoint1.getLongitude() > geoPoint2.getLongitude() && geoPoint1.getLatitude() > geoPoint2.getLatitude()) {
aaa = (geoPoint1.getLongitude() - geoPoint2.getLongitude()) / (number + 1);
ccc = geoPoint2.getLongitude() + aaa * (i);
bbb = (geoPoint1.getLatitude() - geoPoint2.getLatitude()) / (number + 1);
ddd = bbb * (i) + geoPoint2.getLatitude();
Log.e(TAG, "getLatLng:a " + ddd + " " + ccc);
} else if (geoPoint1.getLongitude() < geoPoint2.getLongitude() && geoPoint1.getLatitude() < geoPoint2.getLatitude()) {
aaa = (geoPoint2.getLongitude() - geoPoint1.getLongitude()) / (number + 1);
ccc = geoPoint1.getLongitude() + aaa * (i);
bbb = (geoPoint2.getLatitude() - geoPoint1.getLatitude()) / (number + 1);
ddd = geoPoint1.getLatitude() + bbb * i;
Log.e(TAG, "getLatLng:b " + ddd + " " + ccc);
} else if (geoPoint1.getLongitude() > geoPoint2.getLongitude() && geoPoint1.getLatitude() < geoPoint2.getLatitude()) {
aaa = (geoPoint1.getLongitude() - geoPoint2.getLongitude()) / (number + 1);
ccc = geoPoint2.getLongitude() + aaa * (number + 1 - i);
bbb = (geoPoint2.getLatitude() - geoPoint1.getLatitude()) / (number + 1);
ddd = geoPoint1.getLatitude() + bbb * i;
Log.e(TAG, "getLatLng:c " + ddd + " " + ccc);
} else if (geoPoint1.getLongitude() < geoPoint2.getLongitude() && geoPoint1.getLatitude() > geoPoint2.getLatitude()) {
aaa = (geoPoint2.getLongitude() - geoPoint1.getLongitude()) / (number + 1);
ccc = geoPoint1.getLongitude() + aaa * (i);
bbb = (geoPoint1.getLatitude() - geoPoint2.getLatitude()) / (number + 1);
ddd = geoPoint1.getLatitude() - bbb * i;
Log.e(TAG, "getLatLng:d " + ddd + " " + ccc);
}
geoPointList.add(new GeoPoint(ddd, ccc));
}
return geoPointList;
}
}