Зависит от количества городов в вашей базе данных. Если это много, то вы можете использовать методы предварительного сокращения, чтобы ограничить область поиска, например, использовать предварительно рассчитанные «зоны» или ограничить поиск «городами размером X или больше» и т. Д. Поскольку города не перемещаются и численность и численность не меняются внезапно, подумайте, как вы можете выполнить как можно больше предварительных расчетов.
Еще одна распространенная техника - наличие отдельной таблицы «рядом» с расстояниями от одного города до ближайших. Поэтому все, что вам нужно сделать, это найти ближайший город к вашей текущей позиции и просто показать города, которые находятся ближе всего к этому городу.
Еще один прием, достойный подражания, - это UITableView, где он извлекает информацию по требованию, поэтому в любой момент времени нужно вычислить только количество видимых ячеек. Поэтому вместо того, чтобы получать данные о каждом городе, который находится поблизости, просто попытайтесь ограничить вид 5-6, которые видны на первом экране, и, если вы разрешаете прокрутку, выбирайте остальное, когда пользователь перемещается вверх и вниз.
В связанной заметке ниже приведен список формул для расчета расстояний между геоинформациями: http://www.movable -type.co.uk / scripts / latlong.html