Attempt to fix NEARBY to filter prior to limiting.

This commit is contained in:
Alex Roitman 2017-10-30 16:01:37 -07:00
parent 8b06aedf73
commit 4eca0cdee7
1 changed files with 5 additions and 11 deletions

View File

@ -352,20 +352,14 @@ type iterItem struct {
}
func nearestNeighbors(sw *scanWriter, lat, lon float64, iter func(id string, o geojson.Object, fields []float64, dist *float64) bool) {
limit := sw.limit * 10
if limit > limitItems*10 {
limit = limitItems * 10
}
k := sw.cursor + limit
limit := int(sw.limit)
var items []iterItem
sw.col.NearestNeighbors(lat, lon, func(id string, o geojson.Object, fields []float64) bool {
if k == 0 {
return false
if _, ok := sw.fieldMatch(fields, o); ok {
dist := o.CalculatedPoint().DistanceTo(geojson.Position{X: lon, Y: lat, Z: 0})
items = append(items, iterItem{id: id, o: o, fields: fields, dist: dist})
}
dist := o.CalculatedPoint().DistanceTo(geojson.Position{X: lon, Y: lat, Z: 0})
items = append(items, iterItem{id: id, o: o, fields: fields, dist: dist})
k--
return true
return len(items) < limit
})
sort.Slice(items, func(i, j int) bool {
return items[i].dist < items[j].dist