So, sounds like there are two problems here - calculating the grid in a reasonable way, and moving the objects around the player while the player traverses some limited grid space.
Perhaps you could do something I did for my star generator and have a "walking grid" where it quantizes the viewer position, iterates across a fixed sized grid of that position, and keeps track of a set of positions that either fall inside or outside of the current grid.
When points are no longer in the radius, discard them from that set, and, using the point's position value as an index of some sort (C# dictionary for instance), unload the corresponding items. When a new point is added, call the load function for that position, and add the position to the same tracking set mentioned earlier.
The actual logic for doing this can be a bit complicated, but it ensures that all you are ever running is load/unload functions for positions that have had a state change of some sort.
Because it sounds like you are also wanting the player to stay centered with objects moving around you, I would recommend keeping some sort of "global position" (I use the Unity.Mathematics double3 class for such things, basically universally, not to mention int3 for grids and the like) that you use for tracking grid positions, and keep the "real position" (aka, in-engine coordinates) relative to that global position.
Quantizing the player position is a good way to do that sort of floating-origin approach, also. You can just map the position to an arbitrarily sized grid and, if the grid changes, offset all relevant objects by the appropriate amount to put them on the opposite side of the grid cell.
Some faux-C#:
GridPosition newGridPosition = RoundToGrid(realPosition);
if (newGridPosition != oldGridPosition)
{
GridPosition gridDelta = newGridPosition - oldGridPosition;
RealPosition realDelta = new Vector(gridDelta.x * gridSize, gridDelta.y * gridSize);
foreach(Thing t in allThings)
{
t.position -= realDelta;
}
oldGridPosition = newGridPosition;
}
You can also do it by way of measuring the player's distance from an arbitrary point and calculating the deltas from that, but by doing it on a grid like this, you could easily pair it with the other grid-based function I mentioned, only ever having to run that test when the player's grid position changes, so you don't waste time running the check a thousand times for the same grid cell.