# Find closest points using S2, given point and radius

I'm trying to use the go s2 package to find closest points, given a point and a radius (meters). I'm modeling my alg. after dynamodb-geo.js as I'm storing my points in DyanmoDB.

I can't seem to get a non-empty list of covering cells (`coveringCells := rc.Covering(r)` below).

What am I doing wrong in my algorithm? Is there an easier way to achieve this?

I think I could use RectFromCenterSize() to compute the rect given a center lat/lng and a radius - but I'm not quite sure how to compute the `size` param for this method.

``````// Query a circular area constructed by a center point and its radius.
// @see https://github.com/rh389/dynamodb-geo.js/blob/6c388b9070014a096885e00fff6c3fc933d9853f/src/GeoDataManager.ts#L229

// Step1: Get the bounding region (rectangle) from the center and the radius
// @see https://github.com/rh389/dynamodb-geo.js/blob/6c388b9070014a096885e00fff6c3fc933d9853f/src/s2/S2Util.ts#L23
centerLatLng := s2.LatLngFromDegrees(lat, lng)

latReferenceUnit := 1.0
if lat > 0.0 {
latReferenceUnit = -1.0
}
latReferenceLatLng := s2.LatLngFromDegrees(lat+latReferenceUnit, lng)

lngReferenceUnit := 1.0
if lng > 0.0 {
lngReferenceUnit = -1.0
}
lngReferenceLatLng := s2.LatLngFromDegrees(lat, lng+lngReferenceUnit)

boundingRect := s2.RectFromLatLng(minLatLng)

// Step2: Compute the CellIDs for the region we want to cover.
// defaults per https://github.com/vekexasia/nodes2-ts/blob/1952d8c1f6cb4a862731ace2d5f74d472ec22e55/src/S2RegionCoverer.ts#L101
rc := &s2.RegionCoverer{MaxLevel: 30, MaxCells: 8, LevelMod: 1}
r := s2.Region(boundingRect.CapBound())
coveringCells := rc.Covering(r)

for _, c := range coveringCells {
log.WithFields(log.Fields{
"Covering Cell": c,
}).Info("=>")
}

return nil
}
``````