use of org.openforis.collect.metamodel.samplingdesign.SamplingPointLevelGenerationSettings in project collect by openforis.
the class SamplingPointDataGeneratorTest method griddedPlotsGenerationTest.
@Test
public void griddedPlotsGenerationTest() {
Coordinate topLeftCoordinate = new Coordinate(12.369192d, 41.987927d, LAT_LON_SRS_ID);
Coordinate topRightCoordinate = new Coordinate(12.621191d, 41.987927d, LAT_LON_SRS_ID);
Coordinate bottomLeftCoordinate = new Coordinate(12.369192d, 41.802904d, LAT_LON_SRS_ID);
Coordinate bottomRightCoordinate = new Coordinate(12.621191d, 41.802904d, LAT_LON_SRS_ID);
int numPlots = 25;
int samplesPerPlot = 10;
int plotWidth = 1000;
SamplingPointLevelGenerationSettings plotPointsConfig = new SamplingPointLevelGenerationSettings(numPlots, Shape.CIRCLE, Distribution.GRIDDED, 5000, plotWidth);
SamplingPointLevelGenerationSettings samplePointsConfig = new SamplingPointLevelGenerationSettings(samplesPerPlot, Shape.CIRCLE, Distribution.RANDOM, 20, 10);
CollectSurvey survey = createTestSurvey();
SamplingPointGenerationSettings conf = new SamplingPointGenerationSettings();
conf.setAoiBoundary(Arrays.asList(topLeftCoordinate, topRightCoordinate, bottomLeftCoordinate, bottomRightCoordinate));
conf.setLevelsSettings(Arrays.asList(plotPointsConfig, samplePointsConfig));
SamplingPointDataGenerator generator = new SamplingPointDataGenerator(coordinateOperations, survey, null, conf);
List<SamplingDesignItem> items = generator.generate();
// printLatLonPoints(items);
assertTrue(items.size() <= numPlots + numPlots * samplesPerPlot);
List<SamplingDesignItem> plotItems = getSamplingItemsInLevel(items, 1);
assertTrue(plotItems.size() <= numPlots);
for (SamplingDesignItem plotItem : plotItems) {
assertPointInSquare(plotItem, topLeftCoordinate, bottomRightCoordinate);
}
}
use of org.openforis.collect.metamodel.samplingdesign.SamplingPointLevelGenerationSettings in project collect by openforis.
the class SamplingPointDataGeneratorTest method randomSamplingPointsGenerationTest.
@Test
public void randomSamplingPointsGenerationTest() {
Coordinate topLeftCoordinate = new Coordinate(12.369192d, 41.987927d, LAT_LON_SRS_ID);
Coordinate topRightCoordinate = new Coordinate(12.621191d, 41.987927d, LAT_LON_SRS_ID);
Coordinate bottomLeftCoordinate = new Coordinate(12.369192d, 41.802904d, LAT_LON_SRS_ID);
Coordinate bottomRightCoordinate = new Coordinate(12.621191d, 41.802904d, LAT_LON_SRS_ID);
int numPlots = 25;
int samplesPerPlot = 10;
int plotWidth = 1000;
SamplingPointLevelGenerationSettings plotPointsConfig = new SamplingPointLevelGenerationSettings(numPlots, Shape.CIRCLE, Distribution.GRIDDED, 5000, plotWidth);
SamplingPointLevelGenerationSettings samplePointsConfig = new SamplingPointLevelGenerationSettings(samplesPerPlot, Shape.CIRCLE, Distribution.RANDOM, 20, 10);
CollectSurvey survey = createTestSurvey();
SamplingPointGenerationSettings conf = new SamplingPointGenerationSettings();
conf.setAoiBoundary(Arrays.asList(topLeftCoordinate, topRightCoordinate, bottomLeftCoordinate, bottomRightCoordinate));
conf.setLevelsSettings(Arrays.asList(plotPointsConfig, samplePointsConfig));
SamplingPointDataGenerator generator = new SamplingPointDataGenerator(coordinateOperations, survey, null, conf);
List<SamplingDesignItem> items = generator.generate();
List<SamplingDesignItem> plotItems = getSamplingItemsInLevel(items, 1);
List<SamplingDesignItem> samplingPointItems = getSamplingItemsInLevel(items, 2);
assertEquals(plotItems.size() * samplesPerPlot, samplingPointItems.size());
for (final SamplingDesignItem samplingPointItem : samplingPointItems) {
SamplingDesignItem plotItem = (SamplingDesignItem) CollectionUtils.find(items, new Predicate() {
public boolean evaluate(Object object) {
return Arrays.asList(samplingPointItem.getLevelCode(1)).equals(((SamplingDesignItem) object).getLevelCodes());
}
});
assertNotNull(plotItem);
assertPointInCircle(samplingPointItem, new Coordinate(plotItem.getX(), plotItem.getY(), LAT_LON_SRS_ID), plotWidth / 2);
}
}
use of org.openforis.collect.metamodel.samplingdesign.SamplingPointLevelGenerationSettings in project collect by openforis.
the class SamplingPointDataGenerator method calculateAoiWidth.
private double calculateAoiWidth(int levelIdx) {
switch(levelIdx) {
case 0:
List<Coordinate> aoiBoundary = configuration.getAoiBoundary();
List<Coordinate> reprojectedAoiBoundary = reprojectToWebMercator(aoiBoundary);
double[] longitudes = new double[reprojectedAoiBoundary.size()];
for (int i = 0; i < reprojectedAoiBoundary.size(); i++) {
Coordinate c = reprojectedAoiBoundary.get(i);
longitudes[i] = c.getX();
}
double minBoundaryLongitude = NumberUtils.min(longitudes);
double maxBoundaryLongitude = NumberUtils.max(longitudes);
return maxBoundaryLongitude - minBoundaryLongitude;
default:
SamplingPointLevelGenerationSettings previousLevelConfiguration = configuration.getLevelsSettings().get(levelIdx - 1);
return previousLevelConfiguration.getPointWidth();
}
}
use of org.openforis.collect.metamodel.samplingdesign.SamplingPointLevelGenerationSettings in project collect by openforis.
the class SamplingPointDataGenerator method generateLocations.
private List<Coordinate> generateLocations(Coordinate latLonCenter, int levelIdx) {
SamplingPointLevelGenerationSettings pointsConfiguration = configuration.getLevelsSettings().get(levelIdx);
Coordinate webMercatorAoiCenter = reprojectFromLatLonToWebMercator(latLonCenter);
switch(pointsConfiguration.getShape()) {
case CIRCLE:
double areaWidth = calculateAoiWidth(levelIdx);
return generateLocationsInCircle(webMercatorAoiCenter, areaWidth / 2, pointsConfiguration);
case SQUARE:
SamplingPointLevelGenerationSettings nextLevelPointsConfiguration = levelIdx == configuration.getLevelsSettings().size() - 1 ? null : configuration.getLevelsSettings().get(levelIdx + 1);
Double pointWidth = nextLevelPointsConfiguration == null ? DEFAULT_POINT_SIZE : nextLevelPointsConfiguration.getPointWidth();
List<Coordinate> boundary = levelIdx == 0 ? configuration.getAoiBoundary() : generateSquareBoundary(latLonCenter, pointWidth);
return generateLocationsInSquare(webMercatorAoiCenter, boundary, pointsConfiguration);
default:
throw new IllegalArgumentException("Shape type not supported: " + pointsConfiguration.getShape());
}
}
Aggregations