坐标距离计算、判断坐标是否在某一多边形内
2018-03-10 21:11:37
1077 次阅读
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);  
    }  
}相关话题
- 正则判断字符是否是中文汉字
 - javascript判断上传的文件是否为图片
 - Java根据时间计算是否为上午、中午、下午以及根据日期获得星期几
 - box-shadow多边阴影效果
 - FreeMarker判断空值
 - Elasticsearch score 评分计算
 - seaweedfs在windows上使用
 - seaweedfs在windows上部署参考
 - SeaweedFS在linux上配置使用
 - java计算汉字字符串的长度
 - Spring WebSocket在 Config 中访问 Cookie
 - Spring Boot配置@ConditionalOnProperty来控制Configuration是否生效
 - Redis统计今日签到用户数和用户是否签到
 - Java根据出生日期计算还有几天到生日
 - 喝好“一碗”,过好一年!毒鸡汤锦集三