diff --git a/controller/search.go b/controller/search.go index 59b3a5b3..8fed5ce8 100644 --- a/controller/search.go +++ b/controller/search.go @@ -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