发布于2022-01-06 08:15 阅读(1006) 评论(0) 点赞(13) 收藏(0)
同一坐标系下 地图任意两点间 基于经纬度计算距离 java代码实现
public class MapUtil { public static final double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math.PI / 180.0; } /** * 两点间的距离 * @param loc1 * @param loc2 * @return 返回距离值 精确到米 */ public static double distance(LngLat loc1, LngLat loc2) { double radLat1 = rad(loc1.getLatitude().doubleValue()); double radLat2 = rad(loc2.getLatitude().doubleValue()); double a = radLat1 - radLat2; double b = rad(loc1.getLongitude().doubleValue()) - rad(loc2.getLongitude().doubleValue()); 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))); return Math.round(s * EARTH_RADIUS * 10000d) / 10d; } }
public class LngLat { private BigDecimal longitude; private BigDecimal latitude; public static LngLat from(Number lng, Number lat) { return lng instanceof BigDecimal && lat instanceof BigDecimal ? new LngLat((BigDecimal) lng, (BigDecimal) lat) : new LngLat(BigDecimal.valueOf(lng.doubleValue()), BigDecimal.valueOf(lat.doubleValue())); } public String toString() { return this.toString(6, 4); } public String toString(int scale, int mode) { return this.longitude.setScale(scale, mode).toString() + "," + this.latitude.setScale(scale, mode).toString(); } public BigDecimal getLongitude() { return this.longitude; } public BigDecimal getLatitude() { return this.latitude; } public LngLat(BigDecimal longitude, BigDecimal latitude) { this.longitude = longitude; this.latitude = latitude; } }
作者:天使的翅膀
链接:http://www.javaheidong.com/blog/article/372892/afba5d7067f0f23eaaa8/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!