时间区间算法,车道施工,道路施工

This commit is contained in:
squallzhjch 2023-08-30 14:45:58 +08:00
parent 6447bbb8d5
commit 9fed02564c
6 changed files with 373 additions and 54 deletions

View File

@ -134,7 +134,7 @@ class TaskUploadScope(
evaluationTaskId = taskBean.id.toString(), evaluationTaskId = taskBean.id.toString(),
linkPid = hadLinkDvoBean.linkPid,//"84207223282277331" linkPid = hadLinkDvoBean.linkPid,//"84207223282277331"
linkStatus = linkStatus, linkStatus = linkStatus,
markId = hadLinkDvoBean.mesh,//"20065597" markId = UUID.randomUUID().toString(),//"20065597"
trackPhotoNumber = "", trackPhotoNumber = "",
markGeometry = "", markGeometry = "",
featureName = "", featureName = "",
@ -195,7 +195,7 @@ class TaskUploadScope(
evaluationTaskId = taskBean.id.toString(), evaluationTaskId = taskBean.id.toString(),
linkPid = hadLinkDvoBean.linkPid,//"84207223282277331" linkPid = hadLinkDvoBean.linkPid,//"84207223282277331"
linkStatus = linkStatus, linkStatus = linkStatus,
markId = hadLinkDvoBean.mesh,//"20065597" markId = it.id,
trackPhotoNumber = "", trackPhotoNumber = "",
markGeometry = it.geometry, markGeometry = it.geometry,
featureName = it.classCode, featureName = it.classCode,

View File

@ -142,7 +142,7 @@ class EvaluationResultViewModel @Inject constructor(
override fun onCleared() { override fun onCleared() {
super.onCleared() super.onCleared()
mapController.mMapView.removeOnNIMapClickListener(TAG) mapController.mMapView.removeOnNIMapClickListener(TAG)
mapController.markerHandle.removeMarker(TAG) mapController.markerHandle.removeMarker()
mapController.lineHandler.removeLine() mapController.lineHandler.removeLine()
} }

View File

@ -113,7 +113,7 @@ class SignUtil {
DataCodeEnum.OMDB_VIADUCT.code -> "高架" DataCodeEnum.OMDB_VIADUCT.code -> "高架"
DataCodeEnum.OMDB_LINK_CONSTRUCTION.code -> "道路施工" DataCodeEnum.OMDB_LINK_CONSTRUCTION.code -> "道路施工"
DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> "车道施工" DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> "车道施工"
else -> "" else -> DataCodeEnum.valueOf(data.code).tableName
} }
} }
@ -349,18 +349,53 @@ class SignUtil {
title = "linkPid", text = "${data.properties["linkPid"]}" title = "linkPid", text = "${data.properties["linkPid"]}"
) )
) )
val limitType = when (data.properties["limitType"]) {
"4" -> "施工(全封闭)"
"13" -> "施工(非全封闭)"
else -> ""
}
list.add(
TwoItemAdapterItem(
title = "限制类型",
text = limitType
)
)
val validPeriod = data.properties["validPeriod"] val validPeriod = data.properties["validPeriod"]
if (validPeriod != null) { if (validPeriod != null) {
list.add(
TwoItemAdapterItem(
title = "施工时间",
text = "${TimePeriodUtil.getTimePeriod(validPeriod)}"
)
)
} }
} }
//车道施工 //车道施工
DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> { DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> {
list.add( list.add(
TwoItemAdapterItem( TwoItemAdapterItem(
title = "linkPid", text = "${data.properties["linkPid"]}" title = "车道号码", text = "${data.properties["laneLinkPid"]}"
) )
) )
val startTime = data.properties["startTime"]
if (startTime != null) {
list.add(
TwoItemAdapterItem(
title = "施工开始时间",
text = "${TimePeriodUtil.getTimePeriod(startTime)}"
)
)
}
val endTime = data.properties["endTime"]
if (endTime != null) {
list.add(
TwoItemAdapterItem(
title = "施工结束时间",
text = "${TimePeriodUtil.getTimePeriod(endTime)}"
)
)
}
} }
} }
adapter.data = list adapter.data = list

View File

@ -21,52 +21,188 @@ private data class TimePeriodObject(
var startTime: TimePeriod? = null, var startTime: TimePeriod? = null,
//结束时间 //结束时间
var endTime: TimePeriod? = null, var endTime: TimePeriod? = null,
//大括号,全部 //是否是节假日
var allTime: TimePeriod? = null, var bH: Boolean = false,
//是否是节假日除外
var b_H: Boolean = false,
//动态变化
var bVMS: Boolean = false,
//最终输出
var res: String = ""
) { ) {
/** /**
* 交集 * * 交集 *
*/ */
fun intersection(periodObject: TimePeriodObject) { fun intersection(periodObject: TimePeriodObject) {
startTime?.let { one -> if (res != "" && periodObject.res == "") {
periodObject.startTime?.let { two -> res = "${res}${periodObject.toText()}"
if (one.year == "") {
one.year = two.year } else if (res == "" && periodObject.res != "") {
} res = "${toText()}${periodObject.res}"
if (one.month == "") { } else if (res != "" && periodObject.res != "") {
one.month = two.month res = "${res}${periodObject.res}"
} } else {
if (one.day == "") { if (startTime == null) {
one.day = two.day startTime = periodObject.startTime
} } else if (periodObject.startTime != null) {
if (one.hour == "") { if (startTime!!.year == "")
one.hour = two.hour startTime!!.year = periodObject.startTime!!.year
} if (startTime!!.month == "")
if (one.minutes == "") { startTime!!.month = periodObject.startTime!!.month
one.minutes = two.minutes if (startTime!!.day == "")
} startTime!!.day = periodObject.startTime!!.day
if (one.week == "") { if (startTime!!.hour == "")
one.week = two.week startTime!!.hour = periodObject.startTime!!.hour
if (startTime!!.week == "")
startTime!!.week = periodObject.startTime!!.week
if (startTime!!.minutes == "")
startTime!!.minutes = periodObject.startTime!!.minutes
} }
if (endTime == null) {
endTime = periodObject.endTime
} else if (periodObject.endTime != null) {
if (endTime!!.year == "")
endTime!!.year = periodObject.endTime!!.year
if (endTime!!.month == "")
endTime!!.month = periodObject.endTime!!.month
if (endTime!!.day == "")
endTime!!.day = periodObject.endTime!!.day
if (endTime!!.hour == "")
endTime!!.hour = periodObject.endTime!!.hour
if (endTime!!.week == "")
endTime!!.week = periodObject.endTime!!.week
if (endTime!!.minutes == "")
endTime!!.minutes = periodObject.endTime!!.minutes
} }
if (!bH)
bH = periodObject.bH
if (!b_H)
b_H = periodObject.b_H
if (!bVMS)
bVMS = periodObject.bVMS
} }
println("交集 $res")
} }
/** /**
* 合集 + * 合集 +
*/ */
fun compilation(periodObject: TimePeriodObject) { fun compilation(periodObject: TimePeriodObject) {
res = if (res != "" && periodObject.res == "") {
"${res},${periodObject.toText()}"
} else if (res == "" && periodObject.res != "") {
"${toText()},${periodObject.res}"
} else if (res != "" && periodObject.res != "") {
"${res},${periodObject.res}"
} else
"${toText()},${periodObject.toText()}"
println("合集 $res")
} }
/** /**
* *
*/ */
fun toText(): String { fun toText(): String {
if(endTime == null && allTime == null){ if (res == "") {
startTime?.let {
if (it.year != "") {
res = "${it.year}"
}
if (it.month != "") {
res = if (it.year == "") {
"每年${it.month}"
} else {
"$res${it.month}"
}
}
if (it.day != "") {
res = if (it.month == "") {
"${res}每月${it.day}"
} else
"$res${it.day}"
}
}
endTime?.let {
if (it.year != "" || it.month != "" || it.day != "")
res = "${res}"
if (it.year != "") {
res = "${res}${it.year}"
}
if (it.month != "") {
res = "$res${it.month}"
}
if (it.day != "") {
res = "$res${it.day}"
}
}
startTime?.let {
if (it.week != "") {
res = "${res}${getWeekEnum(it.week)}"
}
}
endTime?.let {
if (it.week != "") {
res = "${res}${getWeekEnum(it.week)}"
}
}
startTime?.let {
if (it.hour != "") {
res = if (it.minutes != "") {
if (it.minutes.length == 1) {
"${res}${it.hour}:0${it.minutes}"
} else {
"${res}${it.hour}:${it.minutes}"
}
} else {
"${res}:00"
}
}
}
endTime?.let {
if (it.hour != "") {
res = if (it.minutes != "") {
if (it.minutes.length == 1) {
"${res}-${it.hour}:0${it.minutes}"
} else {
"${res}-${it.hour}:${it.minutes}"
}
} else {
"${res}-${it.hour}:00"
}
}
}
if (bH) {
res = "节假日:$res"
}
if (b_H) {
res = "节假日除外${res}:"
}
if (bVMS) {
res = "动态变化:$res"
}
}
println("中间:$res")
return res
}
private fun getWeekEnum(s: String): String {
return when (s) {
"1" -> "周日"
"2" -> "周一"
"3" -> "周二"
"4" -> "周三"
"5" -> "周四"
"6" -> "周五"
"7" -> "周六"
else -> ""
} }
return ""
} }
} }
@ -78,49 +214,124 @@ private enum class TimeType {
HOUR, HOUR,
MINUTES, MINUTES,
WEEK, WEEK,
HLD,
_HLD,
VMS
} }
class TimePeriodUtil { class TimePeriodUtil {
companion object { companion object {
private fun getTimePeriod(time: String): String { fun getTimePeriod(time: String): String {
println("时间段:$time")
var i = 0
val charArray = time.toCharArray()
val list = mutableListOf<TimePeriodObject>() val list = mutableListOf<TimePeriodObject>()
getPeriodObject(time.toCharArray(), 0, list) while (i < charArray.size) {
when (charArray[i]) {
'[' -> {
i = getPeriodObject(charArray, i + 1, list)
}
'*' -> {
i = getPeriodObject(charArray, i + 1, list)
if (list.size > 1) {
list[0].intersection(list[1])
list.removeAt(1)
}
}
'+' -> {
i = getPeriodObject(charArray, i + 1, list)
if (list.size > 1) {
list[0].compilation(list[1])
list.removeAt(1)
}
}
}
i++
}
if (list.size > 0)
return list[0].toText() return list[0].toText()
return ""
} }
private fun getPeriodObject( private fun getPeriodObject(
charArray: CharArray, charArray: CharArray,
index: Int, index: Int,
parentList: MutableList<TimePeriodObject> parentList: MutableList<TimePeriodObject>,
): Int { ): Int {
var i = index var i = index
val list = mutableListOf<TimePeriodObject>()
while (i < charArray.size) { while (i < charArray.size) {
when (charArray[i]) { when (charArray[i]) {
'[' -> { '[' -> {
i = getPeriodObject(charArray, i, parentList) i = getPeriodObject(charArray, i + 1, list)
} }
'(' -> { '(' -> {
var parentPeriodObject = TimePeriodObject() var parentPeriodObject = TimePeriodObject()
i = getMixUnit(charArray, i, parentPeriodObject) i = getMixUnit(charArray, i, parentPeriodObject)
parentList.add(parentPeriodObject) parentList.add(parentPeriodObject)
return i
} }
'*' -> { '*' -> {
i = getPeriodObject(charArray, i + 1, parentList) i = getPeriodObject(charArray, i + 1, list)
if (parentList.size > 1) { if (list.size > 1) {
val o = parentList[0] list[0].intersection(list[1])
parentList[0].intersection(parentList[1]) list.removeAt(1)
parentList.removeAt(1)
} }
} }
'+' -> { '+' -> {
i = getPeriodObject(charArray, i + 1, parentList) i = getPeriodObject(charArray, i + 1, list)
if (parentList.size > 1) { if (list.size > 1) {
val o = parentList[0] list[0].compilation(list[1])
parentList[0].compilation(parentList[1]) list.removeAt(1)
parentList.removeAt(1)
} }
} }
'H', '-', 'V' -> {
i = getOther(charArray, i, parentList)
return i
}
']' -> {
if (list.isNotEmpty()) {
parentList.add(list[0])
}
return i
}
}
i++
}
return i
}
private fun getOther(
charArray: CharArray,
index: Int,
parentList: MutableList<TimePeriodObject>
): Int {
var i = index
var timeType = TimeType.NONE
while (i < charArray.size) {
when (charArray[i]) {
'H' -> {
if (timeType == TimeType.NONE) {
timeType = TimeType.HLD
parentList.add(TimePeriodObject(bH = true))
}
}
'-' -> {
if (timeType == TimeType.NONE) {
timeType = TimeType._HLD
parentList.add(TimePeriodObject(b_H = true))
}
}
'V' -> {
if (timeType == TimeType.NONE) {
timeType = TimeType.VMS
parentList.add(TimePeriodObject(bVMS = true))
}
}
']' -> {
return i - 1
}
} }
i++ i++
} }
@ -136,6 +347,7 @@ class TimePeriodUtil {
parentPeriodObject: TimePeriodObject parentPeriodObject: TimePeriodObject
): Int { ): Int {
var i = index var i = index
while (i < charArray.size) { while (i < charArray.size) {
when (charArray[i]) { when (charArray[i]) {
'(' -> { '(' -> {
@ -147,13 +359,13 @@ class TimePeriodUtil {
parentPeriodObject.endTime = timePeriod parentPeriodObject.endTime = timePeriod
} }
} }
'{' -> { // '{' -> {
val timePeriod = TimePeriod() // val timePeriod = TimePeriod()
i = getNumString(charArray, i + 1, timePeriod) // i = getNumString(charArray, i + 1, timePeriod)
parentPeriodObject.allTime = timePeriod // parentPeriodObject.allTime = true
} // }
']' -> { ']' -> {
return i return i - 1
} }
} }
i++ i++
@ -210,5 +422,67 @@ class TimePeriodUtil {
} }
fun main() { fun main() {
var t = ""
var text = ""
t = "[(y2010M8d16)(y2010M9d17)]"
text = TimePeriodUtil.getTimePeriod(t)
println("1:$text")
t = "[(y2010M8d17){d1}]"
text = TimePeriodUtil.getTimePeriod(t)
println("2:$text")
t = "[(M8d17)(M8d31)]"
text = TimePeriodUtil.getTimePeriod(t)
println("3:$text")
t = "[(M8d17){d1}]"
text = TimePeriodUtil.getTimePeriod(t)
println("4:$text")
t = "[(h9m0)(h23m59)]]"
text = TimePeriodUtil.getTimePeriod(t)
println("5:$text")
t = "[(y2010)(y2030)]"
text = TimePeriodUtil.getTimePeriod(t)
println("6:$text")
t = "[(y2010){y1}]"
text = TimePeriodUtil.getTimePeriod(t)
println("8:$text")
t = "[(y2010M8t1){t1}]"
text = TimePeriodUtil.getTimePeriod(t)
println("9:$text")
t = "[(y2010M8t1)(y2010M8t3)]"
text = TimePeriodUtil.getTimePeriod(t)
println("10:$text")
t = "[(t4)(t1)]"
text = TimePeriodUtil.getTimePeriod(t)
println("11:$text")
t = "[(t4){d1}]"
text = TimePeriodUtil.getTimePeriod(t)
println("12:$text")
t = "[[(y2010M8d8)(y2010M8d24)]*[(h7m0)(h22m0)]]"
text = TimePeriodUtil.getTimePeriod(t)
println("13:$text")
t = "[[(M8d1)(M8d31)]*[(t3){d1}]*[(h6m0)(h19m0)]]"
text = TimePeriodUtil.getTimePeriod(t)
println("14:$text")
t = "[[[(t4)(t6)]*[(h7m30)(h12m0)]]+[[(t4)(t6)]*[(h14m0)(h20m0)]]]"
text = TimePeriodUtil.getTimePeriod(t)
println("15:$text")
t = "[[[(M5d7){d1}]*[(h9m0)(h23m59)]]+[(M5d8)(M8d14)]+[[(M8d15){d1}]*[(h0m0)(h21m0)]]]"
text = TimePeriodUtil.getTimePeriod(t)
println("16:$text")
t = "[[HLD]*[(h8m0)(h16m0)]]"
text = TimePeriodUtil.getTimePeriod(t)
println("17:$text")
t = "[[-HLD]*[[[(M5d7){d1}]*[(h9m0)(h23m59)]]+[(M5d8)(M8d14)]+[[(M8d15){d1}]*[(h0m0)(h21m0)]]]]"
text = TimePeriodUtil.getTimePeriod(t)
println("18:$text")
t = "[[VMS]*[(h8m0)(h16m0)]]"
text = TimePeriodUtil.getTimePeriod(t)
println("19:$text")
} }

View File

@ -345,6 +345,16 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
} }
} }
fun removeMarker() {
for (e in mDefaultMarkerLayer.itemList) {
if (e is MarkerItem) {
mDefaultMarkerLayer.removeItem(e)
break
}
}
mMapView.vtmMap.updateMap(true)
}
/** /**
* 增加或更新marker * 增加或更新marker

2
vtm

@ -1 +1 @@
Subproject commit 163b9f0773f8216621d2a2c46aa7fa1ee98e431f Subproject commit 1577cd351a9edf629438840f6bff45bdcc08302c