use of com.mongodb.client.model.geojson.PolygonCoordinates in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodePolygonCoordinates.
@SuppressWarnings({ "unchecked", "rawtypes" })
private static PolygonCoordinates decodePolygonCoordinates(final BsonReader reader) {
validateIsArray(reader);
reader.readStartArray();
List<List<Position>> values = new ArrayList<List<Position>>();
while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
values.add(decodeCoordinates(reader));
}
reader.readEndArray();
if (values.isEmpty()) {
throw new CodecConfigurationException("Invalid Polygon no coordinates.");
}
List<Position> exterior = values.remove(0);
ArrayList[] holes = values.toArray(new ArrayList[values.size()]);
try {
return new PolygonCoordinates(exterior, holes);
} catch (IllegalArgumentException e) {
throw new CodecConfigurationException(format("Invalid Polygon: %s", e.getMessage()));
}
}
use of com.mongodb.client.model.geojson.PolygonCoordinates in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodeMultiPolygon.
private static MultiPolygon decodeMultiPolygon(final BsonReader reader) {
String type = null;
List<PolygonCoordinates> coordinates = null;
CoordinateReferenceSystem crs = null;
reader.readStartDocument();
while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
String key = reader.readName();
if (key.equals("type")) {
type = reader.readString();
} else if (key.equals("coordinates")) {
coordinates = decodeMultiPolygonCoordinates(reader);
} else if (key.equals("crs")) {
crs = decodeCoordinateReferenceSystem(reader);
} else {
throw new CodecConfigurationException(format("Unexpected key '%s' found when decoding a GeoJSON Polygon", key));
}
}
reader.readEndDocument();
if (type == null) {
throw new CodecConfigurationException("Invalid MultiPolygon, document contained no type information.");
} else if (!type.equals("MultiPolygon")) {
throw new CodecConfigurationException(format("Invalid MultiPolygon, found type '%s'.", type));
} else if (coordinates == null) {
throw new CodecConfigurationException("Invalid MultiPolygon, missing coordinates.");
}
return crs != null ? new MultiPolygon(crs, coordinates) : new MultiPolygon(coordinates);
}
use of com.mongodb.client.model.geojson.PolygonCoordinates in project morphia by mongodb.
the class Polygon method convert.
@Override
@SuppressWarnings({ "unchecked" })
public com.mongodb.client.model.geojson.Polygon convert(@Nullable CoordinateReferenceSystem crs) {
final List<List<Position>> lists = GeoJson.convertLineStrings(interiorBoundaries);
final List[] holeArray = lists.toArray(new List[0]);
return new com.mongodb.client.model.geojson.Polygon(crs != null ? crs.convert() : null, new PolygonCoordinates(exteriorBoundary.convert().getCoordinates(), holeArray));
}
use of com.mongodb.client.model.geojson.PolygonCoordinates in project spring-data-mongodb by spring-projects.
the class MongoTemplateMappingTests method writesAndReadsEntityWithNativeMongoGeoJsonTypesCorrectly.
// DATAMONGO-2357
@Test
public void writesAndReadsEntityWithNativeMongoGeoJsonTypesCorrectly() {
WithMongoGeoJson source = new WithMongoGeoJson();
source.id = "id-2";
source.multiPolygon = new MultiPolygon(Arrays.asList(new PolygonCoordinates(Arrays.asList(new Position(0, 0), new Position(0, 1), new Position(1, 1), new Position(1, 0), new Position(0, 0)))));
template1.save(source);
assertThat(template1.findOne(query(where("id").is(source.id)), WithMongoGeoJson.class)).isEqualTo(source);
}
use of com.mongodb.client.model.geojson.PolygonCoordinates in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodePolygon.
private static Polygon decodePolygon(final BsonReader reader) {
String type = null;
PolygonCoordinates coordinates = null;
CoordinateReferenceSystem crs = null;
reader.readStartDocument();
while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
String key = reader.readName();
if (key.equals("type")) {
type = reader.readString();
} else if (key.equals("coordinates")) {
coordinates = decodePolygonCoordinates(reader);
} else if (key.equals("crs")) {
crs = decodeCoordinateReferenceSystem(reader);
} else {
throw new CodecConfigurationException(format("Unexpected key '%s' found when decoding a GeoJSON Polygon", key));
}
}
reader.readEndDocument();
if (type == null) {
throw new CodecConfigurationException("Invalid Polygon, document contained no type information.");
} else if (!type.equals("Polygon")) {
throw new CodecConfigurationException(format("Invalid Polygon, found type '%s'.", type));
} else if (coordinates == null) {
throw new CodecConfigurationException("Invalid Polygon, missing coordinates.");
}
return crs != null ? new Polygon(crs, coordinates) : new Polygon(coordinates);
}
Aggregations