【问题标题】:How to get WKT area?如何获得 WKT 区域?
【发布时间】:2015-06-08 06:49:11
【问题描述】:

我使用 jts.jar,包是 com.vividsolutions.jts.geom,来获取几何图形的区域。但是方法 getArea() 并没有给我正确的结果。我的代码是

public static void main(String[] args) throws ParseException {
        GeometryFactory geometryFactory = new GeometryFactory();
        WKTReader reader = new WKTReader(geometryFactory);
        String s = "MULTIPOLYGON (((114.273193 40.480272, 114.274645 
        MultiPolygon mpolygon = null;
            mpolygon = (MultiPolygon) reader.read(s);
            System.out.println(mpolygon.getArea());
    }

【问题讨论】:

  • 你得到了什么结果,你期待什么?看起来你有经度纬度坐标,所以笛卡尔区域将以度²为单位,这是无稽之谈。如果您希望使用其他面积单位,则需要使用其他库。

标签: java jts wkt


【解决方案1】:

在寻找类似问题的答案时发现这个问题后,我想我会分享我的发现:

取自博客文章的描述,因为它解释了您要解决的问题:

GIS stackexchange 上经常出现的问题之一是“什么单位是 JTS计算的面积getArea()"。怎么看都无所谓 很多时候人们说这些都不是答案,因为它取决于 您的数据的投影。这个问题不会死,所以我煮熟了 一些代码应该对大多数多边形给出一个接近的答案。

与大多数这些问题一样,诀窍是转换您的多边形 到一个平坦的笛卡尔平面(这是 JTS 工作得最好的地方)。我们可以用 GeoTools 自动投影(假设多边形足够小) 然后只需调用.getArea() 方法。

解决方案:

public static void main(String[] args) throws Exception {
  GeometryFactory geometryFactory = new GeometryFactory();
  WKTReader reader = new WKTReader(geometryFactory);
  String s = "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))";
  MultiPolygon mpolygon = (MultiPolygon) reader.read(s);
  Point centroid = mpolygon.getCentroid();
  String autoCode = "AUTO:42001," + centroid.getX() + "," + centroid.getY();
  CoordinateReferenceSystem auto = CRS.decode(autoCode);
  MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, auto);
  MultiPolygon projed = (MultiPolygon) JTS.transform(mpolygon, transform);
  Measure<Double, Area> measure = Measure.valueOf(projed.getArea(), SI.SQUARE_METRE);
  System.out.println(measure);
}

输出:

8.146055550674082E12 m²

参考:https://blog.ianturton.com/geotools,/projections/2017/08/01/area-of-a-polygon.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多