#java #android #weather
Добрый день! Подскажите, пожалуйста. Есть список погодных станций с заданными координатами широты и долготы:KJKL KY Julian Carroll Airport 37.6 -83.32 http://weather.noaa.gov/weather/current/KJKL.html http://weather.gov/xml/current_obs/KJKL.rss http://weather.gov/xml/current_obs/KJKL.xml ... и т.д. Их около полтысячи. Как мне определить ближайшую станцию по отношению к Андроид устройству? Я знаю, как сделать парсинг погоды, определить местонахождние для устройства(по формуле), сравнить с конкретной станцией. Но их там полтысячи! То есть нужно автоматически определить ближайшую станцию. KLEX KY Lexington, Blue Grass Airport 38.05 -84.6 http://weather.noaa.gov/weather/current/KLEX.html http://weather.gov/xml/current_obs/KLEX.rss http://weather.gov/xml/current_obs/KLEX.xml
Ответы
Ответ 1
Вам нужно: Получить координаты устройства. Создать список/массив для хранения квадратного корня из суммы квадратов координат каждой станции по обеим осям относительно вашего положения. Отсортируйте полученный список от большего к меньшему. Теперь у вас в списке первый элемент - ближайшая станция.Ответ 2
Давненько я решал очень похожую задачу, на определения ближайшей точки по гео:координатам, относительно своего device, но я находил именно расстояние. Возможно в android есть иные реализации, но я просто не работал в этом направлении а пока вот: class Solution { public static double distance(String longA, String latA, String longB, String latB) // Растояние м-у 2-я точками зная их координаты { double longARad = Double.parseDouble(longA) * Math.PI / 180d; double latARad = Double.parseDouble(latA) * Math.PI / 180d; double longBRad = Double.parseDouble(longB) * Math.PI / 180d; double latBRad = Double.parseDouble(latB) * Math.PI / 180d; double x = (longBRad - longARad) * Math.cos((latARad + latBRad) / 2d); double y = latBRad - latARad; return Math.sqrt(x*x + y*y) * 6371; // Умножаем на ср. показатель радиуса Земли, для перевода в метрическую систему. } public static void main(String args[]) { String bestStation = null; double bestDist = Double.MAX_VALUE; for (int i = 0; i < N; i++) { double distance = distance(longitude1, latitude1, longitude2, latitude2); // используем метод distance if (distance < bestDist) // находим ближайшую станцию { bestDist = distance; bestStation = station[i]; } } System.out.println(bestStation ); } } Я загружал сюда, больше 5000 адресов, причем мне приходилось, ещё форматировать предварительно адрес из БД, так как у меня не было чистых значений как в Вашем примере, а просто String с кучей лишних значений и работало отлично и очень быстро.
Комментариев нет:
Отправить комментарий