我有一组几何对象。现在我想从整个集合中计算最小边界矩形。我正在使用 java 拓扑套件,但我不知道该怎么做?
问问题
8843 次
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 对象似乎是:
- 与空几何对象匹配的空点。
- 一个点,匹配传入的点。
- 具有 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 回答