[计算里程优化]
This commit is contained in:
yangyakun
2023-08-09 10:35:46 +08:00
committed by zhongchao
parent 982848044a
commit ae6c09f36b
2 changed files with 97 additions and 6 deletions

View File

@@ -1,13 +1,54 @@
package com.mogo.och.common.module.manager.distancemamager
data class DistanceDegree(var distance:Float,var degree:Double?,var isNext:Boolean?):Comparable<DistanceDegree>{
data class DistanceDegree(var distance: Float, var degree: Double?, var isNext: Boolean?) :
Comparable<DistanceDegree> {
override fun compareTo(other: DistanceDegree): Int {
// 对比距离
if(distance == other.distance){
if (distance == other.distance) {
return 0;
} else if(distance < other.distance){
} else if (distance < other.distance) {
return -1;
}
return 1;
}
var next: DistanceDegree? = null
fun recycle() {
synchronized(sPoolSync) {
if (sPoolSize < MAX_POOL_SIZE) {
next = sPool
sPool = this
sPoolSize++
}
//Logger.d("DistanceDegree","缓存对象个数${sPoolSize}个")
}
}
companion object {
var sPoolSync = Any()
private var sPool: DistanceDegree? = null
private var sPoolSize = 0
private var MAX_POOL_SIZE = 20
fun obtain(distance: Float, degree: Double?, isNext: Boolean?): DistanceDegree {
synchronized(sPoolSync) {
if (sPool != null) {
val m: DistanceDegree = sPool!!
sPool = m.next
m.next = null
m.distance = distance
m.degree = degree
m.isNext = isNext
sPoolSize--
//Logger.d("DistanceDegree","取出一个对象个数${sPoolSize}个")
return m
}
//Logger.d("DistanceDegree","创建一个对象 ${sPoolSize}个")
return DistanceDegree(distance, degree, isNext)
}
}
}
}

View File

@@ -601,6 +601,7 @@ object CoordinateCalculateRouteUtil {
type:Int,
size:Int = 4
): Triple<Int,Boolean?,Float> {
val startTime = System.currentTimeMillis()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"参数:[$preIndex $endIndex) mRoutePoints:${mRoutePoints.size} type:$type size:$size" +
" location:(${location.latitude},${location.longitude},${location.heading})")
@@ -615,9 +616,9 @@ object CoordinateCalculateRouteUtil {
latLngIndex.longitude,
latLngIndex.latitude
)
distanceMap[DistanceDegree(distance, null,null)] = index
distanceMap[DistanceDegree.obtain(distance, null,null)] = index
if (distanceMap.size > size) {
distanceMap.pollLastEntry()
distanceMap.pollLastEntry()?.key?.recycle()
}
}
distanceMap.forEach {
@@ -687,6 +688,12 @@ object CoordinateCalculateRouteUtil {
// 通过航向角过滤一遍
if(distanceDegree.degree!=null&&DrivingDirectionUtils.getAngleDiff(location.heading, distanceDegree.degree!!)<90){
currentIndex = pointIndex
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
return Triple(currentIndex,distanceDegree.isNext,distanceDegree.distance)
}
}
@@ -701,12 +708,14 @@ object CoordinateCalculateRouteUtil {
val next = iterator.next()
val key = next.key
if (key.degree == null) {
key.recycle()
iterator.remove()
} else {
if (location.heading != 0.0) {
key.degree?.let {
val dexAngle = DrivingDirectionUtils.getAngleDiff(location.heading, it)
if (dexAngle > 90) {
key.recycle()
iterator.remove()
}
}
@@ -715,6 +724,14 @@ object CoordinateCalculateRouteUtil {
}
if(distanceMap.size==0&&size<16){
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return getNearestPointInfo(preIndex,endIndex,mRoutePoints,location,type,size+2)
}
@@ -734,9 +751,25 @@ object CoordinateCalculateRouteUtil {
if(preIndexDistance!=null&&preIndexNextDistance!=null){
if(preIndexDistance!!.distance<preIndexNextDistance!!.distance){
currentIndex = preIndex
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return Triple(currentIndex,preIndexDistance?.isNext,preIndexDistance!!.distance)
}else{
currentIndex = preIndex+1
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return Triple(currentIndex,preIndexNextDistance?.isNext,preIndexNextDistance!!.distance)
}
}
@@ -763,6 +796,7 @@ object CoordinateCalculateRouteUtil {
val next = iteratorRemove.next()
val key = next.key
if(next.value>middleVale){
key.recycle()
iteratorRemove.remove()
}
}
@@ -773,6 +807,7 @@ object CoordinateCalculateRouteUtil {
val next = iteratorRemove.next()
val key = next.key
if(next.value<middleVale){
key.recycle()
iteratorRemove.remove()
}
}
@@ -789,6 +824,14 @@ object CoordinateCalculateRouteUtil {
// 排除没有第一个值0是
if(value==preIndex+1&&preIndex!=0){
currentIndex = value
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return Triple(currentIndex,key.isNext,key.distance)
}
key.distance.let {
@@ -799,7 +842,14 @@ object CoordinateCalculateRouteUtil {
}
}
}
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {
iterator1.next().key.recycle()
iterator1.remove()
}
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return Triple(currentIndex,isNext,tempDistance)
}
}