Собрать JTS Polygon прямо из массива пар?

Есть ли эффективный способ собрать JTS Polygon непосредственно из массива пар?

В настоящее время я

  1. Цикл массива точек для создания массива Coordinate экземпляры
  2. Создание CoordinateSequence из массива Coordinates
  3. Создание LinearRing от CoordinateSequence
  4. Создание Polygon от LinearRing

Согласно моему профилированию, самый медленный шаг - создание множества Coordinate экземпляры в цикле.

Я должен упомянуть, что я вызываю библиотеку JTS из Matlab, поэтому в моем цикле могут возникнуть дополнительные расходы по сравнению с реализацией на чистом Java.

Вот код MATLAB:

% assemble linear ring for exterior poly
[numExtPoints, ~] = size(exteriorCoords);
jExtCoords(numExtPoints) = jts.geom.Coordinate(); % pre-allocate
for ic = 1:numExtPoints
    jExtCoords(ic) = jts.geom.Coordinate(exteriorCoords(ic,1), exteriorCoords(ic,2));
end

jCoordinateSequence = jts.geom.impl.CoordinateArraySequence(jExtCoords);
jExtLinearRing = jts.geom.LinearRing(jCoordinateSequence, jts.geom.GeometryFactory());

% build polygon 
obj.jGeometry = jts.geom.Polygon(jExtLinearRing, [], jts.geom.GeometryFactory());

1 ответ

Вы можете использовать этот конструктор:

public Polygon polygon(double... ord)

от

org.geotools.geometry.jts.GeometryBuilder ( Документация)

Пример:

Polygon p = new GeometryBuilder().polygon(new double[]{0,0,10,0,10,10});
Другие вопросы по тегам