2012-02-15 129 views
2

我的應用程序使用Google Maps v3創建地圖,該地圖上有很多標記和羣集,並且工作正常。NetworkError:414 Google地圖v3中的請求URI太大

我必須在另一個瀏覽器窗口中顯示相同的地圖,但由於某些原因,它不能(只顯示空白地圖,沒有標記/羣集)。我在Firebug檢查錯誤,並且有一個消息:

NetworkError: 414 Request-URI Too Large

所以 - 同樣的地圖,在第一個瀏覽器窗口中就可以了,在第二個事實並非如此。

只是說我打開第二張地圖(在第二個窗口中),通過發送有關第一張地圖上每個標記的參數,所以URL非常長(2700個字符)。

有沒有辦法解決這個問題?這是一個長URL字符串的問題?

你能幫我嗎?

+0

是的我想象一個「請求 - URI太大」的錯誤是一個長URL的問題(...) – 2012-02-15 00:04:17

+0

在這種情況下我能做些什麼?我需要將所有這些標記的信息發送到另一個瀏覽器窗口。 – user198003 2012-02-15 00:07:30

+0

嘗試將您的請求限制爲2000個字符,方法是刪除位置的某些精度(如果不需要)或在某些情況下對其進行編碼(例如http://code.google.com/apis/中記錄的算法) maps/documentation/utilities/polylinealgorithm.html) – jlivni 2012-02-15 00:10:13

回答

0

問題出在您生成的網址上。谷歌爲傳遞的URL指定了2000個字符的限制,我們應該堅持下去。

我通過在將URL傳遞給Google之前生成哈希值來解決我應用程序中的問題。

1)創建一個數據庫表來存儲你的散列。列可以是散列,參數,時間戳。您可以通過刪除超過特定時間的散列來改進您的代碼,使表格小而快。

2)創建一個代碼(my_google_map_helper/get_hash)來生成要傳遞給Google的散列並將其粘貼到某處。我使用PHP,所以我的代碼是:

// generate my hash 
$hash = sha1(serialize($_GET)); 
// run an insert ignore into my hashes' table 
// get the hash where the hash is $hash 
// print my hash 

3)創建一個代碼(get_kml)從給定的哈希

if(isset($_GET['hash'])): 
    // select params from my hash table where hash = $_GET['hash'] 
    // unserialize the saved params 
    // generate and return my KML file 
endif; 

4檢索保存到數據庫中的PARAMS)更改您的JavaScript這樣它會在調用Google函數之前生成哈希表:

$.get('my_google_map_helper/get_hash?' + MY_LONG_PARAMS_LIST, true) 
    , function(hash){ 
     Polygons = new google.maps.KmlLayer(
      {url:'http://my_url/get_kml?hash=' + hash , map:MAP} 
     ); 
    } 
); 

玩得開心!

相關問題