Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方) 您所在的位置:网站首页 51noy Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方)

Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方)

2023-05-09 07:09| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有