Services or capabilities described in Amazon Web Services documentation might vary by Region. To see the differences applicable to the China Regions,
see Getting Started with Amazon Web Services in China
(PDF).
$geoIntersects
The $geoIntersects operator in Amazon DocumentDB is used to find documents whose geospatial data intersects with a specified GeoJSON object. This operator is useful for applications that require identifying documents based on their spatial relationship with a given geographic shape, such as a polygon or multipolygon.
Parameters
-
$geometry: A GeoJSON object that represents the shape to check for intersection. The supported GeoJSON object types are Point, LineString, Polygon, and MultiPolygon.
Example (MongoDB Shell)
The following example demonstrates how to use the $geoIntersects operator to find the state name for a given set of coordinates in Amazon DocumentDB.
Create sample documents
db.states.insertMany([
{
"name": "New York",
"loc": {
"type": "Polygon",
"coordinates": [[
[-74.25909423828125, 40.47556838210948],
[-73.70819091796875, 40.47556838210948],
[-73.70819091796875, 41.31342607582222],
[-74.25909423828125, 41.31342607582222],
[-74.25909423828125, 40.47556838210948]
]]
}
},
{
"name": "California",
"loc": {
"type": "Polygon",
"coordinates": [[
[-124.4091796875, 32.56456771381587],
[-114.5458984375, 32.56456771381587],
[-114.5458984375, 42.00964153424558],
[-124.4091796875, 42.00964153424558],
[-124.4091796875, 32.56456771381587]
]]
}
}
]);
Query example
var location = [-73.965355, 40.782865];
db.states.find({
"loc": {
"$geoIntersects": {
"$geometry": {
"type": "Point",
"coordinates": location
}
}
}
}, {
"name": 1
});
Output
{ "_id" : ObjectId("536b0a143004b15885c91a2c"), "name" : "New York" }
Code examples
To view a code example for using the $geoIntersects command, choose the tab for the language that you want to use:
- Node.js
-
const { MongoClient } = require('mongodb');
async function findStateByGeoIntersects(longitude, latitude) {
const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
const db = client.db('test');
const collection = db.collection('states');
const query = {
loc: {
$geoIntersects: {
$geometry: {
type: 'Point',
coordinates: [longitude, latitude]
}
}
}
};
const projection = {
_id: 0,
name: 1
};
const document = await collection.findOne(query, { projection });
await client.close();
if (document) {
return document.name;
} else {
throw new Error('The geo location you entered was not found in the United States!');
}
}
- Python
-
from pymongo import MongoClient
def find_state_by_geointersects(longitude, latitude):
try:
client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client.test
collection_states = db.states
query_geointersects = {
"loc": {
"$geoIntersects": {
"$geometry": {
"type": "Point",
"coordinates": [longitude, latitude]
}
}
}
}
document = collection_states.find_one(query_geointersects,
projection={
"_id": 0,
"name": 1
})
if document is not None:
state_name = document['name']
return state_name
else:
raise Exception("The geo location you entered was not found in the United States!")
except Exception as e:
print('Exception in geoIntersects: {}'.format(e))
raise
finally:
if client is not None:
client.close()