2017-03-16 50 views
2

我正在嘗試閱讀WKT多邊形(數十萬個),並將它們組合爲更大的「包含」多邊形以減小數據大小。爲了簡潔起見,我省略了我將使用的循環,所以這兩個多邊形應該作爲示例。在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的不似乎有一個接受/添加幾何的方法 - 我怎樣用幾何「填充」GeometryCollection?
  3. 幾何圖形的數組不能被添加到了,我還沒有找到一種方法通過構造做
  4. 我不能把工會在幾何

除了問題:如果我想要結合的一些多邊形是不相交的,會導致多面體嗎?這很好,只是好奇。

謝謝!

回答

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