integrated_traffic/src/main/java/com/zcloud/util/PLSUtil.java

570 lines
24 KiB
Java
Raw Normal View History

package com.zcloud.util;
import com.alibaba.fastjson.JSONObject;
import com.zcloud.entity.PageData;
import com.zcloud.service.corp.CorpPlsInfoService;
import com.zcloud.service.system.UsersService;
import okhttp3.*;
2024-01-25 14:20:05 +08:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
2024-01-25 14:42:22 +08:00
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
2024-01-25 14:20:05 +08:00
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
2024-01-25 14:42:22 +08:00
import org.springframework.web.client.RestTemplate;
2024-01-25 14:20:05 +08:00
import javax.annotation.PostConstruct;
import java.io.IOException;
2024-01-25 14:20:05 +08:00
import java.util.*;
2024-01-25 14:20:05 +08:00
@Component
public class PLSUtil {
2024-01-25 14:20:05 +08:00
private static final Logger logger = LoggerFactory.getLogger(PLSUtil.class);
private static CorpPlsInfoService corpplsinfoService;
private static UsersService usersService;
// 后台地址
public static HashMap<String, String> BAKEADDR = new HashMap<>();
2024-01-25 14:42:22 +08:00
private static RestTemplate restTemplate;
2024-01-29 10:18:20 +08:00
public static JSONObject getPersonnelPositioningCount(String CORPINFO_ID, Integer currentPage, Integer showCount) throws Exception {
2024-01-27 11:29:26 +08:00
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(
PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/deploy/card/list?sortThePowerLevel=1&pageNum=" +
currentPage +
"&pageSize=" + showCount,
HttpMethod.GET, httpEntity,
JSONObject.class);
return exchange.getBody();
}
@Autowired
public void setCorpplsinfoService(CorpPlsInfoService corpplsinfoServicebean, UsersService usersServicebean, RestTemplate restTemplatebean) {
2024-01-25 14:20:05 +08:00
corpplsinfoService = corpplsinfoServicebean;
usersService = usersServicebean;
2024-01-25 14:42:22 +08:00
restTemplate = restTemplatebean;
}
2024-01-27 11:29:26 +08:00
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject getAlarmTypeCount(String CORPINFO_ID) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(
PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/region/alarm/alarmStatistics?type=day",
HttpMethod.GET, httpEntity,
JSONObject.class);
return exchange.getBody();
}
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject saveCamera(String CORPINFO_ID, PageData camera) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
headers.setContentType(org.springframework.http.MediaType.valueOf("application/json"));
JSONObject uriVariables = new JSONObject();
2024-01-27 11:29:26 +08:00
uriVariables.put("camNo", camera.getString("CODE"));
uriVariables.put("camName", camera.getString("VIDEONAME"));
uriVariables.put("camIp", "127.0.0.1");
uriVariables.put("type", "0");
uriVariables.put("port", "");
uriVariables.put("camUserName", "1");
uriVariables.put("camPassword", "1");
uriVariables.put("lon", "");
uriVariables.put("lat", "");
uriVariables.put("alt", "");
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(uriVariables, headers);
// HttpEntity<JSONObject> httpEntity = new HttpEntity<>(uriVariables,headers);
// ResponseEntity<JSONObject> jsonObjectResponseEntity = restTemplate.postForEntity(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/device/camera",
// httpEntity, JSONObject.class);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/device/camera",
HttpMethod.POST,
httpEntity,
JSONObject.class);
return exchange.getBody();
}
2024-01-27 11:29:26 +08:00
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject editCamera(String CORPINFO_ID, PageData camera) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
headers.setContentType(org.springframework.http.MediaType.valueOf("application/json"));
JSONObject uriVariables = new JSONObject();
2024-01-27 11:29:26 +08:00
uriVariables.put("camNo", camera.getString("CODE"));
uriVariables.put("camName", camera.getString("VIDEONAME"));
uriVariables.put("camId", camera.getString("PLS_ID"));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(uriVariables, headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/device/camera",
HttpMethod.PUT, httpEntity,
2024-01-27 11:29:26 +08:00
JSONObject.class, uriVariables);
return exchange.getBody();
}
2024-01-27 11:29:26 +08:00
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject removeCamera(String CORPINFO_ID, PageData camera) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
2024-01-27 11:29:26 +08:00
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/device/camera/" + Integer.parseInt(camera.getString("PLS_ID")), HttpMethod.DELETE, httpEntity, JSONObject.class);
return exchange.getBody();
}
2024-01-25 14:42:22 +08:00
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject getRyRegionList(String CORPINFO_ID, String keywords, Integer currentPage, Integer showCount) throws Exception {
2024-01-25 14:42:22 +08:00
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
2024-01-25 14:42:22 +08:00
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/region/region/list?pageNum=" +
2024-01-25 14:42:22 +08:00
currentPage +
"&pageSize=" + showCount +
"&str=" + keywords + "&type=0", HttpMethod.GET, httpEntity, JSONObject.class);
return exchange.getBody();
2024-01-25 14:20:05 +08:00
}
2024-01-30 10:38:22 +08:00
/**
* @Description:
* @Param: [java.lang.String, java.lang.Integer] [CORPINFO_ID, id]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject getRyRegionInfo(String CORPINFO_ID, int id) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/region/region/" +
id, HttpMethod.GET, httpEntity, JSONObject.class);
return exchange.getBody();
}
/**
* @Description: 线
* @Date: 2024/1/25/025 14:37
* @Return: com.alibaba.fastjson.JSONObject
*/
public static JSONObject getRealTimeList(String CORPINFO_ID) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/api/prod-api/coordinate/realTime/data", HttpMethod.GET, httpEntity, JSONObject.class);
return exchange.getBody();
}
/**
* @Description:
* @Author: dearLin
* @Date: 2024/1/25/025 14:37
* @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount]
* @Return: com.alibaba.fastjson.JSONObject
*/
public static Boolean determineWhetherThePersonIsInTheElectronicFence(String CORPINFO_ID, Integer PLS_ID, String ELECTRONIC_FENCE_ID) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", getToken(CORPINFO_ID));
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(headers);
ResponseEntity<Boolean> exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(CORPINFO_ID) + "/region/api/electronicFence/determineWhetherThePersonIsInTheElectronicFence2?psn=" +
PLS_ID +
2024-01-30 15:36:15 +08:00
"&id=" + ELECTRONIC_FENCE_ID, HttpMethod.GET, httpEntity, Boolean.class);
return exchange.getBody();
}
2024-01-25 14:42:22 +08:00
2024-01-25 14:20:05 +08:00
@PostConstruct
private void initBakeAddr() throws Exception {
List<PageData> dataList = corpplsinfoService.listAll(new PageData());
dataList.forEach(item -> {
BAKEADDR.put(item.getString("CORPINFO_ID"), item.getString("POST_URL"));
});
}
/**
2024-01-25 14:20:05 +08:00
* @Description: token
* @Author: dearLin
* @Date: 2024/1/24/024 9:59
* @Param: [] []
* @Return: java.lang.String
*/
public static String getToken(String CORPINFO_ID) throws Exception {
2024-01-25 14:20:05 +08:00
PageData pd = new PageData();
pd.put("CORPINFO_ID", CORPINFO_ID);
pd = corpplsinfoService.findById(pd);
String token = pd.getString("TOKEN");
2024-01-25 14:20:05 +08:00
String backAddr = pd.getString("POST_URL");
String expireTime = pd.getString("EXPIRE_TIME");
String userName = pd.getString("ACCOUNT");
String passWord = pd.getString("PASSWORD");
String loginUrl = pd.getString("POST_URL") + "/auth/login";
if (token == null || expireTime == null || expireTime.trim().isEmpty() || DateUtil.compareDate(DateUtil.getTime(), expireTime)) {
JSONObject loginPayload = new JSONObject();
loginPayload.put("username", userName);
loginPayload.put("password", passWord);
loginPayload.put("isPresentationMode", "2");
2024-01-25 14:20:05 +08:00
PageData response = sendPostHttpRequest(loginUrl, loginPayload.toJSONString(), null);
if (response != null) {
PageData valueData = JSONObject.parseObject(response.getString("data"), PageData.class);
token = valueData.getString("access_token");
String newExpireTime = DateUtil.getAfterHourDate("12");
pd.put("TOKEN", token);
pd.put("EXPIRE_TIME", newExpireTime);
corpplsinfoService.edit(pd);
2024-01-25 14:20:05 +08:00
return token;
} else {
2024-01-25 14:20:05 +08:00
System.out.println("登录失败");
}
}
2024-01-25 14:20:05 +08:00
return token;
}
2024-01-11 18:02:48 +08:00
/**
2024-01-25 14:20:05 +08:00
* @Description:
* @Author: dearLin
* @Date: 2024/1/24/024 10:00
* @Param: [com.zcloud.entity.PageData] [user]
* @Return: void
*/
2024-01-25 14:20:05 +08:00
public static boolean hasCardNumber(PageData user) throws Exception {
// 根据 定位卡号获取对应的人
String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/card/peopleDisplay/" + user.getString("CARDNO");
PageData response = sendGetHttpRequest(url, null, getToken(Jurisdiction.getCORPINFO_ID()));
2024-01-25 14:20:05 +08:00
if (response != null) {
if (!"200".equals(response.getString("code"))) {
return false;
}
2024-01-25 14:20:05 +08:00
List<PageData> dataList = JSONObject.parseArray(response.getString("data"), PageData.class);
return dataList.isEmpty();
}
2024-01-25 14:20:05 +08:00
return false;
}
/**
2024-01-25 14:20:05 +08:00
* @Description:
* @Author: dearLin
* @Date: 2024/1/24/024 10:00
* @Param: [com.zcloud.entity.PageData] [user]
* @Return: void
*/
2024-01-25 14:20:05 +08:00
public static PageData getCardNumberPeople(PageData user) throws Exception {
// 根据 定位卡号获取对应的人
String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/card/peopleDisplay/" + user.getString("CARDNO");
PageData response = sendGetHttpRequest(url, null, getToken(Jurisdiction.getCORPINFO_ID()));
2024-01-25 14:20:05 +08:00
if (response != null) {
if (!"200".equals(response.getString("code"))) {
return null;
}
2024-01-25 14:20:05 +08:00
List<PageData> dataList = JSONObject.parseArray(response.getString("data"), PageData.class);
return dataList.size() > 0 ? dataList.get(0) : null;
}
2024-01-25 14:20:05 +08:00
return null;
}
/**
2024-01-25 14:20:05 +08:00
* @Description:
* @Author: dearLin
* @Date: 2024/1/24/024 10:00
* @Param: [com.zcloud.entity.PageData] [user]
* @Return: void
*/
public static PageData saveUser(PageData user) throws Exception {
2024-01-25 14:20:05 +08:00
String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt/insertPsnIfon";
JSONObject loginPayload = new JSONObject();
loginPayload.put("name", user.getString("NAME"));
loginPayload.put("cardNo", user.getString("CARDNO"));
loginPayload.put("empNo", "");
loginPayload.put("sex", "");
loginPayload.put("certType", "");
loginPayload.put("certNo", "");
loginPayload.put("office", "");
loginPayload.put("staffType", "");
loginPayload.put("phone", "");
loginPayload.put("empId", "");
loginPayload.put("age", "");
loginPayload.put("addr", "");
loginPayload.put("remark", "");
loginPayload.put("enterpriseName", "");
loginPayload.put("officeName", "");
loginPayload.put("jobsName", "");
loginPayload.put("deptName", "");
loginPayload.put("deptId", "");
loginPayload.put("avatar", "");
return sendPostHttpRequest(url, loginPayload.toJSONString(), getToken(Jurisdiction.getCORPINFO_ID()));
}
/**
2024-01-25 14:20:05 +08:00
* @Description:
* @Author: dearLin
* @Date: 2024/1/24/024 10:00
* @Param: [com.zcloud.entity.PageData] [user]
* @Return: void
*/
2024-01-25 14:20:05 +08:00
public static boolean editUser(PageData user) throws Exception {
// 这个人没有卡号与人id的话
if (!Tools.notEmpty(user.getString("PLS_ID"))) {
PageData response = saveUser(user);
if ("200".equals(response.getString("code"))) {
user.put("PLS_ID", response.getString("data"));
return true;
}
return false;
}
2024-01-25 14:20:05 +08:00
String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt/updPsnInfoById";
JSONObject loginPayload = new JSONObject();
loginPayload.put("name", user.getString("NAME"));
loginPayload.put("psnId", user.getString("PLS_ID"));
loginPayload.put("cardNo", user.getString("CARDNO"));
loginPayload.put("empNo", "");
loginPayload.put("sex", "");
loginPayload.put("certType", "");
loginPayload.put("certNo", "");
loginPayload.put("office", "");
loginPayload.put("staffType", "");
loginPayload.put("phone", "");
loginPayload.put("empId", "");
loginPayload.put("age", "");
loginPayload.put("addr", "");
loginPayload.put("remark", "");
loginPayload.put("enterpriseName", "");
loginPayload.put("officeName", "");
loginPayload.put("jobsName", "");
loginPayload.put("deptName", "");
loginPayload.put("deptId", "");
loginPayload.put("avatar", "");
PageData response = sendPostHttpRequest(url, loginPayload.toJSONString(), getToken(Jurisdiction.getCORPINFO_ID()));
2024-01-25 14:20:05 +08:00
return "200".equals(response.getString("code"));
}
2024-01-25 14:20:05 +08:00
public static boolean removeUser(PageData user) throws Exception {
String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt";
PageData removeUser = usersService.findById(user);
PageData response = sendDeleteHttpRequest(url, Long.parseLong(removeUser.getString("PLS_ID")), getToken(Jurisdiction.getCORPINFO_ID()));
2024-01-25 14:20:05 +08:00
return "200".equals(response.getString("code"));
}
/**
2024-01-25 14:20:05 +08:00
* get
*
* @param url
* @param queryParams
* @param token
* @return PageData
* @throws IOException
*/
2024-01-25 14:20:05 +08:00
private static PageData sendGetHttpRequest(String url, Map<String, String> queryParams, String token) throws IOException {
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder httpBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
//封装请求参数
if (queryParams != null) {
for (Map.Entry<String, String> param : queryParams.entrySet()) {
httpBuilder.addQueryParameter(param.getKey(), param.getValue());
}
}
2024-01-25 14:20:05 +08:00
//设置请求的url
Request.Builder requestBuilder = new Request.Builder()
.url(httpBuilder.build());
2024-01-25 14:20:05 +08:00
if (token != null && !token.isEmpty()) {
requestBuilder.addHeader("Authorization", "Bearer " + token);
}
2024-01-25 14:20:05 +08:00
Request request = requestBuilder.build();
Response execute = client.newCall(request).execute();
if (execute.code() != 200) {
logger.error("get请求失败返回状态码{},url:{}", execute.code(), url);
throw new RuntimeException("get请求失败");
}
2024-01-25 14:20:05 +08:00
return JSONObject.parseObject(execute.body().string(), PageData.class);
//发送请求并返回响应数据
}
/**
* post
2024-01-25 14:20:05 +08:00
*
* @param url
* @param jsonPayload
* @param token
* @return
* @throws IOException
*/
2024-01-25 14:20:05 +08:00
private static PageData sendPostHttpRequest(String url, String jsonPayload, String token) throws IOException {
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, jsonPayload);
Request.Builder builder = new Request.Builder() // 构建一个新的Request对象。
.url(url)// 设置请求的URL。
.post(body);// 设置请求的方法为POST并设置请求体。
//构建请求头
if (token != null && !token.isEmpty()) {// 检查token是否存在且不为空。
builder.addHeader("Authorization", "Bearer " + token);
}
// 构建请求
Request request = builder.build();
2024-01-25 14:20:05 +08:00
Response execute = client.newCall(request).execute();
if (execute.code() != 200) {
logger.error("post请求失败返回状态码{},url:{}", execute.code(), url);
throw new RuntimeException("get请求失败");
}
PageData pageData = JSONObject.parseObject(execute.body().string(), PageData.class);
if (!"200".equals(pageData.getString("code"))) {
logger.error("post请求失败返回值{},url:{}", pageData.getString("msg"), url);
}
return pageData;
//发起请求并响应数据
}
/**
* PUT
2024-01-25 14:20:05 +08:00
*
* @param url
* @param jsonPayload
* @param token
* @return
* @throws IOException
*/
2024-01-25 14:20:05 +08:00
private static Response sendPutHttpRequest(String url, String jsonPayload, String token) throws IOException {
2024-01-11 18:02:48 +08:00
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, jsonPayload);
Request.Builder builder = new Request.Builder()
.url(url)
.put(body);
2024-01-11 18:02:48 +08:00
if (token != null && !token.isEmpty()) {
builder.addHeader("Authorization", "Bearer " + token);
}
Request request = builder.build();
2024-01-11 18:02:48 +08:00
return client.newCall(request).execute();
}
/**
* delete
2024-01-25 14:20:05 +08:00
*
* @param url
* @param camIds
* @param token
* @return
* @throws IOException
*/
private static PageData sendDeleteHttpRequest(String url, Long camIds, String token) throws IOException {
OkHttpClient client = new OkHttpClient();
//将要删除的Id列表转换为逗号分隔的字符串
//构建完整的url
2024-01-25 14:20:05 +08:00
url = url + "/" + camIds;
Request.Builder builderBuilder = new Request.Builder()
.url(url)
.delete();
if (token != null && !token.isEmpty()) {
builderBuilder.addHeader("Authorization", "Bearer " + token);
}
Request request = builderBuilder.build();
2024-01-25 14:20:05 +08:00
Response execute = client.newCall(request).execute();
if (execute.code() != 200) {
logger.error("post请求失败返回状态码{},url:{}", execute.code(), url);
throw new RuntimeException("get请求失败");
}
PageData pageData = JSONObject.parseObject(execute.body().string(), PageData.class);
if (!"200".equals(pageData.getString("code"))) {
logger.error("post请求失败返回值{},url:{}", pageData.getString("msg"), url);
}
return pageData;
}
2024-01-31 10:22:34 +08:00
/**
*
*
* @param polygon [[lng,lat,alt],[lng,lat,alt],[lng,lat,alt],...]
* @return [lng,lat,alt]
* @throws IOException
*/
public static List<String> getRandomPointInPolygon(List<List<Double>> polygon) {
double minX = Double.POSITIVE_INFINITY;
double minY = Double.POSITIVE_INFINITY;
double maxX = Double.NEGATIVE_INFINITY;
double maxY = Double.NEGATIVE_INFINITY;
for (List<Double> point : polygon) {
minX = Math.min(minX, point.get(0));
minY = Math.min(minY, point.get(1));
maxX = Math.max(maxX, point.get(0));
maxY = Math.max(maxY, point.get(1));
}
Random rand = new Random();
while (true) {
Double x = minX + rand.nextDouble() * (maxX - minX);
Double y = minY + rand.nextDouble() * (maxY - minY);
if (pointInPolygon(polygon, x, y)) {
List<String> point = Arrays.asList(x.toString(),y.toString(),polygon.get(0).get(2).toString());
return point;
}
}
}
/**
*
* @param polygon
* @param lng
* @param lat
* @return
*/
private static boolean pointInPolygon(List<List<Double>> polygon,double lng, double lat) {
boolean inside = false;
int n = polygon.size();
for (int i = 0, j = n - 1; i < n; j = i++) {
if (((polygon.get(i).get(1) > lat) != (polygon.get(j).get(1) > lat)) &&
(lng < (polygon.get(j).get(0) - polygon.get(i).get(0)) * (lat - polygon.get(i).get(1)) / (polygon.get(j).get(1) - polygon.get(i).get(1)) + polygon.get(i).get(0))) {
inside = !inside;
}
}
return inside;
}
}