--- layout: default description: It is recommended to use AQL instead, see Geo functions --- Geo Queries =========== {% hint 'warning' %} It is recommended to use AQL instead, see [**Geo functions**](aql/functions-geo.html). {% 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: - [AQL Geo functions](aql/functions-geo.html) - [Geo-Spatial indexes](indexing-geo.html)