0

ドイツの鉄道を表示するFusionTablesLayerを備えたGoogleマップがあります(フュージョンテーブルはここにあります)。geometry列には、各フィーチャの LineString 座標が含まれます。

var railwaysLayer = new google.maps.FusionTablesLayer({
    map: map,
    query: {
        select: 'geometry',
        from: '1cVaJLbbxgBErP8PzYkHP-lpWMN8wUmINbdAJS1Y'
    }
});

ユーザーが鉄道をクリックしたとき、どの行 (または実際に機能) がクリックされたかを知る必要があります。clickこれは、次のようにイベント ハンドラーで実行できます。

google.maps.event.addListener(existingRailwaysLayer, 'click', function(e) {
    console.log(e.row.geometry.value);
});

これは期待どおりに機能しますが、ここに問題があります。このテーブルは、テストとして KML ファイルから 1 か月前にアップロードされました。今日、まったく同じ KML ファイルを別のアカウント (ここ) にインポートしましgeometryたが、イベント ハンドラーで列が返されなくなりました。

すべての設定を確認したところ、両方のテーブルでgeometry列のタイプがLocation. ただし、最初のテーブルでは、行はジオコーディングされていません。File > Geocode > Begin geocodingは、各行のジオコーディング プロセスを効果的に開始しますが、2 番目のテーブルでは、「列は完全にジオコーディングされています」と表示されます。

他のすべてはまったく同じであるため、これが問題になる可能性が非常に高くなります。2 番目のテーブルの行を「ジオコーディング解除」する方法がわかりません。最初のものが 1 か月前にアップロードされたので、Google が行を自動的にジオコーディングするようになったと思います。

geometryクリックされた機能の列を取得する方法はありますか?

注:geometry列がジオコーディングされている場合でも、間違いなく可能です。2 番目のテーブルの [Map of geometry] タブでは、フィーチャをクリックしたときに infoWindow に表示される列を選択できます。実際のデモについては、こちらを参照してください。

4

1 に答える 1

0

KML データを含む行は行に含まれません (これが常に含まれているかどうかはわかりません)。

帯域幅を節約するために KML 機能が省略されていると思います

できること:

解析e.infoWindowHtmlします (お気付きのように、InfoWindow にジオメトリ機能を出力することが可能で、InfoWindow のe.infoWindowHtmlコンテンツとして使用される文字列が含まれています)。

ただし、自動 InfoWindow テンプレートは座標のみを表示するため、動的テンプレートを使用します。

{template .contents}
<div class='googft-info-window'>
<b>description:</b> {$data.formatted.description}<br>
<b>name:</b> {$data.formatted.name}<br>
<div style="width:0;height:0;overflow:hidden;">[[{$data.value.geometry}]]</div>
</div>
{/template}

(このテンプレートをテーブルで使用できます。私が作成しましたtemplateId:6

ジオメトリがサイズのない div に埋め込まれていることがわかるように、yit は InfoWindow 内に表示されません。ジオメトリは角括弧で囲まれており、RegExp を使用して検索します。

 google.maps.event.addListener(railwaysLayer, 'click', function(e) {

  var str = e.infoWindowHtml, geo;

  if(geo=str.match(/\[\[([^\]]+)]]/)){
      geo=geo[1].replace(/(&gt;|&lt;)/g,function(x){
            return((x==='&gt;')?'>':'<');
          });
      console.log(geo);
  }
});

デモ:(私のテンプレートでテーブルを使用) http://jsfiddle.net/doktormolle/9YdKW/

于 2013-09-29T02:31:12.707 に答える