2015-03-22 9 views
1

У меня есть двумерный массив двойников, которые неявно определяют значения на двумерной ограниченной целочисленной решетке. Отдельно у меня есть n 2D-точки семян (возможно, с нецелыми координатами). Я хотел бы идентифицировать каждую точку сетки с ее ближайшей начальной точкой, а затем суммировать значения точек сетки, идентифицированных с каждой начальной точкой.Как построить диаграмму Вороного по сетке точек?

Каков наиболее эффективный способ работы с JTS/Geotools? Я дошел до построения диаграммы Voronoi с VoronoiDiagramBuilder, но я не уверен, как эффективно назначать все точки сетки на основе этого.

ответ

1

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

Так если предположить, что п меньше, чем количество полигонов, я бы что-то вроде:

// features is the collection of Voronoi polygons 
// Points is the N points 
Expression propertyName = filterFactory.property(features.getSchema() 
    .getGeometryDescriptor() 
    .getName()); 
for (Point p: points) { 
    Filter filter = filterFactory.contains(propertyName, 
     filterFactory.literal(p)); 
    SimpleFeatureCollection sub = features.subCollection(filter); 
    //sub now contains your polygon 
    //do some processing or save ID 
} 

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