package com.flightfeather.uav.common.location
|
|
import com.flightfeather.uav.domain.entity.SceneInfo
|
import com.flightfeather.uav.domain.repository.SceneInfoRep
|
import org.springframework.stereotype.Component
|
import tk.mybatis.mapper.entity.Example
|
import kotlin.math.PI
|
|
/**
|
* 路段周边查询
|
*/
|
@Component
|
class LocationRoadNearby(private val sceneInfoRep: SceneInfoRep) {
|
|
data class BasePlace(
|
val name: String,
|
val sP: Pair<Double, Double>,
|
val eP: Pair<Double, Double>,
|
)
|
|
/**
|
* 根据圆心和半径查询范围内监测点(当前简化操作,改为以直径为边长的正方形范围)
|
* @param center 圆心
|
* @param radius 半径(单位:米)
|
* @return 场景列表
|
*/
|
fun searchByRadius(center: Pair<Double, Double>, radius: Double): List<SceneInfo?> {
|
// 求经度的最小值
|
val minLng = CoordinateUtil.getPointByLen(center, radius, PI * 1.5).first
|
// 求经度的最大值
|
val maxLng = CoordinateUtil.getPointByLen(center, radius, PI * 0.5).first
|
// 求纬度的最小值
|
val minLat = CoordinateUtil.getPointByLen(center, radius, PI).second
|
// 求纬度的最大值
|
val maxLat = CoordinateUtil.getPointByLen(center, radius, .0).second
|
|
val list = listOf(minLng, maxLng, minLat, maxLat)
|
return getSceneFromDb(list)
|
}
|
|
/**
|
* 根据限定矩形范围从数据库获取符合条件的点位
|
*/
|
private fun getSceneFromDb(range: List<Double>): List<SceneInfo?> {
|
return sceneInfoRep.findByCoordinateRange(range)
|
}
|
}
|