Search in sources :

Example 1 with JtsLocationConverter

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;
    }
}
Also used : JtsLocationConverter(org.openstreetmap.atlas.geography.converters.jts.JtsLocationConverter) IsValidOp(org.locationtech.jts.operation.valid.IsValidOp) JtsMultiPolygonToMultiPolygonConverter(org.openstreetmap.atlas.geography.converters.jts.JtsMultiPolygonToMultiPolygonConverter) TopologyValidationError(org.locationtech.jts.operation.valid.TopologyValidationError)

Aggregations

IsValidOp (org.locationtech.jts.operation.valid.IsValidOp)1 TopologyValidationError (org.locationtech.jts.operation.valid.TopologyValidationError)1 JtsLocationConverter (org.openstreetmap.atlas.geography.converters.jts.JtsLocationConverter)1 JtsMultiPolygonToMultiPolygonConverter (org.openstreetmap.atlas.geography.converters.jts.JtsMultiPolygonToMultiPolygonConverter)1