| | |
| | | package com.flightfeather.uav.domain.repository |
| | | |
| | | import com.flightfeather.uav.common.utils.MapUtil |
| | | import com.flightfeather.uav.domain.entity.SceneInfo |
| | | import com.flightfeather.uav.domain.mapper.SceneInfoMapper |
| | | import com.flightfeather.uav.lightshare.bean.AreaVo |
| | |
| | | .andLessThanOrEqualTo("latitude", range[3]) |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 根据多边形筛选场景 |
| | | * @param polygon 多边形坐标列表,顺序为顺时针或逆时针(要求使用火星坐标系) |
| | | * @return 多边形内的场景列表 |
| | | */ |
| | | fun findByPolygon(polygon: List<Pair<Double, Double>>): List<SceneInfo?> { |
| | | // 计算多边形四至范围 |
| | | val bounds = MapUtil.calFourBoundaries(polygon) |
| | | val sceneList = findByCoordinateRange(bounds) |
| | | // 筛选是否在反向溯源区域多边形内部 |
| | | return sceneList.filter { scene -> |
| | | scene ?: false |
| | | val point = scene!!.longitude.toDouble() to scene.latitude.toDouble() |
| | | MapUtil.isPointInPolygon(point, polygon) |
| | | } |
| | | } |
| | | |
| | | fun findBySceneTypes(sceneTypes: List<Int>): List<SceneInfo?> { |
| | | if (sceneTypes.isEmpty()){ |
| | | return emptyList() |
| | | } |
| | | return sceneInfoMapper.selectByExample(Example(SceneInfo::class.java).apply { |
| | | createCriteria().andIn("typeId", sceneTypes) |
| | | }) |
| | | } |
| | | } |