use of com.mongodb.client.model.geojson.Position 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.Position in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodePoint.
private static Point decodePoint(final BsonReader reader) {
String type = null;
Position position = 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")) {
position = decodePosition(reader);
} else if (key.equals("crs")) {
crs = decodeCoordinateReferenceSystem(reader);
} else {
throw new CodecConfigurationException(format("Unexpected key '%s' found when decoding a GeoJSON point", key));
}
}
reader.readEndDocument();
if (type == null) {
throw new CodecConfigurationException("Invalid Point, document contained no type information.");
} else if (!type.equals("Point")) {
throw new CodecConfigurationException(format("Invalid Point, found type '%s'.", type));
} else if (position == null) {
throw new CodecConfigurationException("Invalid Point, missing position coordinates.");
}
return crs != null ? new Point(crs, position) : new Point(position);
}
use of com.mongodb.client.model.geojson.Position in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodePosition.
private static Position decodePosition(final BsonReader reader) {
validateIsArray(reader);
reader.readStartArray();
List<Double> values = new ArrayList<Double>();
while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
values.add(readAsDouble(reader));
}
reader.readEndArray();
try {
return new Position(values);
} catch (IllegalArgumentException e) {
throw new CodecConfigurationException(format("Invalid Position: %s", e.getMessage()));
}
}
use of com.mongodb.client.model.geojson.Position in project mongo-java-driver by mongodb.
the class GeometryDecoderHelper method decodeMultiPoint.
private static MultiPoint decodeMultiPoint(final BsonReader reader) {
String type = null;
List<Position> 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 = decodeCoordinates(reader);
} else if (key.equals("crs")) {
crs = decodeCoordinateReferenceSystem(reader);
} else {
throw new CodecConfigurationException(format("Unexpected key '%s' found when decoding a GeoJSON point", key));
}
}
reader.readEndDocument();
if (type == null) {
throw new CodecConfigurationException("Invalid MultiPoint, document contained no type information.");
} else if (!type.equals("MultiPoint")) {
throw new CodecConfigurationException(format("Invalid MultiPoint, found type '%s'.", type));
} else if (coordinates == null) {
throw new CodecConfigurationException("Invalid MultiPoint, missing position coordinates.");
}
return crs != null ? new MultiPoint(crs, coordinates) : new MultiPoint(coordinates);
}
use of com.mongodb.client.model.geojson.Position in project mongo-java-driver by mongodb.
the class GeometryEncoderHelper method encodeMultiLineString.
private static void encodeMultiLineString(final BsonWriter writer, final MultiLineString value) {
writer.writeStartArray();
for (List<Position> ring : value.getCoordinates()) {
writer.writeStartArray();
for (Position position : ring) {
encodePosition(writer, position);
}
writer.writeEndArray();
}
writer.writeEndArray();
}
Aggregations