Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方) | 您所在的位置:网站首页 › 51noy › Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方) |
Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方)
原创
霸道流氓 2023-05-06 00:52:07 博主文章分类:JavaSE ©著作权 文章标签 java 开发语言 Java 赋值 文章分类 Python 后端开发 ©著作权归作者所有:来自51CTO博客作者霸道流氓的原创作品,请联系作者获取转载授权,否则将追究法律责任 场景Java中使用java.awt.geom.Point2D进行坐标相关的计算(距离、平方等): Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等): 上面讲的进行精度要求底的数据进行空间计算时,可以使用Double进行赋值。 如果坐标数据精度比较高,比如到小数点后8位等,则需要使用BigDecimal进行赋值和计算。 实现使用BigDecimal进行指定精度计算距离,比如指定到小数点后5位。 /** * 使用BigDecimal 指定精确度计算距离 * @param p1x 第一个点的x * @param p2x 第二个点的x * @param p1y 第一个点的y * @param p2y 第二个点的y * @return */ public BigDecimal getDistanceByBigDecimal(double p1x, double p2x, double p1y, double p2y){ BigDecimal p1xB = new BigDecimal(p1x); BigDecimal p2xB = new BigDecimal(p2x); BigDecimal p1yB = new BigDecimal(p1y); BigDecimal p2yB = new BigDecimal(p2y); BigDecimal bigDecimal = (p1xB.subtract(p2xB)).multiply(p1xB.subtract(p2xB)).add((p1yB.subtract(p2yB)).multiply(p1yB.subtract(p2yB))); BigDecimal distance = sqrt(bigDecimal,5); return distance; }其中又用到开平方的方法 /** * BigDecimal 开平方 * @param value 要开平方的值 * @param scale 精确度 * @return */ public BigDecimal sqrt(BigDecimal value, int scale){ if(value.compareTo(new BigDecimal(0)) == 0){ return new BigDecimal(0); }else { BigDecimal num2 = BigDecimal.valueOf(2); int precision = 100; MathContext mc = new MathContext(precision, RoundingMode.HALF_UP); BigDecimal deviation = value; int cnt = 0; while (cnt < precision) { deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc); cnt++; } deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP); return deviation; } } 赞 收藏 评论 分享 举报上一篇:PostGIS中获取所有EPSG的编码以及对应Proj4字符串 下一篇:SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else |
CopyRight 2018-2019 实验室设备网 版权所有 |