Brutalna siła: wstępne załadowanie wszystkich danych do tablicy. Oblicz odległość między twoim bieżącym punktem a każdym punktem w tablicy (istnieje metoda wykonania tego obliczenia, która używa algebry liniowej zamiast funkcji triggera, ale nie pamiętam, co to jest offhand), aby znaleźć najbliższy punkt.
Przeczytaj to przed głosowaniem w dół:: istnieją sposoby na przyspieszenie wyszukiwania w trybie brute force, ale okazało się, że zazwyczaj nie są one warte problemów. Nie tylko wykorzystałem to podejście wcześniej, aby znaleźć najbliższy zip z szerokości/długości geograficznej, użyłem go w aplikacji Windows Mobile (gdzie moc obliczeniowa nie jest dokładnie przytłaczająca) i wciąż osiągnięto podsekundowe czasy wyszukiwania. Tak długo, jak unikasz używania funkcji trygonometrycznych, nie jest to kosztowny proces.
Aktualizacja: można przyspieszyć czas wyszukiwania, przypisując dane zip do podregionów (kwadraty, na przykład północny zachód, południowy-wschód itd.) I zapisując identyfikator regionu dla każdego punktu danych. W wyszukiwaniu najpierw należy określić region, w którym znajduje się bieżąca lokalizacja, i porównać tylko z tymi punktami danych.
Aby uniknąć błędów brzegowych (np. Gdy bieżąca lokalizacja znajduje się blisko krawędzi regionu, ale jest najbardziej zbliżona do zip w sąsiednim regionie), twoje regiony powinny w pewnym stopniu się pokrywać. Oznacza to, że niektóre z twoich rekordów zip zostaną zduplikowane, więc Twój ogólny zbiór danych będzie nieco większy.
Mam dane miasta, stanu, zip, lat, lng, ale nadal potrzebowałbym algorytmu do dopasowania dowolnego l/lng do miasta szafy. –
Edytowałbym twój komentarz na samym pytaniu. Wszyscy tutaj (włącznie z mną) zakładali, że szukasz źródła danych, a nie algorytmu wyszukiwania. – MusiGenesis
Brak usług internetowych ... każde trafienie do usługi internetowej spowoduje dodanie co najmniej 300-400 milisekund dla każdego żądania, jeśli usługa jest niezawodna. –