6

現在DrawingManager、ユーザーがマップ上に図形を描画できるようにするために を使用しています。シェイプが描画されたら、ポリゴンのパスにリスナーを設定して、パスが変更された後に反応できるようにします。

var polygonPath = event.overlay.getPath();
google.maps.event.addListener(polygonPath, 'set_at', function () { 
    // my code...
});

これは、ユーザーが描画ツールを使用して新しい形状を追加するときにうまく機能します。ui-gmap-polygonただし、 (プロジェクトから) AngularJS ディレクティブを使用して表示しているデータベースにポリゴンが既にある場合、このイベントはpolygonではなくポリゴンのパス ( MVCArrayangular-google-maps ) にあるため、イベントをリッスンするにはどうすればよいですか? )?set_at

プロジェクトset_atのソース コードで参照を見つけることができた唯一の場所は、 array-sync.coffeeファイルでしたが、公開されているようには見えません。angular-google-maps

ディレクティブを使用してイベントを直接リッスンできない場合set_atは、ディレクティブがポリゴンを作成したときにトリガーされるイベントがあり、ポリゴンのパスを取得してリスナーを追加できることを願っています。上記のコード。

JSFiddleイベント オブジェクトとともに、基本構造とをまとめました。現在、ポリゴンのマウスオーバーとマウスアウトを処理しますが、set_atイベントは処理しません。

4

2 に答える 2

2

以下のアプローチを試してみてください。

directive('uiGmapPolygon', function ($timeout) {
  return {
    restrict: 'E',
    link: function (scope, element, attrs) {

      // Make sure that the polygon is rendered before accessing it. 
      // next two lines will do the trick.
      $timeout(function () {
        // I know that properties with $$ are not good to use, but can't get away without using $$childHead
        scope.$$childHead.control.promise.then(function () {
          // get the polygons
          var polygons = scope.$$childHead.control.polygons;
          // iterate over the polygons
          polygons.forEach(function (polygon) {
            // get google.maps.Polygon instance bound to the polygon
            var gObject = polygon.gObject;

            // get the Paths of the Polygon
            var paths = gObject.getPaths();
            // register the events.
            paths.forEach(function (path) {
              google.maps.event.addListener(path, 'insert_at', function () {
                console.log('insert_at event');
              });

              google.maps.event.addListener(path, 'remove_at', function () {
                  console.log('remove_at event');
              });

              google.maps.event.addListener(path, 'set_at', function () {
                  console.log('set_at event');
              });
            })
          })
        })
      });
    }
  }
})

作業プランナー

于 2015-03-24T13:39:55.050 に答える