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

How to determine area based on shape bounded by latitude and longitude?

给定近似 "rectangle" 以度数表示的某些纬度和经度值,使用通用 Java Geometry/Topology 库(例如 JTS(https://github.com/locationtech/jts), 求 近似 的矩形面积 meters/feet 平方?

假设:

例子

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

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

这个 question on gis.stackexchange.com gives a longer general example of how to do this using the GeoTools 库。

由于您将问题限制在美国大陆,因此您的问题更简单,可以使用固定投影,例如美国国家地图集等面积 (EPSG:2163),因此方法如下:

  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);
  }

然后你可以用 where polygon is a JTS Polygon in lat/lon:

之类的东西来调用它
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));