I have a very large set of 2D points:

    numberOf2DPoints = 10^6;
    pointList = RandomReal[{0, 1000}, {numberOf2DPoints, 2}];

I'd like to find a way to quickly generate a distribution I can study for the number of points within a distance $r$ from each point, and then I'd like to select points that have at least a lowerbound $k_a$ and an upperbound $k_b$ number of points within a distance $r$ of themselves.  Is there a way to use a function like `Nearest` to accomplish this?