Geospatial queries for Point and LineString

Performing geospatial queries for Point and LineString.

Defining schemas for geospatial Point and LineString types

Define the schema for geospatial fields types. For example:

<?xml version="1.0" ?>
<schema name="spatial-no-jts" version="1.5">
    <types>
        <fieldType name="string" class="solr.StrField" />
        <fieldType name="boolean" class="solr.BoolField" />
        <!-- When geo="false", indicate worldBounds using ENVELOPE(minX, maxX, maxY, minY) notation -->
        <fieldType name="rpt"
                   class="solr.SpatialRecursivePrefixTreeFieldType"
                   geo="false"
                   worldBounds="ENVELOPE(-1000, 1000, 1000, -1000)"
                   maxDistErr="0.001"
                   distanceUnits="degrees" />
    </types>

    <fields>
        <field name="id" type="string" indexed="true" stored="true" />
        <field name="point" type="rpt" indexed="true" stored="true" />
        <field name="linestring" type="rpt" indexed="true" stored="true" />
    </fields>

<uniqueKey>id</uniqueKey>

</schema>

Apache Solr™ geospatial field types

For Solr geospatial field types, declare each geospatial field type in the table schema. For example:

CREATE TABLE test (
id text PRIMARY KEY,
point 'PointType', linestring 'LineStringType');

Inserting or updating geospatial data

To insert or update data in the database, specify geotypes in the INSERT or UPDATE command. For example:

INSERT INTO test (id, point, linestring) VALUES ('1', 'POINT(5 50)',
    'LINESTRING (30 10, 10 30, 40 40)' );
INSERT INTO test (id, point, linestring) VALUES ('2', 'POINT(100 100)',
    'LINESTRING (50 20, 20 40, 50 50)' );

Querying geospatial data

Find points within a 10 unit radius from point (4, 49):

SELECT * FROM test WHERE solr_query=' {"q":"*:*", "fq":"point:\"IsWithin(BUFFER(POINT(4.0 49.0), 10.0))\""}';

Find linestring that contains the point (10, 30):

SELECT * FROM test WHERE solr_query='linestring:"Intersects(POINT(10 30))"';

See this tutorial for details on how to index and query geospatial Polygons and MultiPolygons.

Was this helpful?

Give Feedback

How can we improve the documentation?

© 2024 DataStax | Privacy policy | Terms of use

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: +1 (650) 389-6000, info@datastax.com