2010-05-06 50 views
5

我想要使用Google Weather API--通過傳遞經緯度值。我存儲這些值,但Google似乎需要不同格式的這些值。在經緯度和經度上使用Google Weather API - 如何格式化?

即對於McTavish鎮我有45.5和-73.583

值。這在這裏工作:http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=45.5,-73.583

但是當我使用這些數據,谷歌API,這是行不通的:請參閱:WWW。 google.com/ig/api?weather=,,,45.5,-73.583

任何幫助表示讚賞。我寧願使用Google數據。

+0

** Google天氣API在2012年被關閉** - > http://stackoverflow.com/questions/12145820/google-weather-api -gone/35943521 – 2016-03-11 15:58:03

回答

5

更新回答: 我剛剛注意到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的Weather API的「有趣的怪癖」似乎是要求數據以7到8位字符串的形式出現。因此,例如,45. 5應該確實是45.50000,而-73.583應該確實是-73.58300。 7-8位數字的長度似乎不包括任何負座標前面的負號(-)。

因此,您的45.5(0000)變爲4550000,並且您的-73.583(00)變爲-7358300。所以最終的網址是:

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

注意再次,7-8位數表示455000045500000是可以接受的,因爲會-7358300-73583000

當我看到您的問題時,我只發現了有關7-8位數字的長度 - 我嘗試將數據輸入到我的天氣分析程序中,發現455,-73583未產生正確的數據。

請注意,這是由我的非官方實驗,而不是官方文件,所以可能會發現其他怪癖。

+1

正確格式的JavaScript版本:'lat.replace('。',''); while(lat.length <9){lat = lat.concat('0'); } lat = lat.indexOf(' - ')!== -1? lat.substr(0,9):lat.substring(0,8);' – Voles 2011-09-24 20:04:36

+1

這是不正確的。米格爾佩雷斯Subias已經給出了正確的答案。最後6位數應該是小數位。這導致現場。如果座標的精度超過六位數字,則可以將小數點去掉並填充到右邊。 – 2012-07-14 07:13:34

4

這是簡單得多 - 緯度&經度應該一百萬

+0

這不起作用。 – mattbasta 2012-08-21 03:21:28

2

在我看來經度的緯度必須_e6格式進行編碼相乘(SIX最後數字必須傳遞到經度/緯度字符串的小數部分API)。然後,您必須將第一位小數調整爲6,如果小於6位小數,則添加0,如果您有更多,則將其剪輯爲6。對於int部分,如果只有一個字符,則必須先添加一個零,對於兩位或三位數字,則不需要執行任何操作。

實例:

  • 1.1234必須被編碼爲:-01123400
  • 112。2345必須被編碼爲:112234500
  • 34.123456必須被編碼爲

Here you have a explanation with examples and a the php source code(博客是寫在西班牙語)。

0

正如Miguel所說,它是最後的6位數應該是小數位。所以正確的代碼就像......

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