Java 如何根据以纬度和经度为边界的形状确定面积?

Java 如何根据以纬度和经度为边界的形状确定面积?,java,geolocation,geometry,gis,topology,Java,Geolocation,Geometry,Gis,Topology,给定一个以度表示的纬度和经度的特定值为边界的近似矩形,使用通用Java几何/拓扑库(如JTS)查找以米/英尺平方表示的矩形近似面积的最佳方法是什么 假设: 矩形区域的上限约为300-500公里^2 假设误差公差为+/-500-1500米^2 当前必须在Java11上使用Java 任何通用的Java Geo/GIS/Topology库都是可以接受的 假设坐标将限制在美国大陆范围内 范例 下面是一个示例形状,它是一个近似矩形,覆盖公园所占区域: 您需要使用一个可以处理从球面度到局部平面参考系的重投影

给定一个以度表示的纬度和经度的特定值为边界的近似矩形,使用通用Java几何/拓扑库(如JTS)查找以米/英尺平方表示的矩形近似面积的最佳方法是什么

假设:

矩形区域的上限约为300-500公里^2 假设误差公差为+/-500-1500米^2 当前必须在Java11上使用Java 任何通用的Java Geo/GIS/Topology库都是可以接受的 假设坐标将限制在美国大陆范围内 范例

下面是一个示例形状,它是一个近似矩形,覆盖公园所占区域:

您需要使用一个可以处理从球面度到局部平面参考系的重投影的库,以便您可以使用JTS进行计算

本章提供了一个较长的通用示例,说明如何使用库执行此操作

由于您将问题限制在美国大陆,因此您的问题更容易解决,可以使用固定投影,如美国国家地图集等面积,因此方法如下:

  private Measure<Double, Area> calcArea(Polygon p) {
    try {
      String code = "EPSG:2163";
      CoordinateReferenceSystem auto = CRS.decode(code);

      MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, auto);

      Polygon projed = (Polygon) JTS.transform(p, transform);
      return Measure.valueOf(projed.getArea(), SI.SQUARE_METRE);
    } catch (MismatchedDimensionException | TransformException | FactoryException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return Measure.valueOf(0.0, SI.SQUARE_METRE);
  }
然后,您可以使用类似于其中多边形是lat/lon中的JTS多边形的方式来调用它:

Unit<Area> sq_mile = USCustomary.MILE.multiply(USCustomary.MILE).asType(Area.class);
Unit<Area> sq_km = MetricPrefix.KILO(SI.METRE).multiply(MetricPrefix.KILO(SI.METRE)).asType(Area.class);

javax.measure.Quantity<Area> a = me.calcArea(polygon);
System.out.println(a);
System.out.println(a.to(sq_km));
System.out.println(a.to(sq_mile));

也许可以使用开放式gis和形状插件?你需要的是从度到米/英尺的转换吗?因为只要找到有坐标单位的区域就相当直接了,对吧?are=长度坐标之差*宽度坐标之差?存在多种复杂情况。例如,对于一个球体,每度的米数在不同的纬度变化。正如您所指出的,在平面上查找矩形的面积很简单。