Polygon Query
A GeoJSON Polygon Query against any GeoJSON type.
Couchbase Server 7.1.2
QueryShape for a Polygon Query
A GeoJSON query via a GeoShape of Polygon to find GeoJSON types in a Search index using the 3 relations intersects, contains, and within.
Polygon Intersects
Query
An intersect
query for polygon returns all the matched documents with shapes that overlap with the area of the polygon within the query.
A polygon intersection
query sample is given below.
{
"query": {
"field": "<<fieldName>>",
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[-114.027099609375, 42.00848901572399],
[-114.04907226562499, 36.99377838872517],
[-109.05029296875, 36.99377838872517],
[-109.05029296875, 40.98819156349393],
[-111.060791015625, 40.98819156349393],
[-111.02783203125, 42.00848901572399],
[-114.027099609375, 42.00848901572399]
]
]
},
"relation": "intersects"
}
}
}
Intersection rules for the Polygon Query with other indexed GeoJSON shapes in the document set are given below.
Intersects (relation) |
|
Point |
Intersects when the polygon area contains the point in the document. |
LineString |
Intersects when one of the polygon edges in the query intersects the linestring in the document. |
Polygon |
Intersects when the polygon area in the query intersects the polygon in the document. |
MultiPoint |
Intersects when the polygon area contains any of the points in the multipoint array in the document. |
MultiLineString |
Intersects when the polygon area in the query intersects any of the linestring in the multilinestring array in the document. |
MultiPolygon |
Intersects when the polygon in the query intersects any of the polygons in the multipolygon array in the document. |
GeometryCollection |
Matches when the query polygon intersects with any of the heterogeneous (above 6) shapes in the geometrycollection array in the document. |
Circle |
Intersects when the query polygon intersects the circular region in the document. |
Envelope |
Intersects when the query polygon intersects the area of the rectangular/bounded box region in the document. |
Polygon Contains
Query
A contains
query for polygon returns all the matched documents with shapes that contain the polygon within the query.
A polygon contains
query sample is given below.
{
"query": {
"field": "<<fieldName>>",
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[-114.027099609375, 42.00848901572399],
[-114.04907226562499, 36.99377838872517],
[-109.05029296875, 36.99377838872517],
[-109.05029296875, 40.98819156349393],
[-111.060791015625, 40.98819156349393],
[-111.02783203125, 42.00848901572399],
[-114.027099609375, 42.00848901572399]
]
]
},
"relation": "contains"
}
}
}
Containment rules for the polygon query with other indexed shapes are given below.
Contains (relation) |
|
Point |
NA. Point is a non-closed shape. |
LineString |
NA. Linestring is a non-closed shape. |
Polygon |
Contains when the polygon in the query resides completely within the polygon in the document. |
MultiPoint |
NA. MultiPoint is a non-closed shape. |
MultiLineString |
NA. MultiLineString is a non-closed shape. |
MultiPolygon |
Contains when the polygon in the query resides completely within any of the polygons in the multipolygon array in the document. |
GeometryCollection |
Matches when the query polygon is contained within any of the heterogeneous (above 6) shapes in the geometrycollection array in the document. |
Circle |
Contains when the query polygon resides completely within the circular region in the document. |
Envelope |
Contains when the query polygon resides completely within the rectangular/bounded box region in the document. |
Polygon WithIn
Query
The Within query is not supported by line geometries.
A within
query for polygon returns all the matched documents with shapes that contain the polygon within the query.
A polygon contains
query sample is given below.
{
"query": {
"field": "<<fieldName>>",
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[-114.027099609375, 42.00848901572399],
[-114.04907226562499, 36.99377838872517],
[-109.05029296875, 36.99377838872517],
[-109.05029296875, 40.98819156349393],
[-111.060791015625, 40.98819156349393],
[-111.02783203125, 42.00848901572399],
[-114.027099609375, 42.00848901572399]
]
]
},
"relation": "within"
}
}
}
WithIn rules for the polygon query with other indexed shapes are given below.
Contains (relation) |
|
Point |
Matches when the polygon in the query contains the point in the document including points on the edge or coinciding with the vertices of the polygon. |
LineString |
Matches when the polygon in the query contains both the endpoints of the linestring in the document. |
Polygon |
Matches when the polygon in the query contains the polygon in the document completely. |
MultiPoint |
Matches when the polygon in the query contains every point in the multipoint array in the document. |
MultiLineString |
Matches when the polygon in the query contains every linestring in the multilinestring array in the document. |
MultiPolygon |
Matches when the polygon in the query contains every polygon in the multipolygon array in the document completely. |
GeometryCollection |
Matches when the query polygon contains every heterogeneous (above 6) shapes in the geometrycollection array in the document. |
Circle |
Matches when the polygon in the query contains the circle in the document completely. |
Envelope |
Matches when the polygon in the query contains the rectangle/envelope in the document completely. |
Example Polygon Query (against Points)
It is assumed that you your cluster has 1) a modified travel-sample with GeoJSON data and 2) a Search index as per Creating a GeoJSON Index via the REST API prior to running this example. |
Matches when the polygon in the query contains the point in the document including points on the edge or coinciding with the vertices of the polygon.
The Polygon below is Utah. The results are specified to be sorted on name
. Note type hotel and landmark have a name field and type airport has an airportname field all these values are analyzed as a keyword (exposed as name
).
curl -s -XPOST -H "Content-Type: application/json" \
-u ${CB_USERNAME}:${CB_PASSWORD} http://${CB_HOSTNAME}:8094/api/index/test_geojson/query \
-d '{
"query": {
"field": "geojson",
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[-114.027099609375, 42.00848901572399],
[-114.04907226562499, 36.99377838872517],
[-109.05029296875, 36.99377838872517],
[-109.05029296875, 40.98819156349393],
[-111.060791015625, 40.98819156349393],
[-111.02783203125, 42.00848901572399],
[-114.027099609375, 42.00848901572399]
]
]
},
"relation": "within"
}
},
"size": 5,
"from": 0,
"sort": ["name"]
}' | jq .
The output of five (5) hits (from a total of 18 matching docs) is as follows
{
"status": {
"total": 1,
"failed": 0,
"successful": 1
},
"request": {
"query": {
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[
-114.027099609375,
42.00848901572399
],
[
-114.04907226562499,
36.99377838872517
],
[
-109.05029296875,
36.99377838872517
],
[
-109.05029296875,
40.98819156349393
],
[
-111.060791015625,
40.98819156349393
],
[
-111.02783203125,
42.00848901572399
],
[
-114.027099609375,
42.00848901572399
]
]
]
},
"relation": "within"
},
"field": "geojson"
},
"size": 5,
"from": 0,
"highlight": null,
"fields": null,
"facets": null,
"explain": false,
"sort": [
"name"
],
"includeLocations": false,
"search_after": null,
"search_before": null
},
"hits": [
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_6999",
"score": 0.13231342774148913,
"sort": [
"Brigham City"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7857",
"score": 0.27669394470240527,
"sort": [
"Bryce Canyon"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7074",
"score": 0.13231342774148913,
"sort": [
"Canyonlands Field"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7583",
"score": 0.13231342774148913,
"sort": [
"Carbon County Regional-Buck Davis Field"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_3824",
"score": 0.24860341896785076,
"sort": [
"Cedar City Rgnl"
]
}
],
"total_hits": 18,
"max_score": 0.27669394470240527,
"took": 16364364,
"facets": null
}
Example Polygon Query (against Circles)
It is assumed that you your cluster has 1) a modified travel-sample with GeoJSON data and 2) a Search index as per Creating a GeoJSON Index via the REST API prior to running this example. |
Intersects when the query polygon intersects the circular region in the document.
The Polygon below is Utah. The results are specified to be sorted on name
. Note type hotel and landmark have a name field and type airport has an airportname field all these values are analyzed as a keyword (exposed as name
).
curl -s -XPOST -H "Content-Type: application/json" \
-u ${CB_USERNAME}:${CB_PASSWORD} http://${CB_HOSTNAME}:8094/api/index/test_geojson/query \
-d '{
"query": {
"field": "geoarea",
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[-114.027099609375, 42.00848901572399],
[-114.04907226562499, 36.99377838872517],
[-109.05029296875, 36.99377838872517],
[-109.05029296875, 40.98819156349393],
[-111.060791015625, 40.98819156349393],
[-111.02783203125, 42.00848901572399],
[-114.027099609375, 42.00848901572399]
]
]
},
"relation": "intersects"
}
},
"size": 5,
"from": 0,
"sort": ["name"]
}' | jq .
The output of five (5) hits (from a total of 20 matching docs) is as follows
{
"status": {
"total": 1,
"failed": 0,
"successful": 1
},
"request": {
"query": {
"geometry": {
"shape": {
"type": "Polygon",
"coordinates": [
[
[
-114.027099609375,
42.00848901572399
],
[
-114.04907226562499,
36.99377838872517
],
[
-109.05029296875,
36.99377838872517
],
[
-109.05029296875,
40.98819156349393
],
[
-111.060791015625,
40.98819156349393
],
[
-111.02783203125,
42.00848901572399
],
[
-114.027099609375,
42.00848901572399
]
]
]
},
"relation": "intersects"
},
"field": "geoarea"
},
"size": 5,
"from": 0,
"highlight": null,
"fields": null,
"facets": null,
"explain": false,
"sort": [
"name"
],
"includeLocations": false,
"search_after": null,
"search_before": null
},
"hits": [
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_6999",
"score": 0.07521314153068777,
"sort": [
"Brigham City"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7857",
"score": 0.2608486787753336,
"sort": [
"Bryce Canyon"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7074",
"score": 0.08184801789845488,
"sort": [
"Canyonlands Field"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_7583",
"score": 0.08652876583277351,
"sort": [
"Carbon County Regional-Buck Davis Field"
]
},
{
"index": "test_geojson_3397081757afba65_4c1c5584",
"id": "airport_3824",
"score": 0.4282420802218974,
"sort": [
"Cedar City Rgnl"
]
}
],
"total_hits": 20,
"max_score": 0.5252881608935254,
"took": 12509460,
"facets": null
}