Грубая сила: предварительно загрузите все свои данные в массив. Вычислите расстояние между вашей текущей точкой и каждой точкой в массиве (есть способ сделать этот расчет, который использует линейную алгебру вместо триггерных функций, но я не помню, что это не так), чтобы найти ближайшую точку.
Прочтите это до голосования: есть способы ускорить поиск грубой силы, как это, но я обнаружил, что они обычно не стоят проблем. Я не только использовал этот подход раньше, чтобы найти ближайший zip с широты/долготы, я использовал его в приложении Windows Mobile (где мощность обработки не совсем подавляющая) и все еще достигла секунд второго времени поиска. Пока вы избегаете использования триггерных функций, это не дорогостоящий процесс.
Обновление: вы можете ускорить время поиска, распределив данные вашего почтового индекса в субрегионы (например, квадранты, например, северо-запад, юго-восток и т. Д.) И сохраняя идентификатор региона с каждой точкой данных. В этом случае сначала вы определяете, в каком регионе находится ваше текущее местоположение, и сравнивайте только с этими точками данных.
Чтобы избежать ошибок в границах (например, когда ваше текущее местоположение находится вблизи края его области, но на самом деле оно ближе всего к zip-соседству), ваши регионы должны частично перекрываться. Это означает, что некоторые ваши zip-записи будут дублированы, поэтому ваш общий набор данных будет немного больше.
У меня есть данные города, штата, zip, lat, lng, но мне все равно нужен алгоритм для соответствия любому lat/lng в городском шкафу. –
Я бы отредактировал ваш комментарий в самом вопросе. Все здесь (включая меня) предполагали, что вы ищете источник данных, а не алгоритм поиска. – MusiGenesis
НЕТ веб-сервисов ... любое попадание в веб-службу добавит не менее 300-400 миллисекунд к каждому запросу, если служба будет повышена и надежна. –