Минимальный ограничивающий прямоугольник с JTS - PullRequest
6 голосов
/ 15 декабря 2011

У меня есть коллекция геометрических объектов. Теперь я хочу вычислить минимальный ограничивающий прямоугольник из всей коллекции. Я использую пакет топологии Java, но я не могу понять, как это сделать?

Ответы [ 3 ]

6 голосов
/ 15 декабря 2011

Загляните в http://tsusiatsoftware.net/jts/javadoc/index.html

Если я предполагаю, что вы используете экземпляр GeometryCollection. Если это правда, вы можете напрямую позвонить

geometry.getEnvelope();

или

geometry.getEnvelopeInternal();

Если вы хотите экземпляр Envelope

Он вернет вам минимальный прямоугольник коллекции 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()):
}
1 голос
/ 23 января 2014

Я просто соединил один таким образом.

В классе Geometry есть метод 'getEnvelopeInternal ()', который возвращает вписанный конверт, но метод 'getEnvelope ()' просто возвращает другую геометрию.* Глядя на javadoc, кажется, что возвращаемый объект Geometry имеет вид:

  1. Пустая точка, соответствующая пустому объекту Geometry.
  2. Одна точка, соответствующая переданной точке.
  3. Полигон с четырьмя координатами, который определяет огибающую.

Глядя на другие заметки на конверте, я вижу, что вы можете «развернуть» конверт .... так вотСтатическая утилита, которую я создал для преобразования:

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;
} 
1 голос
/ 15 декабря 2011

Я никогда не использовал jts, но погуглил это:

Итерация по коллекции и для каждого вызова объекта getBoundary().getEnvelopeInternal()

...