在JTS中通过union组合WKT几何

时间:2017-03-16 10:34:13

标签: java geometry jts

我正在尝试读取WKT多边形(数十万个)并将它们组合成更大的“包含”多边形以减少数据大小。为了简洁起见,我省略了我将使用的循环,因此这两个多边形应该作为一个例子。

我从未使用过JTS,所以我天真的做法就是:

static Geometry combineIntoOneGeometry()
{
       WKTReader wkt = new WKTReader();
       Geometry[] geometries;
       try
       {
              Geometry polygon1 = (Geometry) wkt.read("...");
              Geometry polygon2 = (Geometry) wkt.read("...");
              geometries = new Geometry[] {  }; //add them here ?
              geometries.add(polygon1, polygon2); //add doesn't exist, of course...
       }
       catch (ParseException e)
       {
              e.printStackTrace();
       }

       GeometryCollection gc = new GeometryFactory().createGeometryCollection(geometries); //can't instantiate GeometryFactory
       return gc.union();
}

有几个问题:

  1. 我无法实例化GeometryCollection
  2. GeometryCollection似乎没有接受/添加Geometries的方法 - 如何使用Geometries“填充”GeometryCollection?
  3. 无法添加几何数组,我也没有找到通过构造函数执行此操作的方法
  4. 我无法在几何上调用联合
  5. 除了问题:如果我想要联合的一些多边形是分离的,那会导致多边形吗?那很好,只是好奇。

    谢谢!

1 个答案:

答案 0 :(得分:1)

这对我有用:

static Geometry combineIntoOneGeometry()
{
    WKTReader wkt = new WKTReader();
    GeometryFactory geoFac = new GeometryFactory();
    ArrayList<Geometry> geometries = new ArrayList<>();

    try
    {
        Geometry polygon1 = wkt.read("POLYGON ((...))");
        Geometry polygon2 = wkt.read("POLYGON ((...))");
        Geometry polygon3 = wkt.read("POLYGON ((...))");
        Geometry polygon4 = wkt.read("POLYGON ((...))");
        geometries.add(polygon1);
        geometries.add(polygon2);
        geometries.add(polygon3);
        geometries.add(polygon4);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
    GeometryCollection geometryCollection = (GeometryCollection) geoFac.buildGeometry(geometries);

    return geometryCollection.union();
}