9

我有一组几何对象。现在我想从整个集合中计算最小边界矩形。我正在使用 java 拓扑套件,但我不知道该怎么做?

4

3 回答 3

9

看看http://tsusiatsoftware.net/jts/javadoc/index.html

如果我假设您使用的是 GeometryCollection 实例。如果是真的可以直接调用

geometry.getEnvelope();

或者

geometry.getEnvelopeInternal();

如果你想要一个信封实例

它将返回 GeometryCollection 的最小矩形。

如果您有几何集合,则可以直接使用信封,并在每次处理集合的新几何时扩展它。

Envelope env = new Envelope();
for(Geometry g : mySet){
  env.expandToInclude(g.getEnvelopeInternal()):
}

或者

Envelope env = new Envelope();
for(Geometry g : mySet){
  env.expandToInclude(g.getBoundary().getEnvelopeInternal()):
}
于 2011-12-15T13:25:08.167 回答
2

我就是这样拼起来的。

Geometry 类有一个“getEnvelopeInternal()”,它返回内切信封,但“getEnvelope()”只返回另一个几何。

查看 javadoc,返回的 Geometry 对象似乎是:

  1. 与空几何对象匹配的空点。
  2. 一个点,匹配传入的点。
  3. 具有 4 个坐标的多边形,用于指定封闭的信封。

查看信封上的其他注释,我发现您可以“扩展”信封....所以这是我为转换而构建的静态工具:

public static Envelope enclosingEnvelopFromGeometry(Geometry geometry) {
    final Envelope envelope = new Envelope();
    final Geometry enclosingGeometry = geometry.getEnvelope();
    final Coordinate[] enclosingCoordinates = enclosingGeometry.getCoordinates();
    for (Coordinate c : enclosingCoordinates) {
        envelope.expandToInclude(c);
    }
    return envelope;
} 
于 2014-01-23T16:56:17.080 回答
1

我从来没有使用过 jts,但是用谷歌搜索了这个:

遍历集合并为每个对象调用getBoundary().getEnvelopeInternal()

于 2011-12-15T13:22:30.387 回答