Definición
$geoIntersectsSelecciona documentos cuyos datos geoespaciales se intersecan con un dato específico. Objeto GeoJSON; es decir, donde la intersección de los datos y el objeto especificado no está vacía.
El operador
$geoIntersectsutiliza el operador$geometrypara especificar el objeto GeoJSON. Para especificar polígonos o multipolígonos GeoJSON utilizando el sistema de referencia de coordenadas (SRC) predeterminado, utilice la siguiente sintaxis:{ <location field>: { $geoIntersects: { $geometry: { type: "<GeoJSON object type>" , coordinates: [ <coordinates> ] } } } } Para las consultas que especifican geometrías GeoJSON con áreas mayores a un solo hemisferio, el uso del CRS predeterminado da como resultado consultas para las geometrías
$geoIntersectscomplementarias.Una geometría complementaria es la menor de dos. Si una geometría específica abarca más de un hemisferio, la consulta CRS predeterminada devuelve los documentos correspondientes.
Por ejemplo, si define una geometría como un área que cubre el 75% de la superficie terrestre, CRS utiliza el 25% restante como área complementaria. La consulta devuelve resultados de esa área complementaria menor (25%) en lugar del 75% mayor.
La sección Ejemplos de esta página muestra cómo especificar áreas más pequeñas y más grandes.
Para especificar un polígono GeoJSON de un solo anillo con un CRS MongoDB personalizado, utilice el siguiente prototipo que especifica el CRS MongoDB personalizado en la
$geometryexpresión:{ <location field>: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ <coordinates> ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } El CRS personalizado de MongoDB utiliza un orden de giro en sentido antihorario y permite que admita
$geoIntersectsconsultas con un polígono GeoJSON de un solo anillo cuya área sea mayor o igual a un hemisferio. Si el polígono especificado es menor que un hemisferio, el comportamiento de$geoIntersectscon el CRS de MongoDB es el mismo que con el CRS predeterminado. Consulte también Polígonos "Grandes".Importante
Si especifica coordenadas de longitud y latitud, enumera primero la longitud y luego la latitud.
Los valores de longitud válidos están entre
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Comportamiento
Índices geoespaciales
$geoIntersects utiliza$geoIntersects geometría esférica. no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejorará el rendimiento de las consultas. Solo el índice geoespacial 2dsphere $geoIntersects admite.
Geometría degenerada
$geoIntersects no garantiza que considerará que un polígono se interseca con sus propios bordes; sus propios vértices; u otro polígono que comparte vértices o bordes pero ningún espacio interior.
Polígonos "grandes"
Para$geoIntersects, si especifica un polígono de un solo anillo con un área mayor que un hemisferio, incluya la expresiónthe
custom MongoDB coordinate reference system in the $geometry; de lo contrario, $geoIntersectsconsulta la geometría complementaria. Para todos los demás polígonos GeoJSON con áreas mayores que un hemisferio, $geoIntersectsconsulta la geometría complementaria.
Ejemplos
Interseca un polígono
El siguiente ejemplo usa para seleccionar todos $geoIntersects los loc datos que intersecan con el definido por Polygon la coordinates matriz. El área del polígono es menor que el área de un hemisferio:
db.places.find( { loc: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] } } } } )
Para polígonos de un solo anillo con áreas mayores que un solo hemisferio, consulte Interseca un polígono "grande".
Interseca un polígono "grande"
Para consultar un polígono GeoJSON de un solo anillo cuya área sea mayor que un hemisferio, la expresión debe especificar el sistema de referencia de coordenadas MongoDB personalizado. Por $geometry ejemplo:
db.places.find( { loc: { $geoIntersects: { $geometry: { type : "Polygon", coordinates: [ [ [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ] ] ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } )