package com.panzhihua.common.utlis;
|
|
import com.panzhihua.common.model.vos.grid.LatLngVO;
|
|
import java.awt.geom.Point2D;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
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));
|
}
|
|
}
|