Search in sources :

Example 6 with MultiLine

use of org.opensearch.geometry.MultiLine in project OpenSearch by opensearch-project.

the class GeoJsonParserTests method testParseMultiLineString.

@Override
public void testParseMultiLineString() throws IOException {
    XContentBuilder multilinesGeoJson = XContentFactory.jsonBuilder().startObject().field("type", "MultiLineString").startArray("coordinates").startArray().startArray().value(100.0).value(0.0).endArray().startArray().value(101.0).value(1.0).endArray().endArray().startArray().startArray().value(102.0).value(2.0).endArray().startArray().value(103.0).value(3.0).endArray().endArray().endArray().endObject();
    MultiLine expected = new MultiLine(Arrays.asList(new Line(new double[] { 100.0, 101.0 }, new double[] { 0.0, 1.0 }), new Line(new double[] { 102.0, 103.0 }, new double[] { 2.0, 3.0 })));
    assertGeometryEquals(expected, multilinesGeoJson);
}
Also used : MultiLine(org.opensearch.geometry.MultiLine) Line(org.opensearch.geometry.Line) MultiLine(org.opensearch.geometry.MultiLine) XContentBuilder(org.opensearch.common.xcontent.XContentBuilder)

Example 7 with MultiLine

use of org.opensearch.geometry.MultiLine in project OpenSearch by opensearch-project.

the class GeometryTestUtils method randomMultiLine.

public static MultiLine randomMultiLine(boolean hasAlt) {
    int size = OpenSearchTestCase.randomIntBetween(3, 10);
    List<Line> lines = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        lines.add(randomLine(hasAlt));
    }
    return new MultiLine(lines);
}
Also used : Line(org.opensearch.geometry.Line) MultiLine(org.opensearch.geometry.MultiLine) MultiLine(org.opensearch.geometry.MultiLine) ArrayList(java.util.ArrayList) Point(org.opensearch.geometry.Point) MultiPoint(org.opensearch.geometry.MultiPoint)

Example 8 with MultiLine

use of org.opensearch.geometry.MultiLine in project OpenSearch by opensearch-project.

the class GeoWKTShapeParserTests method testParseMultiLineString.

@Override
public void testParseMultiLineString() throws IOException, ParseException {
    int numLineStrings = randomIntBetween(0, 8);
    List<LineString> lineStrings = new ArrayList<>(numLineStrings);
    MultiLineStringBuilder builder = new MultiLineStringBuilder();
    for (int j = 0; j < numLineStrings; ++j) {
        List<Coordinate> lsc = randomLineStringCoords();
        Coordinate[] coords = lsc.toArray(new Coordinate[lsc.size()]);
        lineStrings.add(GEOMETRY_FACTORY.createLineString(coords));
        builder.linestring(new LineStringBuilder(lsc));
    }
    List<Line> lines = new ArrayList<>(lineStrings.size());
    for (int j = 0; j < lineStrings.size(); ++j) {
        Coordinate[] c = lineStrings.get(j).getCoordinates();
        lines.add(new Line(Arrays.stream(c).mapToDouble(i -> i.x).toArray(), Arrays.stream(c).mapToDouble(i -> i.y).toArray()));
    }
    Geometry expectedGeom;
    if (lines.isEmpty()) {
        expectedGeom = GeometryCollection.EMPTY;
    } else if (lines.size() == 1) {
        expectedGeom = new Line(lines.get(0).getX(), lines.get(0).getY());
    } else {
        expectedGeom = new MultiLine(lines);
    }
    assertExpected(expectedGeom, builder, false);
    assertMalformed(builder);
    MultiLineString expected = GEOMETRY_FACTORY.createMultiLineString(lineStrings.toArray(new LineString[lineStrings.size()]));
    assumeTrue("JTS test path cannot handle empty multilinestrings", numLineStrings > 1);
    assertExpected(jtsGeom(expected), builder, true);
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) MultiLineStringBuilder(org.opensearch.common.geo.builders.MultiLineStringBuilder) Arrays(java.util.Arrays) GeometryCollectionBuilder(org.opensearch.common.geo.builders.GeometryCollectionBuilder) MultiPointBuilder(org.opensearch.common.geo.builders.MultiPointBuilder) ShapeParser(org.opensearch.common.geo.parsers.ShapeParser) ContentPath(org.opensearch.index.mapper.ContentPath) Coordinate(org.locationtech.jts.geom.Coordinate) Version(org.opensearch.Version) OpenSearchException(org.opensearch.OpenSearchException) RandomShapeGenerator(org.opensearch.test.geo.RandomShapeGenerator) MultiPoint(org.opensearch.geometry.MultiPoint) XContentParser(org.opensearch.common.xcontent.XContentParser) SPATIAL_CONTEXT(org.opensearch.common.geo.builders.ShapeBuilder.SPATIAL_CONTEXT) EnvelopeBuilder(org.opensearch.common.geo.builders.EnvelopeBuilder) XContentFactory(org.opensearch.common.xcontent.XContentFactory) MultiPolygonBuilder(org.opensearch.common.geo.builders.MultiPolygonBuilder) JtsPoint(org.locationtech.spatial4j.shape.jts.JtsPoint) ParseException(java.text.ParseException) ShapeCollection(org.locationtech.spatial4j.shape.ShapeCollection) GeoShapeFieldMapper(org.opensearch.index.mapper.GeoShapeFieldMapper) MultiLineString(org.locationtech.jts.geom.MultiLineString) OpenSearchParseException(org.opensearch.OpenSearchParseException) Settings(org.opensearch.common.settings.Settings) Point(org.locationtech.jts.geom.Point) Geometry(org.opensearch.geometry.Geometry) Shape(org.locationtech.spatial4j.shape.Shape) GeoShapeIndexer(org.opensearch.index.mapper.GeoShapeIndexer) List(java.util.List) InvalidShapeException(org.locationtech.spatial4j.exception.InvalidShapeException) Polygon(org.locationtech.jts.geom.Polygon) Line(org.opensearch.geometry.Line) Matchers.containsString(org.hamcrest.Matchers.containsString) ShapeBuilder(org.opensearch.common.geo.builders.ShapeBuilder) IndexMetadata(org.opensearch.cluster.metadata.IndexMetadata) PolygonBuilder(org.opensearch.common.geo.builders.PolygonBuilder) GeoTestUtil(org.apache.lucene.geo.GeoTestUtil) LinearRing(org.locationtech.jts.geom.LinearRing) LineStringBuilder(org.opensearch.common.geo.builders.LineStringBuilder) LegacyGeoShapeFieldMapper(org.opensearch.index.mapper.LegacyGeoShapeFieldMapper) ArrayList(java.util.ArrayList) PointBuilder(org.opensearch.common.geo.builders.PointBuilder) Rectangle(org.locationtech.spatial4j.shape.Rectangle) CoordinatesBuilder(org.opensearch.common.geo.builders.CoordinatesBuilder) UUIDs(org.opensearch.common.UUIDs) MultiLine(org.opensearch.geometry.MultiLine) GeometryCollection(org.opensearch.geometry.GeometryCollection) IOException(java.io.IOException) Mapper(org.opensearch.index.mapper.Mapper) XContentBuilder(org.opensearch.common.xcontent.XContentBuilder) GeoWKTParser(org.opensearch.common.geo.parsers.GeoWKTParser) LineString(org.locationtech.jts.geom.LineString) Collections(java.util.Collections) MultiLineString(org.locationtech.jts.geom.MultiLineString) ArrayList(java.util.ArrayList) MultiPoint(org.opensearch.geometry.MultiPoint) JtsPoint(org.locationtech.spatial4j.shape.jts.JtsPoint) Point(org.locationtech.jts.geom.Point) MultiLineStringBuilder(org.opensearch.common.geo.builders.MultiLineStringBuilder) LineStringBuilder(org.opensearch.common.geo.builders.LineStringBuilder) Line(org.opensearch.geometry.Line) MultiLine(org.opensearch.geometry.MultiLine) Geometry(org.opensearch.geometry.Geometry) MultiLine(org.opensearch.geometry.MultiLine) MultiLineString(org.locationtech.jts.geom.MultiLineString) LineString(org.locationtech.jts.geom.LineString) Coordinate(org.locationtech.jts.geom.Coordinate) MultiLineStringBuilder(org.opensearch.common.geo.builders.MultiLineStringBuilder)

Example 9 with MultiLine

use of org.opensearch.geometry.MultiLine in project OpenSearch by opensearch-project.

the class GeometryIndexerTests method testLine.

public void testLine() {
    Line line = new Line(new double[] { 3, 4 }, new double[] { 1, 2 });
    Geometry indexed = line;
    assertEquals(indexed, indexer.prepareForIndexing(line));
    line = new Line(new double[] { 160, 200 }, new double[] { 10, 20 });
    indexed = 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(line));
    line = new Line(new double[] { 200, 160 }, new double[] { 10, 20 });
    indexed = 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(line));
    line = new Line(new double[] { 160, 200, 160 }, new double[] { 0, 10, 20 });
    indexed = new MultiLine(Arrays.asList(new Line(new double[] { 160, 180 }, new double[] { 0, 5 }), new Line(new double[] { -180, -160, -180 }, new double[] { 5, 10, 15 }), new Line(new double[] { 180, 160 }, new double[] { 15, 20 })));
    assertEquals(indexed, indexer.prepareForIndexing(line));
    line = new Line(new double[] { 0, 720 }, new double[] { 0, 20 });
    indexed = new MultiLine(Arrays.asList(new Line(new double[] { 0, 180 }, new double[] { 0, 5 }), new Line(new double[] { -180, 180 }, new double[] { 5, 15 }), new Line(new double[] { -180, 0 }, new double[] { 15, 20 })));
    assertEquals(indexed, indexer.prepareForIndexing(line));
    line = new Line(new double[] { 160, 180, 180, 200, 160, 140 }, new double[] { 0, 10, 20, 30, 30, 40 });
    indexed = new MultiLine(Arrays.asList(new Line(new double[] { 160, 180 }, new double[] { 0, 10 }), new Line(new double[] { -180, -180, -160, -180 }, new double[] { 10, 20, 30, 30 }), new Line(new double[] { 180, 160, 140 }, new double[] { 30, 30, 40 })));
    assertEquals(indexed, indexer.prepareForIndexing(line));
    line = new Line(new double[] { -70, 180, 900 }, new double[] { 0, 0, 4 });
    indexed = new MultiLine(Arrays.asList(new Line(new double[] { -70, 180 }, new double[] { 0, 0 }), new Line(new double[] { -180, 180 }, new double[] { 0, 2 }), new Line(new double[] { -180, 180 }, new double[] { 2, 4 })));
    assertEquals(indexed, indexer.prepareForIndexing(line));
    line = new Line(new double[] { 160, 200, 160, 200, 160, 200 }, new double[] { 0, 10, 20, 30, 40, 50 });
    indexed = new MultiLine(Arrays.asList(new Line(new double[] { 160, 180 }, new double[] { 0, 5 }), new Line(new double[] { -180, -160, -180 }, new double[] { 5, 10, 15 }), new Line(new double[] { 180, 160, 180 }, new double[] { 15, 20, 25 }), new Line(new double[] { -180, -160, -180 }, new double[] { 25, 30, 35 }), new Line(new double[] { 180, 160, 180 }, new double[] { 35, 40, 45 }), new Line(new double[] { -180, -160 }, new double[] { 45, 50 })));
    assertEquals(indexed, indexer.prepareForIndexing(line));
}
Also used : MultiLine(org.opensearch.geometry.MultiLine) Line(org.opensearch.geometry.Line) Geometry(org.opensearch.geometry.Geometry) MultiLine(org.opensearch.geometry.MultiLine)

Example 10 with MultiLine

use of org.opensearch.geometry.MultiLine in project OpenSearch by opensearch-project.

the class GeometryIO method readMultiLine.

private static MultiLine readMultiLine(StreamInput in) throws IOException {
    int size = in.readVInt();
    List<Line> lines = new ArrayList<>(size);
    for (int i = 0; i < size; i++) {
        lines.add(readLine(in));
    }
    return new MultiLine(lines);
}
Also used : Line(org.opensearch.geometry.Line) MultiLine(org.opensearch.geometry.MultiLine) MultiLine(org.opensearch.geometry.MultiLine) ArrayList(java.util.ArrayList) Point(org.opensearch.geometry.Point) MultiPoint(org.opensearch.geometry.MultiPoint)

Aggregations

MultiLine (org.opensearch.geometry.MultiLine)11 Line (org.opensearch.geometry.Line)10 XContentBuilder (org.opensearch.common.xcontent.XContentBuilder)5 Geometry (org.opensearch.geometry.Geometry)5 MultiPoint (org.opensearch.geometry.MultiPoint)5 ArrayList (java.util.ArrayList)4 Coordinate (org.locationtech.jts.geom.Coordinate)3 Point (org.opensearch.geometry.Point)3 IOException (java.io.IOException)2 List (java.util.List)2 LineString (org.locationtech.jts.geom.LineString)2 MultiLineString (org.locationtech.jts.geom.MultiLineString)2 CoordinatesBuilder (org.opensearch.common.geo.builders.CoordinatesBuilder)2 LineStringBuilder (org.opensearch.common.geo.builders.LineStringBuilder)2 MultiLineStringBuilder (org.opensearch.common.geo.builders.MultiLineStringBuilder)2 ParseException (java.text.ParseException)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 Iterator (java.util.Iterator)1 Objects (java.util.Objects)1