2012-02-15 6 views
2

私のアプリケーションは、マーカとクラスタがたくさんあるGoogle Maps v3を使用してマップを作成し、正常に動作します。NetworkError:414 Request-URIがGoogle Maps v3より大きいRequest-URI

同じマップ私は別のブラウザウィンドウでも表示する必要がありますが、何らかの理由でそれを表示できません(マーカー/クラスタがない空のマップしか表示されません)。第二に、それはないです、大丈夫です最初のブラウザウィンドウに、同じマップ -

NetworkError: 414 Request-URI Too Large

だから、私はFirebugの中でエラーをチェックし、メッセージがあります。

私は最初のマップ上にあるすべてのマーカーに関するパラメータを送信して2番目のマップ(2番目のウィンドウ)を開きますので、URLは非常に長く(2700文字)です。

これを解決する方法はありますか?長いURL文字列に問題はありますか?

これを手伝ってもらえますか?

+0

はい「Request-URI Too Large」というエラーは長いURL(...)に問題があると思います –

+0

この場合、私は何ができますか?これらのマーカーのすべてに関する情報を別のブラウザウィンドウに送信する必要があります。 – user198003

+0

必要がない場合は場所の正確性の一部を削除するか、言い方によってはエンコードすることでリクエストを2000文字に制限してみてください(http://code.google.com/apis/に記載されているアルゴリズムなど)。 maps/documentation/utilities/polylinealgorithm.html) – jlivni

答えて

0

生成したURLに問題があります。 Googleは、渡されたURLの文字数を2000文字に制限しており、それに固執する必要があります。

Googleのアプリケーションに渡す前に、URLのハッシュを生成して問題を解決しました。

1)ハッシュを格納するデータベーステーブルを作成します。列には、ハッシュ、パラメータ、タイムスタンプを使用できます。特定の時間より古いハッシュを削除して、テーブルを小さくして速く保つことで、コードを改善できます。

2)Googleに渡すハッシュを生成し、どこかに貼り付けるコード(my_google_map_helper/get_hash)を作成します。私は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)指定されたハッシュ

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を取得するためのコード(get_kml)を作成します)ので、あなたの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} 
     ); 
    } 
); 

楽しくお楽しみください!

関連する問題