Возможно, более эффективным / чистым способом было бы найти ограничивающий прямоугольник города, который представляет собой прямоугольник, каждый край которого является крайними кардинальными точками между пограничными точками города, если вы можете их найти и затем заполняя их итеративно. Но это в основном то, что вы уже делаете, в любом случае.
Что касается плотности мест, у вас есть определенный API, с которым вы собираетесь его использовать? Если вы знаете «досягаемость» точек вашего API при обнаружении мест, вам когда-либо нужно иметь только точки сетки, максимально близкие к их радиусу.
Учитывая вышесказанное, возможно, вы рассматривали вопрос о том, поддерживает ли API непосредственно поиск мест в пределах границы ? Это может быть вашей лучшей и самой чистой ставкой.
После прочтения вашего комментария, вот, возможно, неэффективный способ, который я собираюсь обдумать и уточнить в будущем, но он может помочь вам начать.
Поместите точку в центре вашего города и наблюдайте за всеми обнаруженными местоположениями. Найдите выпуклый корпус вашего местоположения и поместите новую точку в каждом месте на выпуклом корпусе. Затем добавьте в свой список местоположений все местоположения, которые находятся в пределах досягаемости этих вновь добавленных точек.
Затем найдите выпуклую оболочку и повторите тот же процесс.
Это может на самом деле уменьшить количество баллов за малонаселенные города. Для плотных это может быть меньше, чем оптимально, но это может помочь вам начать работу.