Геоинструменты Java проверяют, содержится ли точка в полигоне с допуском

Я использую библиотеку Java Geotools для проверки, содержится ли POINT(...) в POLYGON(...).

Я сделал это с помощью:

Geometry sPG = reader.read(wktStartPoint); //startpointgeometry
Geometry sEG = reader.read(wktEndPoint);
if(wktLayerGeo.contains(sPG) || wktLayerGeo.contains(sEG)){
 // do something
}

Но теперь мне нужно установить допуск: например, я бы проверил, содержится ли точка в многоугольнике с допуском на расстояние 50 км.

Могу ли я сделать это с помощью GeoTools?

Спасибо


person michele    schedule 01.08.2016    source источник
comment
Мишель. 2 года было. Думаю ваш вопрос мне поможет! У меня есть список координат многоугольника -119.00072399999999 35.36158, -118.99903 35.361576, -118.999026 35.362579, -118.999023 35.363482, -118.999019 35.36432, -118.999408 35.364847999999995 Можете ли вы поделиться тем, как вы закодировали, чтобы проверить, находится ли точка (x, y) внутри координат многоугольника?   -  person Mike    schedule 17.01.2019


Ответы (2)


Вы можете использовать метод JTS buffer для своей полигональной геометрии (API):

double yourToleranceDistance = 2;
int numberOfSegmentsPerQuadrant = 2;
// get the geometry with your tolerance
Polygon wktLayerGeoWithTolerance = (Polygon) wktLayerGeo.buffer(yourToleranceDistance, numberOfSegmentsPerQuadrant, BufferParameters.CAP_SQUARE);
// continue with your code...
if(wktLayerGeoWithTolerance.contains(sPG) || wktLayerGeoWithTolerance.contains(sEG)){
     // do something
}
person Lars    schedule 19.08.2016

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

double distance = 10.0d;

FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
Filter filter = ff.dwithin(ff.property("POLYGON"), ff.literal(point), distance, uom.toString());

return featureSource.getFeatures(filter);
person Ian Turton    schedule 02.08.2016