Использование 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). Затем вы должны отрегулировать первые десятичные числа до длины шесть, вы добавляете 0
s если у вас меньше шести знаков после запятой, и вы обрезаете его до 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));