use of com.vividsolutions.jts.geom.Geometry in project GeoGig by boundlessgeo.
the class MappingRule method hasCompatibleGeometryType.
private boolean hasCompatibleGeometryType(Feature feature) {
getFeatureType();
GeomRestriction restriction = getGeomRestriction();
GeometryAttribute property = feature.getDefaultGeometryProperty();
Geometry geom = (Geometry) property.getValue();
if (geom.getClass().equals(Point.class)) {
return geometryType == Point.class;
} else {
if (geometryType.equals(Point.class)) {
return false;
}
Coordinate[] coords = geom.getCoordinates();
if (geometryType.equals(Polygon.class) && coords.length < 3) {
return false;
}
boolean isClosed = coords[0].equals(coords[coords.length - 1]);
if (isClosed && restriction.equals(GeomRestriction.ONLY_OPEN_LINES)) {
return false;
}
if (!isClosed && restriction.equals(GeomRestriction.ONLY_CLOSED_LINES)) {
return false;
}
return true;
}
}
use of com.vividsolutions.jts.geom.Geometry in project GeoGig by boundlessgeo.
the class GeometrySerializer method write.
@Override
public void write(Object obj, final DataOutput out) throws IOException {
final Geometry geom = (Geometry) obj;
final int geometryType = getGeometryType(geom);
final int typeAndMasks = geometryType;
writeUnsignedVarInt(typeAndMasks, out);
geom.apply(new EncodingSequenceFilter(out, true));
}
use of com.vividsolutions.jts.geom.Geometry in project GeoGig by boundlessgeo.
the class ExtractBounds method visit.
@Override
public List<ReferencedEnvelope> visit(Literal literal, @Nullable Object data) {
Object value = literal.getValue();
if (value instanceof Geometry) {
Geometry geom = (Geometry) value;
Envelope literalEnvelope = geom.getEnvelopeInternal();
CoordinateReferenceSystem crs = nativeCrs;
if (geom.getUserData() instanceof CoordinateReferenceSystem) {
crs = (CoordinateReferenceSystem) geom.getUserData();
}
ReferencedEnvelope bbox = new ReferencedEnvelope(literalEnvelope, crs);
bounds.add(bbox);
}
return bounds;
}
use of com.vividsolutions.jts.geom.Geometry in project GeoGig by boundlessgeo.
the class GeometryDiffTest method testNoNewGeometry.
@Test
public void testNoNewGeometry() throws Exception {
Geometry oldGeom = new WKTReader().read("MULTILINESTRING ((40 40, 20 45, 45 30, 40 40),(20 35, 45 10, 30 5, 10 30, 20 35))");
LCSGeometryDiffImpl diff = new LCSGeometryDiffImpl(Optional.of(oldGeom), Optional.fromNullable((Geometry) null));
LCSGeometryDiffImpl deserializedDiff = new LCSGeometryDiffImpl(diff.asText());
assertEquals(diff, deserializedDiff);
assertEquals("9 point(s) deleted, 0 new point(s) added, 0 point(s) moved", diff.toString());
Optional<Geometry> resultingGeom = diff.applyOn(Optional.of(oldGeom));
assertFalse(resultingGeom.isPresent());
}
use of com.vividsolutions.jts.geom.Geometry in project GeoGig by boundlessgeo.
the class GeometryDiffTest method testNoConflictAddingPoints.
@Test
public void testNoConflictAddingPoints() throws Exception {
Geometry oldGeom = new WKTReader().read("MULTILINESTRING ((40 40, 20 45, 45 30, 40 40),(20 35, 45 10, 30 5, 10 30, 20 35))");
Geometry newGeom = new WKTReader().read("MULTILINESTRING ((40 40, 10 10, 20 45, 45 30, 30 30),(20 35, 45 10, 30 5, 10 30, 20 35))");
GeometryAttributeDiff diff = new GeometryAttributeDiff(Optional.of(oldGeom), Optional.of(newGeom));
Geometry newGeom2 = new WKTReader().read("MULTILINESTRING ((40 40, 20 45, 45 30, 40 40),(20 35, 45 10, 31 6, 10 30, 20 35))");
GeometryAttributeDiff diff2 = new GeometryAttributeDiff(Optional.of(oldGeom), Optional.of(newGeom2));
assertFalse(diff.conflicts(diff2));
Optional<?> merged = diff2.applyOn(Optional.of(newGeom));
assertTrue(merged.isPresent());
Geometry mergedGeom = (Geometry) merged.get();
assertEquals("MULTILINESTRING ((40 40, 10 10, 20 45, 45 30, 30 30), (20 35, 45 10, 31 6, 10 30, 20 35))", mergedGeom.toText());
}
Aggregations