use of org.openstreetmap.atlas.geography.converters.jts.JtsLocationConverter in project atlas by osmlab.
the class MultiPolygon method isOSMValid.
/**
* @return True if this {@link MultiPolygon} is valid according to the OSM specification. OSM
* allows some inners of the MultiPolygon to touch on more than a single point, to allow
* for one inner to be split in multiple parts tagged differently. Example: a forest
* with an inner, that is one side a meadow, and on the other side some marshland.
*/
public boolean isOSMValid() {
final org.locationtech.jts.geom.MultiPolygon jtsMultiPolygon = new JtsMultiPolygonToMultiPolygonConverter().backwardConvert(this);
final TopologyValidationError topologyValidationError = new IsValidOp(jtsMultiPolygon).getValidationError();
if (topologyValidationError != null) {
// TopologyValidationError to know what to do next.
if (TopologyValidationError.SELF_INTERSECTION == topologyValidationError.getErrorType()) {
final Location errorLocation = new JtsLocationConverter().backwardConvert(topologyValidationError.getCoordinate());
final Rectangle errorExpandedBoundingBox = errorLocation.boxAround(Distance.ONE_METER);
return isOSMValidSelfIntersection(errorExpandedBoundingBox);
}
return false;
} else {
return true;
}
}
Aggregations