2015-10-20 11 views
7

Quindi ho creato questa applicazione di mappa piccola HERE e, come potete vedere, mostra la posizione corrente, ora il problema è che il marcatore non verrà mostrato nella posizione corrente, Se CTRL+U si vedrà che il codice per il marcatore è:Come aggiornare l'indicatore di mappa nell'applicazione angolare

<openlayers ol-center="center" height="400px"> 
      <ol-marker lat="center.lat" lon="center.lon" message="Your current location." ng-model="center" > 
      </ol-marker> 
</openlayers> 

il lat="center.lat" e lon="center.lon" in principio è 0, ora se ho hardcode i valori di lat e lon alla mia posizione attuale, naturalmente l'indicatore mostrerà in la mia posizione attuale, ma come faccio ad aggiornare il valori dinamicamente?

Sto usando angular.js, openLayers3 e openlayers-angular-directive, Quindi, per ripetere la mia domanda, come faccio ad aggiornare il marcatore in modo dinamico?

+0

la chiave che credo sia di cambiare 'var getMarkerDefaults = function() {return {proiezione: 'EPSG: 4326', lat: 0, lon: 0, coord: [], mostra: true, showOnMouseOver: false, showOnMouseClick: false, keepOneOverlayVisible: false}; }; 'lat e lon nella sorgente di angular-openlayers-directive.js alla riga 634, fonte qui purplefront.net/a-map/js/angular-openlayers-directive.js –

risposta

2

Utilizzare $timeout anziché setTimeout. Angular non sa che stai modificando lo scope all'interno di setTimeout in modo che non aggiorni la vista.

$timeout utilizza setTimeout() internamente ma chiama anche $apply() per eseguire un digest angolare.

rememeber per iniettare anche controller

+0

Ci proverò, il setTimeout era solo per test, dubito che la soluzione possa funzionare, vedere come l'HTML dell'indicatore è stato modificato nella parte dell'elemento inspect, vedi qui http://purplefront.net/a-map/ –

+0

Non ho inserito il codice su quel link ma ha fatto almeno lo zoom sulla mia posizione – charlietfl

+0

sì ma il marcatore vuole adattarsi alla posizione corrente! –

3

Tutto ciò che serve è quello di aggiungere "individuazione automatica: true" al tuo oggetto centrale nel controller.

Come illustrato nello documentation della direttiva.

Inoltre, è necessario mettere il valore legato nel marcatore:

<openlayers ol-center="center" height="400px"> 
     <ol-marker lat="{{center.lat}}" lon="{{center.lon}}" message="Your current location." ng-model="center" > 
     </ol-marker> 

+0

La scoperta della posizione corretta, ma non l'aggiunta dell'indicatore alla posizione! , ho già impostato '" autodiscover: true "', quella parte funziona bene –

+0

Ciao, ho aggiornato la risposta, il marcatore deve ottenere i valori dall'ambito, quindi devi dirlo con {{}}. – pedromarce

+0

Ho davvero insegnato che la tua soluzione avrebbe funzionato, ma non è così :(: /, ho trovato la soluzione però, è qui http://tombatossals.github.io/angular-openlayers-directive/examples/063-markers-properties -esempio.html, necessario per utilizzare l'attributo 'ol-marker-properties =" center "' + 1 anche se –

1

si può provare

<ol-marker ol-marker-properties="center" ></ol-marker> 

angular.extend($scope, { 
      center: { 
       lat: 0, 
       lon: 0, 
       autodiscover: true 
       label: { 
        message: 'Your current location.', 
        show: true, 
        showOnMouseOver: true 
       } 
      } 
     }); 
+0

non funziona! –

+0

sta funzionando per me! – raj

+1

puoi condividere un violino o un plunker? –

Problemi correlati