feiyu02
2025-04-11 635d762aef37b5de6cd2e34f4a076ab56d9a239d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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)
    }
}