2

イントラネット プロジェクトで作業しているため、KML ファイルを外部から利用できません。これは、XML を Google マップに解析するために geoXML3 ライブラリに依存していることを意味します。ただし、イベント リスナーに関するドキュメントが不足しているため、イライラさせられます。クリックリスナーを呼び出して、geoXML3の目印を渡したいと思います。次のことをしようとしていますが、ループclickListenerで処理された最後のポリゴンを.afterParsep

kml = new geoXML3.parser({
    suppressInfoWindows: true,
    map: map,
    afterParse: function (doc) {
        for (var i = 0; i < doc[0].placemarks.length; i++) {
            var p = doc[0].placemarks[i];
            google.maps.event.addListener(
                p.polygon,
                "click",
                function () { clickListener(p); }
            );
        }
    }
});
kml.parse(mapSettings.kmlLocation);

Google Maps API の KML サポートを使用していた場合は、これを実行してポリゴンをリスナーに渡すことができます。

kml = new google.maps.KmlLayer(mapSettings.kmlLocation, {
    suppressInfoWindows: true,
    preserveViewport: false,
    map: map
});
google.maps.event.addListener(
    kml,
    "click",
    clickListener
};

(より望ましい) 正しい geoXML3 目印を に確実に渡す方法clickListener、または (あまり望ましくない) geoXML3.parserI can bind a click event toのプロパティkmlMouseEventを使用して、Google Maps API kml パーサーを使用する方法を受け取る方法はありますか? 最終的には、ポリゴンのスタイルを変更し、配列内で選択/選択解除されたことを追跡できるようにする必要があります。

4

1 に答える 1

6

関数クロージャーを使用して、目印をイベント リスナーに関連付けます。1 つの方法 (匿名関数を使用することもできます):

kml = new geoXML3.parser({
    suppressInfoWindows: true,
    map: map,
    afterParse: function (doc) {
        for (var i = 0; i < doc[0].placemarks.length; i++) {
            var p = doc[0].placemarks[i];
            clickablePolygon(p);
        }
    }
});
kml.parse(mapSettings.kmlLocation);
function clickablePolygon(p) {
  google.maps.event.addListener(
    p.polygon,
    "click",
    function () { clickListener(p); }
  );
}      
于 2015-02-04T13:37:49.700 に答える