use of org.opensearch.geometry.Point in project OpenSearch by opensearch-project.
the class GeometryParserTests method testWKTParsing.
public void testWKTParsing() throws Exception {
XContentBuilder pointGeoJson = XContentFactory.jsonBuilder().startObject().field("foo", "Point (100 0)").endObject();
try (XContentParser parser = createParser(pointGeoJson)) {
// Start object
parser.nextToken();
// Field Name
parser.nextToken();
// Field Value
parser.nextToken();
GeometryFormat format = new GeometryParser(true, randomBoolean(), randomBoolean()).geometryFormat(parser);
assertEquals(new Point(100, 0), format.fromXContent(parser));
XContentBuilder newGeoJson = XContentFactory.jsonBuilder().startObject().field("val");
format.toXContent(new Point(100, 10), newGeoJson, ToXContent.EMPTY_PARAMS);
newGeoJson.endObject();
assertEquals("{\"val\":\"POINT (100.0 10.0)\"}", Strings.toString(newGeoJson));
}
// Make sure we can parse values outside the normal lat lon boundaries
XContentBuilder lineGeoJson = XContentFactory.jsonBuilder().startObject().field("foo", "LINESTRING (100 0, 200 10)").endObject();
try (XContentParser parser = createParser(lineGeoJson)) {
// Start object
parser.nextToken();
// Field Name
parser.nextToken();
// Field Value
parser.nextToken();
assertEquals(new Line(new double[] { 100, 200 }, new double[] { 0, 10 }), new GeometryParser(true, randomBoolean(), randomBoolean()).parse(parser));
}
}
use of org.opensearch.geometry.Point in project OpenSearch by opensearch-project.
the class GeometryParserTests method testBasics.
public void testBasics() {
GeometryParser parser = new GeometryParser(true, randomBoolean(), randomBoolean());
// point
Point expectedPoint = new Point(-122.084110, 37.386637);
testBasics(parser, mapOf("lat", 37.386637, "lon", -122.084110), expectedPoint);
testBasics(parser, "37.386637, -122.084110", expectedPoint);
testBasics(parser, "POINT (-122.084110 37.386637)", expectedPoint);
testBasics(parser, Arrays.asList(-122.084110, 37.386637), expectedPoint);
testBasics(parser, mapOf("type", "Point", "coordinates", Arrays.asList(-122.084110, 37.386637)), expectedPoint);
// line
Line expectedLine = new Line(new double[] { 0, 1 }, new double[] { 0, 1 });
testBasics(parser, "LINESTRING(0 0, 1 1)", expectedLine);
testBasics(parser, mapOf("type", "LineString", "coordinates", Arrays.asList(Arrays.asList(0, 0), Arrays.asList(1, 1))), expectedLine);
// polygon
Polygon expectedPolygon = new Polygon(new LinearRing(new double[] { 0, 1, 1, 0, 0 }, new double[] { 0, 0, 1, 1, 0 }));
testBasics(parser, "POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", expectedPolygon);
testBasics(parser, mapOf("type", "Polygon", "coordinates", Arrays.asList(Arrays.asList(Arrays.asList(0, 0), Arrays.asList(1, 0), Arrays.asList(1, 1), Arrays.asList(0, 1), Arrays.asList(0, 0)))), expectedPolygon);
// geometry collection
testBasics(parser, Arrays.asList(Arrays.asList(-122.084110, 37.386637), "37.386637, -122.084110", "POINT (-122.084110 37.386637)", mapOf("type", "Point", "coordinates", Arrays.asList(-122.084110, 37.386637)), mapOf("type", "LineString", "coordinates", Arrays.asList(Arrays.asList(0, 0), Arrays.asList(1, 1))), "POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))"), new GeometryCollection<>(Arrays.asList(expectedPoint, expectedPoint, expectedPoint, expectedPoint, expectedLine, expectedPolygon)));
expectThrows(OpenSearchParseException.class, () -> testBasics(parser, "not a geometry", null));
}
use of org.opensearch.geometry.Point in project OpenSearch by opensearch-project.
the class GeometryParserTests method testNullParsing.
public void testNullParsing() throws Exception {
XContentBuilder pointGeoJson = XContentFactory.jsonBuilder().startObject().nullField("foo").endObject();
try (XContentParser parser = createParser(pointGeoJson)) {
// Start object
parser.nextToken();
// Field Name
parser.nextToken();
// Field Value
parser.nextToken();
GeometryFormat format = new GeometryParser(true, randomBoolean(), randomBoolean()).geometryFormat(parser);
assertNull(format.fromXContent(parser));
XContentBuilder newGeoJson = XContentFactory.jsonBuilder().startObject().field("val");
// if we serialize non-null value - it should be serialized as geojson
format.toXContent(new Point(100, 10), newGeoJson, ToXContent.EMPTY_PARAMS);
newGeoJson.endObject();
assertEquals("{\"val\":{\"type\":\"Point\",\"coordinates\":[100.0,10.0]}}", Strings.toString(newGeoJson));
newGeoJson = XContentFactory.jsonBuilder().startObject().field("val");
format.toXContent(null, newGeoJson, ToXContent.EMPTY_PARAMS);
newGeoJson.endObject();
assertEquals("{\"val\":null}", Strings.toString(newGeoJson));
}
}
use of org.opensearch.geometry.Point in project OpenSearch by opensearch-project.
the class GeometryIndexerTests method testCollection.
public void testCollection() {
assertEquals(GeometryCollection.EMPTY, indexer.prepareForIndexing(GeometryCollection.EMPTY));
GeometryCollection<Geometry> collection = new GeometryCollection<>(Collections.singletonList(new Point(2, 1)));
Geometry indexed = new Point(2, 1);
assertEquals(indexed, indexer.prepareForIndexing(collection));
collection = new GeometryCollection<>(Arrays.asList(new Point(2, 1), new Point(4, 3), new Line(new double[] { 160, 200 }, new double[] { 10, 20 })));
indexed = new GeometryCollection<>(Arrays.asList(new Point(2, 1), new Point(4, 3), new MultiLine(Arrays.asList(new Line(new double[] { 160, 180 }, new double[] { 10, 15 }), new Line(new double[] { -180, -160 }, new double[] { 15, 20 })))));
assertEquals(indexed, indexer.prepareForIndexing(collection));
}
use of org.opensearch.geometry.Point in project OpenSearch by opensearch-project.
the class GeometryIndexerTests method testMultiPoint.
public void testMultiPoint() {
MultiPoint multiPoint = MultiPoint.EMPTY;
Geometry indexed = multiPoint;
assertEquals(indexed, indexer.prepareForIndexing(multiPoint));
multiPoint = new MultiPoint(Collections.singletonList(new Point(2, 1)));
indexed = new Point(2, 1);
assertEquals(indexed, indexer.prepareForIndexing(multiPoint));
multiPoint = new MultiPoint(Arrays.asList(new Point(2, 1), new Point(4, 3)));
indexed = multiPoint;
assertEquals(indexed, indexer.prepareForIndexing(multiPoint));
multiPoint = new MultiPoint(Arrays.asList(new Point(2, 1, 10), new Point(4, 3, 10)));
assertEquals(indexed, indexer.prepareForIndexing(multiPoint));
}
Aggregations