2012-02-15 105 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} 
     ); 
    } 
); 

玩得开心!

相关问题