2

設定

南アフリカのすべての州のポリゴン マップがあります。

これは、次のように v3 Google マップに取り込まFusionTablesLayerれます。

// The Google Map object
map =  new google.maps.Map( mapCanvas, mapOptions );

// The FusionTables layer
layer['provinces'] = new google.maps.FusionTablesLayer({
    query: {
        select: '*',
        from: '16L-UK_1OZxGw6DlKR8V8yP4XZrtmNdOMugRRNrQ'
    },
    clickable: true,
    suppressInfoWindows: true // Hide the default FusionTables InfoWindow
});

その直後に、clickイベント リスナーをにアタッチしFusionTablesLayer、次のようにカスタム InfoBox オブジェクトを作成します。

google.maps.event.addListener(layer['provinces'], 'click', function(e){

    /*
        Here I build the infoBox HTML using e.row[]
        eg: html = '<div>' + e.row['Province'].value + '</div>';
    */

    // Attach the infoBox to the click
    infoBox.setContent(html);
    infoBox.setPosition(e.latLng);
    infoBox.open(map);

});

その後、マップ上にレイヤーをレンダリングします。

// Render the layer on the map
layer['provinces'].setMap(map);

これはすべて機能します。問題ない。


問題

クリック イベントは、FusionTable のそれぞれの行のすべての列を返し、それをe上記の変数にアタッチします。

現在、 FusionTable の各行には、114kb から 2.5MB までの非常に長いe.infoWindowHtmlKML 文字列が含まれており、これは および で返されe.row['Polygon'].valueます。

e: (Object)
    infoWindowHtml: "_Very_ long string in here."
    latLng: Q
    pixelOffset: T
    row: (Object)
        Number: (Object)
        Polygon: (Object)
        Province: (Object)

Google 側のキャッシュが多いため、リクエストにそれほど時間はかかりませんが、都道府県をクリックしてから infoBox がポップアップするまでに約 5 秒かかります


tl;dr

infoBox.open(map)FusionTables ポリゴンをクリックした後のメソッドは非常に低速です。どうすれば高速化できますか?

アップデート

データは最初のクリック後にキャッシュされます。最初のクリックのにデータをキャッシュする方法はありますか?

あるいは、に添付された返される変数を制限する方法はありeますか?つまり、クリック要求から「ポリゴン」データを削除しますか?

4

2 に答える 2

2

たまたま答えを見つけました。

[情報ウィンドウのレイアウトの変更...]ウィンドウで適切な列を選択することにより、返される内容をカスタマイズできます。

Map tab Tools > Change info window layout...

'Polygon'の選択を解除し、'Number'と'Province'を選択したままにしました。

選択した列eは、clickeventListenerでアタッチされます。

e: (Object)
    infoWindowHtml: "Better string"
    latLng: Q
    pixelOffset: T
    row: (Object)
        Number: (Object)
        Province: (Object)

重要な注意(これが運です)

適切な列を選択した後、Google側の強力なキャッシュをクリアするために、意味のある方法でFusionTableデータを変更する必要があります。

タブで選択された列Automaticが返されます。Customタブが無視されているようです。

于 2013-01-30T11:32:12.263 に答える
1

2回目はポップアップを開くのが速いので、キャッシュされると思います。KMLはかなり大きいので、それがボトルネックになります。単純化できませんか?きちんとした概要については、それほど詳細は必要ありません。それはそれをスピードアップするはずです。(1つの州を長方形だけに置き換えてみて、それが役立つかどうかを確認してください)

于 2013-01-30T10:38:07.313 に答える