2.2 KiB
layout | description |
---|---|
default | It is recommended to use AQL instead, see Geo functions |
Geo Queries
{% hint 'warning' %} It is recommended to use AQL instead, see Geo functions. {% endhint %}
The ArangoDB allows to select documents based on geographic coordinates. In order for this to work, a geo-spatial index must be defined. This index will use a very elaborate algorithm to lookup neighbors that is a magnitude faster than a simple R* index.
In general a geo coordinate is a pair of latitude and longitude, which must both be specified as numbers. A geo index can be created on coordinates that are stored in a single list attribute with two elements like [-10, +30] (latitude first, followed by longitude) or on coordinates stored in two separate attributes.
For example, to index the following documents, an index can be created on the position attribute of the documents:
db.test.save({ position: [ -10, 30 ] });
db.test.save({ position: [ 10, 45.5 ] });
db.test.ensureIndex({ type: "geo", fields: [ "position" ] });
If coordinates are stored in two distinct attributes, the index must be created on the two attributes:
db.test.save({ latitude: -10, longitude: 30 });
db.test.save({ latitude: 10, longitude: 45.5 });
db.test.ensureIndex({ type: "geo", fields: [ "latitude", "longitude" ] });
In order to find all documents within a given radius around a coordinate use the within operator. In order to find all documents near a given document use the near operator.
It is possible to define more than one geo-spatial index per collection. In this case you must give a hint using the geo operator which of indexes should be used in a query.
Near
{% docublock collectionNear %}
Within
{% docublock collectionWithin %}
Geo
{% docublock collectionGeo %}
Related topics
Other ArangoDB geographic features are described in: