Consultas Geográficas con MongoDb

A continuación, se va a mostrar cómo realizar una consulta geográfica sobre una ontología dentro de Onesait Platform. Para ello, en primer lugar, debe existir una ontología con un campo de tipo Geometry-point donde se almacene la ubicación. Para este ejemplo se ha creado una ontología denominada pubsOntology donde se va a almacenar la ubicación de diferentes bares en el campo location.

Para consultar cuál es el bar más cercano a una ubicación en concreto el primer paso sería indicar a MongoDb que el campo donde se está almacenando la ubicación (en este caso location) sigue la estructura GeoJSON. Esto se consigue invocando el comando createIndex() sobre el campo donde se esté almacenando la ubicación, y que se ha definido previamente como tipo Geometry-point.

El siguiente paso sería formular una query de tipo find donde se indique que se quiere conocer el punto más cercano a una ubicación en concreto. En la siguiente imagen se ha representado (a partir de un visor creado desde plataforma) los tres pubs que hay registrados (pub01, pub02, pub03), y en un circulo los puntos donde se va a consultar el pub más cercano.

En el caso del circulo número uno la consulta sería:

db.pubsOntology.find({ 'pubsOntology.location': {$near: {$geometry: {type: "Point",coordinates:[-1.130500,37.987087]},}}})

El resultado es un listado de bares ordenado de mayor cercanía a menor:

 

Como era de esperar, el pub más cercano sería el Pub02, seguido del Pub01, y el Pub03. Si ahora cambiamos la ubicación de la consulta al punto 2 el resultado será diferente:

Como se puede observar, en este caso el pub más cercano sería el Pub03.