Минимальный ограничивающий прямоугольник с JTS

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


person ABLX    schedule 15.12.2011    source источник


Ответы (3)


Посмотрите http://tsusiatsoftware.net/jts/javadoc/index.html.

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

geometry.getEnvelope();

or

geometry.getEnvelopeInternal();

Если вам нужен экземпляр Envelope

Он вернет вам минимальный прямоугольник GeometryCollection.

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

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

or

Envelope env = new Envelope();
for(Geometry g : mySet){
  env.expandToInclude(g.getBoundary().getEnvelopeInternal()):
}
person Agemen    schedule 15.12.2011
comment
getEnvelopeInternal() будет игнорировать точную модель вашей геометрии. - person Campa; 27.06.2019

Я просто собрал вот так.

Класс Geometry имеет метод getEnvelopeInternal(), который возвращает вписанный конверт, но метод getEnvelope() просто возвращает другую геометрию.

Глядя на javadoc, кажется, что возвращаемый объект Geometry:

  1. Пустая точка, соответствующая пустому объекту Geometry.
  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;
} 
person Dan Devine    schedule 23.01.2014

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

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

person red1ynx    schedule 15.12.2011
comment
хм, какой термин вы гуглили? не могли бы вы дать мне ссылку? - person ABLX; 15.12.2011
comment
В официальной документации: vividsolutions.com/jts/JTSHome.htm, классы Geometry и Envelope. . - person red1ynx; 15.12.2011
comment
Это не официальная документация. Vividsolution не поддерживает последнюю версию JTS. - person Agemen; 15.12.2011
comment
Помните, что getEnvelopeInternal() будет игнорировать точную модель вашей геометрии. - person Campa; 27.06.2019