5

我想使用 Google Weather API - 通过传递 lat 和 long 值。我正在存储这些值,但 Google 似乎需要不同格式的这些值。

即对于 McTavish 镇,我的值为 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

任何帮助表示赞赏。我更喜欢使用谷歌数据。

4

4 回答 4

5

更新答案:我刚刚注意到 Google 天气 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 的诀窍是您不使用传统纬度/经度接收到的坐标。相反,您解析出小数点。此外,谷歌天气 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 位数字意味着455000045500000可以接受,就像-7358300或一样-73583000

当我看到你的问题时,我才发现 7-8 位数的长度——我尝试将数据输入到我的天气解析程序中,发现455,-73583并没有产生正确的数据。

请注意,这是我的非官方实验,而不是官方文档,因此可能还有其他怪癖有待发现。

于 2010-05-11T18:21:17.137 回答
4

它更简单 - 纬度和经度应该乘以一百万

于 2010-06-15T15:21:25.153 回答
2

在我看来,经度和纬度必须以 _e6 格式编码(最后六位必须是传递给 API 的 lon/lat 字符串的小数部分)。然后你必须将第一个小数的长度调整为六,0如果你的小数少于六,你添加 s,如果你有更多,你将它剪裁为 6。对于 int 部分,如果您只有一个字符,则必须先添加一个零,对于两位或三位数字,您无需执行任何操作。

例子:

  • 1.1234 必须编码为:-01123400
  • 112.2345 必须编码为:112234500
  • 34.123456 必须编码为

在这里,您有一个带有示例的解释和一个 php 源代码(该博客是用西班牙语编写的)。

于 2011-09-20T15:52:32.397 回答
0

正如米格尔所说,最后 6 位数字应该是小数位。所以正确的代码很简单......

string.Format("http://www.google.com/ig/api?weather=,,,{0:0},{1:0}", 
    (latitude * 1000000), 
    (longitude * 1000000));
于 2012-07-14T07:24:41.130 回答