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