引入geographiclib类来计算距离,周长和面积的方法
  d82zgcjyMEXY 2023年12月22日 75 0


步骤一、引入geographiclib包

<dependency>
		<groupId>net.sf.geographiclib</groupId>
		<artifactId>GeographicLib-Java</artifactId>
		<version>2.0</version>
	</dependency>

步骤二、分别计算距离,周长和面积

package com.opengis.tools.util;
import net.sf.geographiclib.Geodesic;
import net.sf.geographiclib.GeodesicData;
import net.sf.geographiclib.PolygonArea;
import net.sf.geographiclib.PolygonResult;

public class ComputePolygonArea {

    private static Geodesic geod = Geodesic.WGS84; //定义坐标系
    private static PolygonResult polygonResult;

    /**
     * 构建polygonResult对象
     * @param polygon_wkt
     */
    private static void getPolygonResult (String polygon_wkt){
        PolygonArea polygonarea = new PolygonArea(geod,false);
        for (String i: polygon_wkt.split(",")){
            String[] point = i.split(" ");
            Double lat = Double.valueOf(point[1]).doubleValue();
            Double lon = Double.valueOf(point[0]).doubleValue();
            polygonarea.AddPoint(lat, lon);
        };
        PolygonResult res = polygonarea.Compute();
        polygonResult = res;
        polygonarea.Clear();
    };

    /**
     * 计算长度,单位米
     * @param srcLat 起点纬度
     * @param srcLon 起点经度
     * @param descLat 终点纬度
     * @param descLon 终点经度
     * @return
     */
    private static double getDistance(double srcLat, double srcLon, double descLat, double descLon) {
        double result = 0.0f;
        try {
            GeodesicData g = geod.Inverse(srcLat, srcLon, descLat, descLon);
            result = g.s12;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

    }

    /**
     *计算周长,单位米
     * @param polygon_wkt
     * @return
     */
    private static double getPerimeter (String polygon_wkt){
        getPolygonResult(polygon_wkt);
        double perimeter = polygonResult.perimeter;
        return perimeter;
    }

    /**
     *计算面积,单位平方公里
     * @param polygon_wkt
     * @return
     */
    private static double getArea (String polygon_wkt){
        getPolygonResult(polygon_wkt);
        double area = Math.abs(polygonResult.area);
        return area;
    }

    public static void main(String[] args){
        String polygon_wkt = new String("106.484265 29.931534,106.484909 29.932492,106.487054 29.931367,106.486293 29.930446,106.484265 29.931534");
        Double per = getPerimeter(polygon_wkt);
        System.out.println("周长: "+per);
        Double aa = getArea(polygon_wkt);
        System.out.println("面积: "+aa);
        System.out.println("两点之间距离: "+getDistance(29.931534,106.484265,29.931367,106.487054));
    }
}

输出结果:
周长: 720.5701485233899
面积: 29300.28374773264
两点之间距离: 269.92055435200126


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   108   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
d82zgcjyMEXY