1
0
Fork 0

add within to geoindex iterator

This commit is contained in:
Jan Christoph Uhde 2016-11-30 15:44:46 +01:00
parent 80c89d5f97
commit 972af3af4c
2 changed files with 11 additions and 5 deletions

View File

@ -41,6 +41,7 @@ GeoIndexIterator::GeoIndexIterator(LogicalCollection* collection,
: IndexIterator(collection, trx, mmdr, index), : IndexIterator(collection, trx, mmdr, index),
_index(index), _index(index),
_cursor(nullptr), _cursor(nullptr),
_coor(),
_condition(cond), _condition(cond),
_variable(var), _variable(var),
_lat(0), _lat(0),
@ -93,8 +94,10 @@ IndexLookupResult GeoIndexIterator::next() {
auto coords = std::unique_ptr<GeoCoordinates>(::GeoIndex_ReadCursor(_cursor,1)); auto coords = std::unique_ptr<GeoCoordinates>(::GeoIndex_ReadCursor(_cursor,1));
if(coords && coords->length){ if(coords && coords->length){
auto revision = ::GeoIndex::toRevision(coords->coordinates[0].data); if(_near || GeoIndex_distance(&_coor, &coords->coordinates[0]) <= _withinRange ){
return IndexLookupResult{revision}; auto revision = ::GeoIndex::toRevision(coords->coordinates[0].data);
return IndexLookupResult{revision};
}
} }
// if there are no more results we return the default constructed IndexLookupResult // if there are no more results we return the default constructed IndexLookupResult
return IndexLookupResult{}; return IndexLookupResult{};
@ -114,7 +117,9 @@ void GeoIndexIterator::nextBabies(std::vector<IndexLookupResult>& result, size_t
} }
for(std::size_t index = 0; index < length; ++index){ for(std::size_t index = 0; index < length; ++index){
result.emplace_back(IndexLookupResult(::GeoIndex::toRevision(coords->coordinates[index].data))); while (_near || GeoIndex_distance(&_coor, &coords->coordinates[index]) <= _withinRange ){
result.emplace_back(IndexLookupResult(::GeoIndex::toRevision(coords->coordinates[index].data)));
}
} }
} }
} }
@ -128,8 +133,8 @@ void GeoIndexIterator::nextBabies(std::vector<IndexLookupResult>& result, size_t
} }
::GeoCursor* GeoIndexIterator::createCursor(double lat, double lon){ ::GeoCursor* GeoIndexIterator::createCursor(double lat, double lon){
::GeoCoordinate coor{lat, lon, 0}; _coor = GeoCoordinate{lat, lon, 0};
return replaceCursor(::GeoIndex_NewCursor(_index->_geoIndex, &coor)); return replaceCursor(::GeoIndex_NewCursor(_index->_geoIndex, &_coor));
} }
/// @brief creates an IndexIterator for the given Condition /// @brief creates an IndexIterator for the given Condition

View File

@ -69,6 +69,7 @@ class GeoIndexIterator final : public IndexIterator {
GeoIndex const* _index; GeoIndex const* _index;
::GeoCursor* _cursor; ::GeoCursor* _cursor;
::GeoCoordinate _coor;
arangodb::aql::AstNode const* _condition; arangodb::aql::AstNode const* _condition;
arangodb::aql::Variable const* _variable; arangodb::aql::Variable const* _variable;
double _lat; double _lat;