package com.flightfeather.uav.lightshare.bean
|
|
import com.flightfeather.uav.common.utils.MapUtil
|
import kotlin.math.PI
|
|
/**
|
* 网格化权重分析象限对象
|
* 以监测点为网格线的中心的基础上,向外扩散的每一圈网格按照坐标系分为四个象限
|
* 每个象限中的网格按照角上的网格作为分界,分成3部分,分别有不同的向外扩散机制
|
*/
|
class QuadrantInfo{
|
|
val gridsHorizontal = mutableListOf<GridVo>()
|
val gridsCorner = mutableListOf<GridVo>()
|
val gridsVertical = mutableListOf<GridVo>()
|
|
fun new(type: Quadrant, turns: Int, lng: Double, lat: Double, dx: Double, dy: Double) {
|
var plusMinusX = 1 // 经度增加或减少
|
var plusMinusY = 1 // 纬度增加或减少
|
when (type) {
|
Quadrant.First -> {
|
plusMinusX = 1
|
plusMinusY = 1
|
}
|
Quadrant.Second -> {
|
plusMinusX = 1
|
plusMinusY = -1
|
}
|
Quadrant.Third -> {
|
plusMinusX = -1
|
plusMinusY = -1
|
}
|
Quadrant.Fourth -> {
|
plusMinusX = -1
|
plusMinusY = 1
|
}
|
}
|
// 角
|
gridsCorner.add(GridVo("$turns-${type.value}-c").apply {
|
lb = Pair(lng + turns * dx * plusMinusX, lat + turns * dy * plusMinusY)
|
rt = Pair(lb!!.first + dx, lb!!.second + dy)
|
ciLongitude = (lb!!.first + dx / 2).toBigDecimal()
|
ciLatitude = (lb!!.second + dy / 2).toBigDecimal()
|
})
|
// 水平方向
|
repeat(turns) {
|
gridsHorizontal.add(GridVo("$turns-${type.value}-l-$it").apply {
|
lb = Pair(lng + it * dx * plusMinusX, lat + turns * dy * plusMinusY)
|
rt = Pair(lb!!.first + dx, lb!!.second + dy)
|
ciLongitude = (lb!!.first + dx / 2).toBigDecimal()
|
ciLatitude = (lb!!.second + dy / 2).toBigDecimal()
|
})
|
}
|
// 垂直方向
|
repeat(turns) {
|
gridsVertical.add(GridVo("$turns-${type.value}-l-$it").apply {
|
lb = Pair(lng + turns * dx * plusMinusX, lat + it * dy * plusMinusY)
|
rt = Pair(lb!!.first + dx, lb!!.second + dy)
|
ciLongitude = (lb!!.first + dx / 2).toBigDecimal()
|
ciLatitude = (lb!!.second + dy / 2).toBigDecimal()
|
})
|
}
|
}
|
|
fun next() {
|
|
}
|
}
|
|
enum class Quadrant(val des: String, val value:Int){
|
First("右上象限", 1),
|
Second("右下象限", 2),
|
Third("左下象限", 3),
|
Fourth("左上象限", 4),
|
}
|
|
object GridFactory {
|
|
// 监测点坐标
|
private var lng = .0
|
private var lat = .0
|
private var dx = .0
|
private var dy = .0
|
|
/**
|
* 设置监测点坐标
|
*/
|
fun setCenter(lng: Double, lat: Double): GridFactory {
|
this.lng = lng
|
this.lat = lat
|
return this
|
}
|
|
/**
|
* 设置网格长度
|
* @param len 网格长度(米)
|
*/
|
fun setGridLength(len: Double): GridFactory {
|
val center = Pair(lng, lat)
|
val p1 = MapUtil.getPointByLen(center, len, PI / 2)//正东方向(90°)的坐标点
|
val p2 = MapUtil.getPointByLen(center, len, PI)//正南方向(180°)的坐标点
|
this.dx = p1.first - center.first
|
this.dy = center.second - p2.second
|
return this
|
}
|
|
/**
|
* 新建一圈网格
|
* @param turns 圈数(从0开始)
|
*/
|
// fun newGridsByTurns(turns: Int): List<QuadrantInfo> {
|
//
|
// }
|
}
|