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 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 bound, double pointlng, double pointLat) { Point2D.Double point = new Point2D.Double(pointlng, pointLat); List 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 getLatLngFromText(String lngLatTxt) { List 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 latLngList = getLatLngFromText(latLngTxt); System.out.println(isInPolygon(latLngList, 104.063398, 30.657929)); } }