2016-12-25 6 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'? Вместо этого я бы рекомендовал использовать сервис '$ interval', так как вы были бы уверены, что цикл $ digest будет работать, и ваши изменения будут« видимыми »на угловые. –

+0

Я использую setInterval для обновления локальной позиции через геолокацию каждые 5 секунд. Спасибо вам за предложение использовать $ interval;) проблема все еще остается. – tinytanks

ответ

2

причина она перестает работать, потому что это собственная система водопроводная Ионные в не хорошо играйте с Лифлет.

Следующая Ionic documentation имеет больше информации:

В некоторых случаях сторонние библиотеки также могут работать с сенсорными событий, которые могут помешать системе крана. Например, сопоставление библиотек, таких как Google или Карты лифтов, часто реализует сенсорную систему обнаружения , которая конфликтует с системой крана Ionic.

системы водопроводной Отключить Ионную на конкретном элементе, чтобы заставить его работать:

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

Дем:https://plnkr.co/edit/LlhpTGYHNMBUzNo1oSwF?p=preview