[5.0.0]
[计算里程优化]
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user