Грубая сила: предварительно загрузите все ваши данные в массив. Вычислите расстояние между вашей текущей точкой и каждой точкой в массиве (есть метод для этого вычисления, который использует линейную алгебру вместо функций триггера, но я не помню, что это не так), чтобы найти ближайшую точку.
Пожалуйста, прочитайте это перед повторным голосованием : есть способы ускорить поиск грубой силы, как это, но я обнаружил, что они обычно не стоят проблем. Мало того, что я использовал этот подход прежде, чтобы найти ближайший почтовый индекс по широте / долготе, я использовал его в приложении для Windows Mobile (где вычислительная мощность не слишком велика) и все еще достигал времени поиска менее секунды. Пока вы избегаете использования триггерных функций, это не дорогой процесс.
Обновление: вы можете ускорить время поиска, распределяя данные почтового индекса в субрегионы (например, квадранты, например, северо-запад, юго-восток и т. Д.) И сохраняя идентификатор региона для каждой точки данных. Затем в поиске вы сначала определяете, в каком регионе находится ваше текущее местоположение, и сравниваете только эти точки данных.
Чтобы избежать граничных ошибок (например, когда ваше текущее местоположение находится вблизи края его региона, но на самом деле находится ближе всего к молнии в соседнем регионе), ваши регионы должны в некоторой степени перекрываться. Это означает, что некоторые из ваших zip-записей будут продублированы, поэтому ваш общий набор данных будет немного больше.