2016-12-25 12 views
1

私はリーフレット、リーフレットドロー、およびコルドバジオロケーションを使用しています。マップがロードされているとき(グローブビュー)、ロケート関数がmapcenterと呼ばれ、マーカー位置が更新されても描くことができなくなると、正しく描画することができます。描画ツールバーは表示され、クリック可能ですが、使用すると選択したツールは動作しません。ロガーにエラーは表示されません。描画可能なレイヤーが「消える」ようです...ジオロケーションを使用してマーカ位置を更新した後、リーフレットを描くことができません

Plunkerへのリンク: http://plnkr.co/edit/6DH7o3HyPzbpCJs7szcn?p=preview

これは私のコードです:

angular.module('starter', ['ionic', 'ui-leaflet','ngCordova']) 
.controller("MapCtrl", [ "$scope", "leafletData", "$cordovaGeolocation", function($scope, leafletData, $cordovaGeolocation) { 
    angular.extend($scope, { 
    center: { 
     lat: 51.505, 
     lng: -0.09, 
     zoom: 4 
    }, 
    controls: { 
     draw: {} 
    }, 
    markers:{ 
     tracker: { 
      lat: 51.505, 
      lng: -0.09, 
      message: "You're here!", 
      focus: false, 
      icon: {}, 
     } 
    }, 
    layers: { 
     baselayers: { 
     bingAerial: { 
      name: 'Bing Aerial', 
      type: 'bing', 
      key: 'Aj6XtE1Q1rIvehmjn2Rh1LR2qvMGZ-8vPS9Hn3jCeUiToM77JFnf-kFRzyMELDol', 
      layerOptions: { 
      type: 'Aerial' 
      } 
     } 
     }, 

     overlays: { 
     draw: { 
      name: 'draw', 
      type: 'group', 
      visible: true, 
      layerParams: { 
      showOnSelector: false 
      } 
     } 
     } 
    } 
    }); 

    // Cordova Geolocation 
    $scope.locate = function(){ 
    console.log(leafletData); 
    var posOptions = {timeout: 10000, enableHighAccuracy: false}; 
    $cordovaGeolocation 
    .getCurrentPosition(posOptions) 
    .then(function (position) { 
     $scope.center.lat = position.coords.latitude 
     $scope.center.lng = position.coords.longitude 
     $scope.center.zoom = 19 
     $scope.markers.tracker.lat = position.coords.latitude 
     $scope.markers.tracker.lng = position.coords.longitude 
    }, function(err) { 
     // error 
    }); 
    setInterval(function(){ 
     var posOptions = {timeout: 10000, enableHighAccuracy: false}; 
     $cordovaGeolocation 
     .getCurrentPosition(posOptions) 
     .then(function (position) { 
     $scope.markers.tracker.lat = position.coords.latitude 
     $scope.markers.tracker.lng = position.coords.longitude 
     }, function(err) { 
     // error 
     }); 
    },5000) 
    } 
    // /Cordova Geolocation 


    leafletData.getMap().then(function(map) { 
    console.log(leafletData); 
    leafletData.getLayers().then(function(baselayers) { 
     var drawnItems = baselayers.overlays.draw; 
     map.on('draw:created', function (e) { 
     var layer = e.layer; 
     drawnItems.addLayer(layer); 
     console.log(JSON.stringify(layer.toGeoJSON())); 
     }); 
    }); 
    }); 
}]) 

のindex.html:イオン独自の水道システムにはないので、それは動作を停止し

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 
    <title></title> 

    <link rel="manifest" href="manifest.json"> 

    <!-- un-comment this code to enable service worker 
    <script> 
     if ('serviceWorker' in navigator) { 
     navigator.serviceWorker.register('service-worker.js') 
      .then(() => console.log('service worker installed')) 
      .catch(err => console.log('Error', err)); 
     } 
    </script>--> 

    <link href="lib/ionic/css/ionic.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 

    <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above 
    <link href="css/ionic.app.css" rel="stylesheet"> 
    --> 

    <!-- ionic/angularjs js --> 
    <script src="lib/ionic/js/ionic.bundle.js"></script> 

    <!-- cordova script (this will be a 404 during development) --> 
    <script src="lib/ngCordova/dist/ng-cordova.js"></script> 
    <script src="cordova.js"></script> 

    <!-- your app's js --> 
    <script src="js/app.js"></script> 

    <script src="lib/leaflet/dist/leaflet.js"></script> 
    <script src="lib/angular-simple-logger/dist/angular-simple-logger.js"></script> 
    <script src="lib/ui-leaflet/dist/ui-leaflet.min.js"></script> 
    <script src="https://rawgit.com/elesdoar/ui-leaflet-layers/master/dist/ui-leaflet-layers.min.js"></script> 
    <script src="lib/leaflet-draw/dist/leaflet.draw.js"></script> 
    <script src="lib/leaflet-plugins/layer/tile/Bing.js"></script> 
    <link rel="stylesheet" href="lib/leaflet/dist/leaflet.css" /> 
    <link rel="stylesheet" href="lib/leaflet-draw/dist/leaflet.draw.css" /> 

    </head> 
    <body ng-app="starter"> 

    <ion-pane> 
     <ion-header-bar class="bar-stable"> 
     <h1 class="title">Ionic Blank Starter</h1> 
     <a class="button" ng-click ='locate();'>Locate</a> 
     </ion-header-bar> 


     <ion-content ng-controller ='MapCtrl'> 
     <a class="button" ng-click ='locate();'>Locate</a> 
     <leaflet lf-center="center" controls="controls" markers='markers' layers="layers" width="100%" height="400"></leaflet> 
     </ion-content> 

    </ion-pane> 
    </body> 
    </html> 
+0

はあなたがPlunkerに例を設定することはできますか? – tasseKATT

+1

'setInverval'の定期コードは何をすべきでしょうか? $ digestサイクルが実行され、あなたの変更が確実に「可視」になることを確信するので、 '$ interval'サービスを代わりに使用することをお勧めします。 –

+0

私はsetIntervalを使用して5秒ごとにgeolocationによってローカル位置を更新します。 $ intervalを使用していただきありがとうございます;)問題は依然として残っています.. – tinytanks

答えて

2

理由がありますリーフレットでうまくプレイする。

Ionic documentationは、より多くの情報がありますいくつかのケースでは

を、サードパーティのライブラリも、水道システムに干渉することができますタッチ イベントで作業することができます。たとえば、Googleまたはリーフレットマップなどの ライブラリをマッピングすると、多くの場合、タッチシステム が実装され、Ionicのタップシステムと競合します。

それを動作させるために特定の要素に無効にイオンの水道システム:

<leaflet data-tap-disabled="true" ... 

はデモ:https://plnkr.co/edit/LlhpTGYHNMBUzNo1oSwF?p=preview

関連する問題