package com.panzhihua.common.utlis;
|
|
import java.awt.geom.Point2D;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import com.panzhihua.common.model.vos.grid.LatLngVO;
|
|
public class LngLatUtils {
|
|
public static boolean check(Point2D.Double _point, List<Point2D.Double> polygon) {
|
java.awt.geom.GeneralPath peneralPath = new java.awt.geom.GeneralPath();
|
|
Point2D.Double first = polygon.get(0);
|
peneralPath.moveTo(first.x, first.y);
|
polygon.remove(0);
|
|
for (Point2D.Double d : polygon) {
|
peneralPath.lineTo(d.x, d.y);
|
}
|
|
peneralPath.lineTo(first.x, first.y);
|
peneralPath.closePath();
|
|
return peneralPath.contains(_point);
|
}
|
|
/**
|
*
|
* @param bound
|
* 经纬度数组
|
* @param pointlng
|
* 短
|
* @param pointLat
|
* 长
|
* @return
|
*/
|
public static boolean isInPolygon(List<LatLngVO> bound, double pointlng, double pointLat) {
|
Point2D.Double point = new Point2D.Double(pointlng, pointLat);
|
List<Point2D.Double> pointList = new ArrayList<>();
|
for (int i = 0; i < bound.size(); i++) {
|
pointList.add(new Point2D.Double(bound.get(i).getLng(), bound.get(i).getLat()));
|
}
|
return check(point, pointList);
|
}
|
|
/**
|
* 从txt数据中获取经纬度
|
*
|
* @param lngLatTxt
|
* @return
|
*/
|
public static List<LatLngVO> getLatLngFromText(String lngLatTxt) {
|
List<LatLngVO> rtResult = new ArrayList<>();
|
String str = lngLatTxt.replace("[[", "");
|
|
str = str.replace("]]", "");
|
String[] loca = str.split("],\\[");
|
for (int i = 0; i < loca.length; i++) {
|
String[] loca1 = loca[i].split(",");
|
rtResult.add(new LatLngVO(Double.valueOf(loca1[0]), Double.valueOf(loca1[1])));
|
}
|
return rtResult;
|
}
|
|
public static void main(String[] args) {
|
String latLngTxt =
|
"[[104.066974,30.660293],[104.053394,30.658114],[104.059921,30.657076],[104.065231,30.657086]]";
|
List<LatLngVO> latLngList = getLatLngFromText(latLngTxt);
|
|
System.out.println(isInPolygon(latLngList, 104.063398, 30.657929));
|
}
|
|
}
|