| | |
| | | */ |
| | | |
| | | constructor( |
| | | historyData: List<BaseRealTimeData>, |
| | | exceptionData: List<BaseRealTimeData>, |
| | | config: RTExcWindLevelConfig, |
| | | windLevelCondition: RTExcWindLevelConfig.WindLevelCondition, |
| | | windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?, |
| | | ) : this() { |
| | | distanceType = windLevelCondition.distanceType |
| | | sourceTrace(exceptionData, config, windLevelCondition) |
| | | distanceType = windLevelCondition?.distanceType |
| | | distanceRange = distanceType?.disRange |
| | | distanceDes = distanceType?.des |
| | | windLevelCondition?.let { sourceTrace(historyData, exceptionData, config, it) } |
| | | } |
| | | |
| | | var address: String? = null |
| | | |
| | | // 污染范围区域(经纬度多边形) |
| | | // 污染范围扇形区域(经纬度多边形) |
| | | var polygon: List<Pair<Double, Double>>? = null |
| | | |
| | | // 近距离污染圆形区域 |
| | | var closePolygon: List<Pair<Double, Double>>? = null |
| | | |
| | | // 污染可能的发生距离 |
| | | var distanceType: DistanceType? = null |
| | | |
| | | var distanceRange: Pair<Double, Double>? = null |
| | | var distanceDes: String? = null |
| | | |
| | | /** |
| | | * 反向溯源 |
| | | */ |
| | | private fun sourceTrace( |
| | | historyData: List<BaseRealTimeData>, |
| | | exceptionData: List<BaseRealTimeData>, |
| | | config: RTExcWindLevelConfig, |
| | | windLevelCondition: RTExcWindLevelConfig.WindLevelCondition, |
| | |
| | | val pair = avgData.longitude!!.toDouble() to avgData.latitude!!.toDouble() |
| | | |
| | | polygon = calSector( |
| | | avgData.windSpeed!!.toDouble(), |
| | | avgData.windDirection!!.toDouble(), |
| | | pair, |
| | | windLevelCondition.distanceType.disRange, |
| | | config.sourceTraceDegOffset |
| | |
| | | MapUtil.wgs84ToGcj02(it) |
| | | } |
| | | |
| | | try { |
| | | val address = AMapService.reGeo(pair) |
| | | this.address = address.district + address.township + address.street |
| | | } catch (e: Exception) { |
| | | e.printStackTrace() |
| | | closePolygon = closeSourceTrace(historyData, pair).map { |
| | | // 将坐标转换为gcj02(火星坐标系),因为污染源场景信息都为此坐标系 |
| | | MapUtil.wgs84ToGcj02(it) |
| | | } |
| | | |
| | | if (config.isSearchAddress) { |
| | | try { |
| | | val address = AMapService.reGeo(MapUtil.wgs84ToGcj02(pair)) |
| | | this.address = address.district + address.township + address.street |
| | | // Thread.sleep(100) |
| | | } catch (e: Exception) { |
| | | e.printStackTrace() |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | val result = mutableListOf<Pair<Double, Double>>() |
| | | |
| | | if (distanceRange.first == .0) { |
| | | result.add(center) |
| | | // result.add(center) |
| | | var startDeg = 0 |
| | | while (startDeg <= 360) { |
| | | val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180) |
| | | result.add(p) |
| | | startDeg++ |
| | | } |
| | | } else { |
| | | // 从开始角度循环计算坐标点至结束角度,步长1° |
| | | var startDeg = sDeg |
| | |
| | | result.add(p) |
| | | startDeg++ |
| | | } |
| | | if (distanceRange.second > .0) { |
| | | // 此处需要从结束角度开始反向循环计算至开始角度,步长1°,使得两组坐标点按顺序排列,可绘制对应的多边形 |
| | | startDeg = eDeg |
| | | while (startDeg >= sDeg) { |
| | | val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180) |
| | | result.add(p) |
| | | startDeg-- |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (distanceRange.second > .0) { |
| | | // 此处需要从结束角度开始反向循环计算至开始角度,步长1°,使得两组坐标点按顺序排列,可绘制对应的多边形 |
| | | var startDeg = eDeg |
| | | while (startDeg >= sDeg) { |
| | | val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180) |
| | | result.add(p) |
| | | startDeg-- |
| | | } |
| | | return result |
| | | } |
| | | |
| | | private fun closeSourceTrace( |
| | | historyData: List<BaseRealTimeData>, |
| | | center: Pair<Double, Double>, |
| | | ): List<Pair<Double, Double>> { |
| | | val result = mutableListOf<Pair<Double, Double>>() |
| | | var startDeg = 0 |
| | | while (startDeg <= 360) { |
| | | val p = MapUtil.getPointByLen(center, DistanceType.TYPE1.disRange.second, startDeg * PI / 180) |
| | | result.add(p) |
| | | startDeg++ |
| | | } |
| | | |
| | | return result |