Search in sources :

Example 11 with Point

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));
    }
}
Also used : Line(org.opensearch.geometry.Line) Point(org.opensearch.geometry.Point) XContentBuilder(org.opensearch.common.xcontent.XContentBuilder) XContentParser(org.opensearch.common.xcontent.XContentParser)

Example 12 with Point

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));
}
Also used : Line(org.opensearch.geometry.Line) Point(org.opensearch.geometry.Point) Polygon(org.opensearch.geometry.Polygon) LinearRing(org.opensearch.geometry.LinearRing)

Example 13 with Point

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));
    }
}
Also used : Point(org.opensearch.geometry.Point) XContentBuilder(org.opensearch.common.xcontent.XContentBuilder) XContentParser(org.opensearch.common.xcontent.XContentParser)

Example 14 with Point

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));
}
Also used : Geometry(org.opensearch.geometry.Geometry) GeometryCollection(org.opensearch.geometry.GeometryCollection) MultiLine(org.opensearch.geometry.MultiLine) Line(org.opensearch.geometry.Line) MultiLine(org.opensearch.geometry.MultiLine) MultiPoint(org.opensearch.geometry.MultiPoint) Point(org.opensearch.geometry.Point)

Example 15 with Point

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));
}
Also used : MultiPoint(org.opensearch.geometry.MultiPoint) Geometry(org.opensearch.geometry.Geometry) MultiPoint(org.opensearch.geometry.MultiPoint) Point(org.opensearch.geometry.Point)

Aggregations

Point (org.opensearch.geometry.Point)34 MultiPoint (org.opensearch.geometry.MultiPoint)14 XContentBuilder (org.opensearch.common.xcontent.XContentBuilder)9 ArrayList (java.util.ArrayList)6 Geometry (org.opensearch.geometry.Geometry)5 IOException (java.io.IOException)4 InvalidShapeException (org.locationtech.spatial4j.exception.InvalidShapeException)4 XContentParser (org.opensearch.common.xcontent.XContentParser)4 Line (org.opensearch.geometry.Line)4 LinearRing (org.opensearch.geometry.LinearRing)4 Polygon (org.opensearch.geometry.Polygon)4 OpenSearchParseException (org.opensearch.OpenSearchParseException)3 GeometryCollection (org.opensearch.geometry.GeometryCollection)3 PointBuilder (org.opensearch.common.geo.builders.PointBuilder)2 MultiLine (org.opensearch.geometry.MultiLine)2 ParseException (java.text.ParseException)1 Collection (java.util.Collection)1 Collections.singletonMap (java.util.Collections.singletonMap)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1