Merge pull request #231 from rshura/try_nearby_fix

Fix NEARBY to filter where clauses prior to limiting.
This commit is contained in:
Josh Baker 2017-11-10 13:15:28 -07:00 committed by GitHub
commit f99273c4c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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) { func nearestNeighbors(sw *scanWriter, lat, lon float64, iter func(id string, o geojson.Object, fields []float64, dist *float64) bool) {
limit := sw.limit * 10 limit := int(sw.cursor + sw.limit)
if limit > limitItems*10 {
limit = limitItems * 10
}
k := sw.cursor + limit
var items []iterItem var items []iterItem
sw.col.NearestNeighbors(lat, lon, func(id string, o geojson.Object, fields []float64) bool { sw.col.NearestNeighbors(lat, lon, func(id string, o geojson.Object, fields []float64) bool {
if k == 0 { if _, ok := sw.fieldMatch(fields, o); ok {
return false 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}) return len(items) < limit
items = append(items, iterItem{id: id, o: o, fields: fields, dist: dist})
k--
return true
}) })
sort.Slice(items, func(i, j int) bool { sort.Slice(items, func(i, j int) bool {
return items[i].dist < items[j].dist return items[i].dist < items[j].dist