Search in sources :

Example 6 with Shape

use of org.locationtech.spatial4j.shape.Shape in project elasticsearch by elastic.

the class ShapeBuilderTests method testShapeWithPointOnDateline.

public void testShapeWithPointOnDateline() {
    PolygonBuilder builder = ShapeBuilders.newPolygon(new CoordinatesBuilder().coordinate(180, 0).coordinate(176, 4).coordinate(176, -4).coordinate(180, 0));
    Shape shape = builder.close().build();
    assertPolygon(shape);
}
Also used : CoordinatesBuilder(org.elasticsearch.common.geo.builders.CoordinatesBuilder) Shape(org.locationtech.spatial4j.shape.Shape) PolygonBuilder(org.elasticsearch.common.geo.builders.PolygonBuilder)

Example 7 with Shape

use of org.locationtech.spatial4j.shape.Shape in project elasticsearch by elastic.

the class ShapeBuilderTests method testComplexShapeWithHole.

public void testComplexShapeWithHole() {
    PolygonBuilder builder = ShapeBuilders.newPolygon(new CoordinatesBuilder().coordinate(-85.0018514, 37.1311314).coordinate(-85.0016645, 37.1315293).coordinate(-85.0016246, 37.1317069).coordinate(-85.0016526, 37.1318183).coordinate(-85.0017119, 37.1319196).coordinate(-85.0019371, 37.1321182).coordinate(-85.0019972, 37.1322115).coordinate(-85.0019942, 37.1323234).coordinate(-85.0019543, 37.1324336).coordinate(-85.001906, 37.1324985).coordinate(-85.001834, 37.1325497).coordinate(-85.0016965, 37.1325907).coordinate(-85.0016011, 37.1325873).coordinate(-85.0014816, 37.1325353).coordinate(-85.0011755, 37.1323509).coordinate(-85.000955, 37.1322802).coordinate(-85.0006241, 37.1322529).coordinate(-85.0000002, 37.1322307).coordinate(-84.9994, 37.1323001).coordinate(-84.999109, 37.1322864).coordinate(-84.998934, 37.1322415).coordinate(-84.9988639, 37.1321888).coordinate(-84.9987841, 37.1320944).coordinate(-84.9987208, 37.131954).coordinate(-84.998736, 37.1316611).coordinate(-84.9988091, 37.131334).coordinate(-84.9989283, 37.1311337).coordinate(-84.9991943, 37.1309198).coordinate(-84.9993573, 37.1308459).coordinate(-84.9995888, 37.1307924).coordinate(-84.9998746, 37.130806).coordinate(-85.0000002, 37.1308358).coordinate(-85.0004984, 37.1310658).coordinate(-85.0008008, 37.1311625).coordinate(-85.0009461, 37.1311684).coordinate(-85.0011373, 37.1311515).coordinate(-85.0016455, 37.1310491).coordinate(-85.0018514, 37.1311314));
    builder.hole(new LineStringBuilder(new CoordinatesBuilder().coordinate(-85.0000002, 37.1317672).coordinate(-85.0001983, 37.1317538).coordinate(-85.0003378, 37.1317582).coordinate(-85.0004697, 37.131792).coordinate(-85.0008048, 37.1319439).coordinate(-85.0009342, 37.1319838).coordinate(-85.0010184, 37.1319463).coordinate(-85.0010618, 37.13184).coordinate(-85.0010057, 37.1315102).coordinate(-85.000977, 37.1314403).coordinate(-85.0009182, 37.1313793).coordinate(-85.0005366, 37.1312209).coordinate(-85.000224, 37.1311466).coordinate(-85.000087, 37.1311356).coordinate(-85.0000002, 37.1311433).coordinate(-84.9995021, 37.1312336).coordinate(-84.9993308, 37.1312859).coordinate(-84.9992567, 37.1313252).coordinate(-84.9991868, 37.1314277).coordinate(-84.9991593, 37.1315381).coordinate(-84.9991841, 37.1316527).coordinate(-84.9992329, 37.1317117).coordinate(-84.9993527, 37.1317788).coordinate(-84.9994931, 37.1318061).coordinate(-84.9996815, 37.1317979).coordinate(-85.0000002, 37.1317672)));
    Shape shape = builder.close().build();
    assertPolygon(shape);
}
Also used : CoordinatesBuilder(org.elasticsearch.common.geo.builders.CoordinatesBuilder) Shape(org.locationtech.spatial4j.shape.Shape) PolygonBuilder(org.elasticsearch.common.geo.builders.PolygonBuilder) LineStringBuilder(org.elasticsearch.common.geo.builders.LineStringBuilder)

Example 8 with Shape

use of org.locationtech.spatial4j.shape.Shape in project elasticsearch by elastic.

the class ShapeBuilderTests method testDatelineOGC.

public void testDatelineOGC() {
    // tests that the following shape (defined in counterclockwise OGC order)
    // https://gist.github.com/anonymous/7f1bb6d7e9cd72f5977c crosses the dateline
    // expected results: 3 polygons, 1 with a hole
    // a giant c shape
    PolygonBuilder builder = ShapeBuilders.newPolygon(new CoordinatesBuilder().coordinate(174, 0).coordinate(-176, 0).coordinate(-176, 3).coordinate(177, 3).coordinate(177, 5).coordinate(-176, 5).coordinate(-176, 8).coordinate(174, 8).coordinate(174, 0));
    // 3/4 of an embedded 'c', crossing dateline once
    builder.hole(new LineStringBuilder(new CoordinatesBuilder().coordinate(175, 1).coordinate(175, 7).coordinate(-178, 7).coordinate(-178, 6).coordinate(176, 6).coordinate(176, 2).coordinate(179, 2).coordinate(179, 1).coordinate(175, 1)));
    // embedded hole right of the dateline
    builder.hole(new LineStringBuilder(new CoordinatesBuilder().coordinate(-179, 1).coordinate(-179, 2).coordinate(-177, 2).coordinate(-177, 1).coordinate(-179, 1)));
    Shape shape = builder.close().build();
    assertMultiPolygon(shape);
}
Also used : CoordinatesBuilder(org.elasticsearch.common.geo.builders.CoordinatesBuilder) Shape(org.locationtech.spatial4j.shape.Shape) PolygonBuilder(org.elasticsearch.common.geo.builders.PolygonBuilder) LineStringBuilder(org.elasticsearch.common.geo.builders.LineStringBuilder)

Example 9 with Shape

use of org.locationtech.spatial4j.shape.Shape in project elasticsearch by elastic.

the class GeoShapeFieldMapper method parse.

@Override
public Mapper parse(ParseContext context) throws IOException {
    try {
        Shape shape = context.parseExternalValue(Shape.class);
        if (shape == null) {
            ShapeBuilder shapeBuilder = ShapeBuilder.parse(context.parser(), this);
            if (shapeBuilder == null) {
                return null;
            }
            shape = shapeBuilder.build();
        }
        if (fieldType().pointsOnly() && !(shape instanceof Point)) {
            throw new MapperParsingException("[{" + fieldType().name() + "}] is configured for points only but a " + ((shape instanceof JtsGeometry) ? ((JtsGeometry) shape).getGeom().getGeometryType() : shape.getClass()) + " was found");
        }
        Field[] fields = fieldType().defaultStrategy().createIndexableFields(shape);
        if (fields == null || fields.length == 0) {
            return null;
        }
        for (Field field : fields) {
            if (!customBoost() && fieldType.boost() != 1f && Version.indexCreated(context.indexSettings()).before(Version.V_5_0_0_alpha1)) {
                field.setBoost(fieldType().boost());
            }
            context.doc().add(field);
        }
    } catch (Exception e) {
        throw new MapperParsingException("failed to parse [" + fieldType().name() + "]", e);
    }
    return null;
}
Also used : IndexableField(org.apache.lucene.index.IndexableField) Field(org.apache.lucene.document.Field) ShapeBuilder(org.elasticsearch.common.geo.builders.ShapeBuilder) Shape(org.locationtech.spatial4j.shape.Shape) JtsGeometry(org.locationtech.spatial4j.shape.jts.JtsGeometry) Point(org.locationtech.spatial4j.shape.Point) QueryShardException(org.elasticsearch.index.query.QueryShardException) IOException(java.io.IOException)

Example 10 with Shape

use of org.locationtech.spatial4j.shape.Shape in project jena by apache.

the class SpatialIndexLucene method doc.

private Document doc(String entityURI, Shape... shapes) {
    Document doc = new Document();
    Field entField = new Field(docDef.getEntityField(), entityURI, ftIRI);
    doc.add(entField);
    for (Shape shape : shapes) {
        for (IndexableField f : strategy.createIndexableFields(shape)) {
            doc.add(f);
        }
    }
    return doc;
}
Also used : Field(org.apache.lucene.document.Field) Shape(org.locationtech.spatial4j.shape.Shape) Document(org.apache.lucene.document.Document)

Aggregations

Shape (org.locationtech.spatial4j.shape.Shape)76 Test (org.junit.Test)17 Point (org.locationtech.spatial4j.shape.Point)15 ArrayList (java.util.ArrayList)14 CoordinatesBuilder (org.elasticsearch.common.geo.builders.CoordinatesBuilder)13 SpatialArgs (org.apache.lucene.spatial.query.SpatialArgs)12 PolygonBuilder (org.elasticsearch.common.geo.builders.PolygonBuilder)11 Document (org.apache.lucene.document.Document)10 Field (org.apache.lucene.document.Field)9 Query (org.apache.lucene.search.Query)9 StoredField (org.apache.lucene.document.StoredField)7 LineStringBuilder (org.elasticsearch.common.geo.builders.LineStringBuilder)7 Rectangle (org.locationtech.spatial4j.shape.Rectangle)7 UnitNRShape (org.apache.lucene.spatial.prefix.tree.NumberRangePrefixTree.UnitNRShape)6 SpatialOperation (org.apache.lucene.spatial.query.SpatialOperation)6 StringField (org.apache.lucene.document.StringField)5 IndexableField (org.apache.lucene.index.IndexableField)5 TextField (org.apache.lucene.document.TextField)4 UnsupportedSpatialOperation (org.apache.lucene.spatial.query.UnsupportedSpatialOperation)4 LineString (com.vividsolutions.jts.geom.LineString)3