From 0359860dbc5de19f3d099ff549af0b4c48a08221 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Fri, 10 Dec 2021 14:31:27 +0800
Subject: [PATCH] 经纬度实体类,计算中心点工具类,修改热力图接口经纬度顺序
---
screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 45 ++++++++++-----
screen-api/src/main/java/com/moral/api/utils/GetCenterPointFromListOfCoordinates.java | 80 ++++++++++++++++++++++++++
screen-api/src/main/java/com/moral/api/entity/GeoCoordinate.java | 38 ++++++++++++
3 files changed, 148 insertions(+), 15 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/entity/GeoCoordinate.java b/screen-api/src/main/java/com/moral/api/entity/GeoCoordinate.java
new file mode 100644
index 0000000..876a068
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/GeoCoordinate.java
@@ -0,0 +1,38 @@
+package com.moral.api.entity;
+
+/**
+ * @program: screen
+ * @description: ������������������
+ * @author: lizijie
+ * @create: 2021-12-09 16:40
+ **/
+public class GeoCoordinate {
+
+ private double latitude;
+ private double longitude;
+
+ public GeoCoordinate() {
+ }
+
+ public GeoCoordinate(double latitude, double longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public double getLatitude() {
+ return latitude;
+ }
+
+ public void setLatitude(double latitude) {
+ this.latitude = latitude;
+ }
+
+ public double getLongitude() {
+ return longitude;
+ }
+
+ public void setLongitude(double longitude) {
+ this.longitude = longitude;
+ }
+}
+
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
index 48d1dcf..0b837c6 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -3,14 +3,12 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.config.mybatis.MybatisPlusConfig;
-import com.moral.api.entity.Device;
-import com.moral.api.entity.HistoryFiveMinutely;
-import com.moral.api.entity.HistoryHourly;
-import com.moral.api.entity.Organization;
+import com.moral.api.entity.*;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.mapper.HistoryHourlyMapper;
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.OrganizationService;
+import com.moral.api.utils.GetCenterPointFromListOfCoordinates;
import com.moral.constant.Constants;
import com.moral.constant.SeparateTableType;
import com.moral.pojo.AQI;
@@ -135,8 +133,8 @@
JSONObject value = JSONObject.parseObject(historyHourlyData.get("value").toString());
double num = Double.parseDouble(value.get(parameters.get("sensor_code")).toString());
int level = PollutantUtils.pollutantLevel(num, (parameters.get("sensor_code")).toString());
- list1.add(latitude);
list1.add(longitude);
+ list1.add(latitude);
list1.add(level);
list.add(list1);
}
@@ -145,24 +143,41 @@
double latitudeMax = Collections.max(latitudeList)+0.0018;
double longitudeMin = Collections.min(longitudeList)-0.2/(111*Math.cos(latitudeMin));
double longitudeMax = Collections.max(longitudeList)+0.2/(111*Math.cos(latitudeMin));
- List<Object> bound = new ArrayList<>();
- List<Object> left_up = new ArrayList<>();
+ List<Double> bound = new ArrayList<>();
+ bound.add(latitudeMax);
+ bound.add(longitudeMax);
+ bound.add(latitudeMin);
+ bound.add(longitudeMin);
+ resultMap.put("bound",bound);
+ List<List> bound1 = new ArrayList<>();
+ List<Double> left_up = new ArrayList<>();
left_up.add(latitudeMax);
left_up.add(longitudeMin);
- List<Object> right_up = new ArrayList<>();
+ List<Double> right_up = new ArrayList<>();
right_up.add(latitudeMax);
right_up.add(longitudeMax);
- List<Object> left_down = new ArrayList<>();
+ List<Double> left_down = new ArrayList<>();
left_down.add(latitudeMin);
left_down.add(longitudeMin);
- List<Object> right_down = new ArrayList<>();
+ List<Double> right_down = new ArrayList<>();
right_down.add(latitudeMin);
right_down.add(longitudeMax);
- bound.add(left_up);
- bound.add(right_up);
- bound.add(right_down);
- bound.add(left_down);
- resultMap.put("bound",bound);
+ bound1.add(left_up);
+ bound1.add(right_up);
+ bound1.add(right_down);
+ bound1.add(left_down);
+ List<GeoCoordinate> geoCoordinates = new ArrayList<>();
+ for (List bo:bound1) {
+ GeoCoordinate g = new GeoCoordinate();
+ g.setLatitude(Double.parseDouble(bo.get(0).toString()));
+ g.setLongitude(Double.parseDouble(bo.get(1).toString()));
+ geoCoordinates.add(g);
+ }
+ GeoCoordinate centerPoint400 = GetCenterPointFromListOfCoordinates.getCenterPoint400(geoCoordinates);
+ List centerPoint = new ArrayList();
+ centerPoint.add(centerPoint400.getLongitude());
+ centerPoint.add(centerPoint400.getLatitude());
+ resultMap.put("centerPoint",centerPoint);
return resultMap;
}
diff --git a/screen-api/src/main/java/com/moral/api/utils/GetCenterPointFromListOfCoordinates.java b/screen-api/src/main/java/com/moral/api/utils/GetCenterPointFromListOfCoordinates.java
new file mode 100644
index 0000000..0d845cc
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/GetCenterPointFromListOfCoordinates.java
@@ -0,0 +1,80 @@
+package com.moral.api.utils;
+
+import com.moral.api.entity.GeoCoordinate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @program: screen
+ * @description: ������������������������������
+ * @author: lizijie
+ * @create: 2021-12-09 16:37
+ **/
+public class GetCenterPointFromListOfCoordinates {
+
+ /**
+ * ������������������������������������������
+ * @param geoCoordinateList
+ * @return
+ */
+ public static GeoCoordinate getCenterPoint(List<GeoCoordinate> geoCoordinateList) {
+ int total = geoCoordinateList.size();
+ double X = 0, Y = 0, Z = 0;
+ for (GeoCoordinate g : geoCoordinateList) {
+ double lat, lon, x, y, z;
+ lat = g.getLatitude() * Math.PI / 180;
+ lon = g.getLongitude() * Math.PI / 180;
+ x = Math.cos(lat) * Math.cos(lon);
+ y = Math.cos(lat) * Math.sin(lon);
+ z = Math.sin(lat);
+ X += x;
+ Y += y;
+ Z += z;
+ }
+
+ X = X / total;
+ Y = Y / total;
+ Z = Z / total;
+ double Lon = Math.atan2(Y, X);
+ double Hyp = Math.sqrt(X * X + Y * Y);
+ double Lat = Math.atan2(Z, Hyp);
+ return new GeoCoordinate(Lat * 180 / Math.PI, Lon * 180 / Math.PI);
+ }
+
+ /**
+ * ������������������������������������������������������400km������������������
+ * @param geoCoordinateList
+ * @return
+ */
+ public static GeoCoordinate getCenterPoint400(List<GeoCoordinate> geoCoordinateList) {
+ // ������������������������400km���������
+ int total = geoCoordinateList.size();
+ double lat = 0, lon = 0;
+ for (GeoCoordinate g : geoCoordinateList) {
+ lat += g.getLatitude() * Math.PI / 180;
+ lon += g.getLongitude() * Math.PI / 180;
+ }
+ lat /= total;
+ lon /= total;
+ return new GeoCoordinate(lat * 180 / Math.PI, lon * 180 / Math.PI);
+ }
+
+ public static void main(String[] args) {
+ List geoCoordinateList = new ArrayList();
+ GeoCoordinate g = new GeoCoordinate();
+ g.setLongitude(112.977324);
+ g.setLatitude(28.178376);
+ GeoCoordinate g2 = new GeoCoordinate();
+ g2.setLongitude(112.975782);
+ g2.setLatitude(28.172258);
+ geoCoordinateList.add(g);
+ geoCoordinateList.add(g2);
+
+ GeoCoordinate re = GetCenterPointFromListOfCoordinates.getCenterPoint(geoCoordinateList);
+ System.out.println(re.getLongitude() +" "+ re.getLatitude());
+ }
+
+
+}
+
--
Gitblit v1.8.0