Использование Google Weather API с Lat и Lon - как отформатировать?

Я хочу использовать Google Weather API - передавая значения lat и long. Я храню эти значения, однако, похоже, что Google нужны эти значения в другом формате.

т.е. для города Мактавиш у меня есть значения 45,5 и -73,583

Это работает здесь: http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=45.5,-73.583

Но когда я использую эти данные для Google API, они не работают: см.: www.google.com/ig/api?weather=,,,45.5,-73.583

Любая помощь приветствуется. Я бы предпочел использовать данные Google.

4 ответа

ОБНОВЛЕННЫЙ ОТВЕТ: Я только что заметил ДРУГИЕ нарушения в Google Weather API. В ЛЮБОМ случае вам нужно иметь 8 цифр, в дополнение к отрицательному знаку, если это применимо. См. Следующий блок кода (на основе Java) для правильного форматирования. (Не идеальный алгоритм, а просто быстрый пример, чтобы вы могли увидеть результаты)

lat = lat.replace(".", "");
while(lat.length() < 9)
    lat = lat.concat("0");
if(lat.contains("-"))
    lat = lat.substring(0, 9);
else
    lat = lat.substring(0, 8);

ОРИГИНАЛЬНЫЙ ОТВЕТ: Пол, уловка API погоды Google заключается в том, что вы не используете координаты, полученные по традиционной широте / долготе. Вместо этого вы разбираете десятичные точки. Кроме того, "забавная причуда" Google Weather API, по-видимому, является требованием, чтобы данные представляли собой строку из 7-8 цифр. Так, например, 45.5 действительно должно быть 45.50000, а также -73.583 должно быть -73.58300, Эта длина 7-8 цифр, кажется, не включает в себя отрицательный знак (-) перед любыми отрицательными координатами.

Так что ваши 45.5(0000) становится 4550000, и ваш -73.583(00) становится -7358300, Таким образом, окончательный URL будет:

http://www.google.com/ig/api?weather=,,,4550000,-7358300

Обратите внимание, что снова, 7-8 цифр означает 4550000 или же 45500000 было бы приемлемо, как бы -7358300 или же -73583000,

Я узнал о длине 7-8 цифр, только когда увидел твой вопрос - я попытался ввести данные в программу анализа погоды и обнаружил, что 455,-73583 не дает правильных данных.

Обратите внимание, что это мой неофициальный эксперимент, а не официальная документация, поэтому могут быть обнаружены и другие причуды.

Это намного проще - широту и долготу нужно умножить на миллион

По моему мнению, долгота широта должна быть закодирована в формате _e6 (шесть последних цифр должны быть десятичной частью строки lon/lat, передаваемой в API). Затем вы должны отрегулировать первые десятичные числа до длины шесть, вы добавляете 0s если у вас меньше шести знаков после запятой, и вы обрезаете его до 6, если у вас больше. Для части int, если у вас есть только один символ, вы должны сначала добавить ноль, для двух или трех цифр вам ничего не нужно делать.

Примеры:

  • 1.1234 должен быть закодирован как -01123400
  • 112.2345 должен быть закодирован как: 112234500
  • 34.123456 должен быть закодирован как

Здесь у вас есть объяснение с примерами и исходный код php (блог написан на испанском языке).

Как сказал Мигель, последние 6 цифр должны быть десятичными разрядами. Таким образом, правильный код так же прост, как....

string.Format("http://www.google.com/ig/api?weather=,,,{0:0},{1:0}", 
    (latitude * 1000000), 
    (longitude * 1000000));
Другие вопросы по тегам