Использование Google Weather API с Lat и Lon - как отформатировать? - PullRequest
5 голосов
/ 06 мая 2010

Я хочу использовать 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 ]

5 голосов
/ 11 мая 2010

ОБНОВЛЕННЫЙ ОТВЕТ: Я только что заметил ДРУГИЕ нарушения в 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);

ОРИГИНАЛЬНЫЙ ОТВЕТ: Пол, уловка Google API в том, что вы не используете координаты, полученные по традиционной широте / долготе. Вместо этого вы разбираете десятичные точки. Кроме того, "забавная причуда" 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 не дает правильных данных.

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

4 голосов
/ 15 июня 2010

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

2 голосов
/ 20 сентября 2011

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

Примеры:

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

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

0 голосов
/ 14 июля 2012

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

string.Format("http://www.google.com/ig/api?weather=,,,{0:0},{1:0}", 
    (latitude * 1000000), 
    (longitude * 1000000));
...