坐标距离计算、判断坐标是否在某一多边形内

2018-03-10 21:11:37
865次阅读
0个评论
/**** 
 * 根据经纬度 获取数据 工具类 
 * @author xuli 
 * 
 */  
public class LngLatDistanceUtils {  
    private static final Logger log = LoggerFactory.getLogger(LngLatDistanceUtils.class);  
      
    /*** 
     * 经纬度计算距离 
     * @author xuli 
     *  
     * @param lat1  纬度1 
     * @param lng1  经度1  
     * @param lat2  纬度2  
     * @param lng2  经度2 
     */  
    public static Float getDistance(Double lat1, Double lng1, Double lat2, Double lng2){  
        double EARTH_RADIUS = 6378.137;// 地球半径  
  
        double radLat1 = rad(lat1);  
        double radLat2 = rad(lat2);  
        double a = radLat1 - radLat2;  
        double b = rad(lng1) - rad(lng2);  
  
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)  
                + Math.cos(radLat1) * Math.cos(radLat2)  
                * Math.pow(Math.sin(b / 2), 2)));  
        s = s * EARTH_RADIUS;  
        Float ss = (float) (Math.round(s * 1000))/1000;  
  
        return ss;  
    }  
      
    private static double rad(Double d){  
        return d * Math.PI / 180.0;  
    }  
      
  
      
      
    /**** 
     * 判断点是否在多边形内(不包含边界) 
     *  
     * @author wanwenjun 
     * @param point 点 
     * @param polygon 多边形 
     * @return 
     */  
    public static boolean checkWithJdkGeneralPath(Point2D.Double point, List<Point2D.Double> polygon) {  
        java.awt.geom.GeneralPath p = new java.awt.geom.GeneralPath();  
          
        // 初始化起点坐标  
        Point2D.Double first = polygon.get(0);  
        p.moveTo(first.x, first.y);  
        for (Point2D.Double d : polygon) {  
              
            // 遍历点,并按遍历的顺序画线  
            p.lineTo(d.x, d.y);  
        }  
        p.lineTo(first.x, first.y);  
          
        p.closePath();  
        return p.contains(point);  
    }  
}
收藏00

登录 后评论。没有帐号? 注册 一个。