NetworkError:使用Google Maps v3 414请求URI太大

时间:2012-02-15 00:02:02

标签: google-maps google-maps-api-3

我的应用程序使用Google Maps v3创建地图,其中包含大量标记和群集,并且工作正常。

我必须在另一个浏览器窗口中显示相同的地图,但由于某种原因它不能(只获取空地图,没有标记/群集)。我检查了Firebug中的错误,并且有一条消息:

  

NetworkError:414 Request-URI Too Large

所以 - 相同的地图,在第一个浏览器窗口中是可以的,其次是不是。

只是说我打开第二张地图(在第二个窗口中),通过发送关于我在第一张地图上的每个标记的参数,所以URL非常长(2700个字符)。

有什么方法可以解决这个问题吗?这是长网址字符串的问题吗?

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

问题出在您生成的网址中。 Google为传递的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)更改您的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}
        );
    }
);

玩得开心!