2013-06-07 3 views
0

Я пишу функцию watchPosition для функции geofencing в Touchgeo MapDotNet (http://www.mapdotnet.com/index.php/component/content/article?id=131). При начальной загрузке все работает превосходно; при обновлении я получаю только одну строку отладочных сообщений, указывая только на один обратный вызов, а GPS на моем телефоне никогда не включается. Вот моя функция watchPosition:watchPosition() срабатывает только один раз

navigator.geolocation.watchPosition(
    function success(pos) { 
     $('#debug') 
      .prepend(
       $('<div></div>').text('accuracy: ' + pos.coords.accuracy) 
      ) 
      .css({ 
       textAlign: 'right', 
       color: 'black' 
      }); 
     var endpoint = isc.touchgeo.dataServicesEndpoint + "Map/mapname/Features/geofence?x={x}&y={y}&role={role}" 
      .replace("{x}", pos.coords.longitude) 
      .replace("{y}", pos.coords.latitude) 
      .replace("{role}", isc.touchgeo.authenticationMgr.getAuthorizationRecord().Role); 
     $.getJSON(endpoint, function success(data) { 
      $('#debug') 
       .prepend(
        $('<div></div>').text('features: ' + data.length) 
       ) 
       .css({ 
        textAlign: 'right', 
        color: 'black' 
       }); 
      for (layer in data) { 
       if (layer in geofencingRules) { 
        geofencingRules[layer](data[layer]); 
       } 
      } 
     }); 
    }, 
    function error(error) { 
     $('#debug') 
      .prepend(
       $('<div></div>').text('error: ' + error.code) 
      ) 
      .css({ 
       textAlign: 'right', 
       color: 'black' 
      }); 
    }, 
    { 
     enableHighAccuracy: true, 
     maximumAge: 15000, 
    } 
); 

Любые идеи?

ответ

2

Я понял. В основном, maximumAge на positionOptions сообщал watchPosition() для использования данных до того, как страница была обновлена. Следовательно, GPS никогда не включался, и watchPosition() не получал данные. Способ исправить это, чтобы иметь

var maximumAge = 0; 
navigator.geolocation.watchPosition(
    function success(pos) { 
     maximumAge = 15000; 
     $('#debug') 
      .prepend(
       $('<div></div>').text('accuracy: ' + pos.coords.accuracy) 
      ) 
      .css({ 
       textAlign: 'right', 
       color: 'black' 
      }); 
     var endpoint = isc.touchgeo.dataServicesEndpoint + "Map/mapname/Features/geofence?x={x}&y={y}&role={role}" 
      .replace("{x}", pos.coords.longitude) 
      .replace("{y}", pos.coords.latitude) 
      .replace("{role}", isc.touchgeo.authenticationMgr.getAuthorizationRecord().Role); 
     $.getJSON(endpoint, function success(data) { 
      $('#debug') 
       .prepend(
        $('<div></div>').text('features: ' + data.length) 
       ) 
       .css({ 
        textAlign: 'right', 
        color: 'black' 
       }); 
      for (layer in data) { 
       if (layer in geofencingRules) { 
        geofencingRules[layer](data[layer]); 
       } 
      } 
     }); 
    }, 
    function error(error) { 
     $('#debug') 
      .prepend(
       $('<div></div>').text('error: ' + error.code) 
      ) 
      .css({ 
       textAlign: 'right', 
       color: 'black' 
      }); 
    }, 
    { 
     enableHighAccuracy: true, 
     maximumAge: maximumAge, 
    } 
); 

То есть, перейти на maximumAge переменную, которая инициализируется в 0, но увеличивается до 15000 на первый обратный вызов.

Надеюсь, это поможет кому-то.

+0

Установляет ли значение maximumAge в вашем обратном вызове фактически что-либо, кроме изменения локальной переменной? Разве значение не передается как значение, а не как ссылка? – nzjoel

+0

Не уверен, что вы имеете в виду, но внизу я использую переменную как третий аргумент options функции watchPosition. Тем не менее, это 4-летнее путешествие. –