Geolocation,由W3C制定,而我們經常性的在使用這個功能...其中一個就是「Pokemo go !」白話文是,當我們的智慧型手機打開GPS功能後,我們就可透過Cordova Geolocation Plugin 取得我們目前所在的經緯度。如果不打開GPS功能,還能取得目前的經緯度嗎?
如果只是透過Cordova Geolocation Plugin這個功能,是無法取得的。
那可不可以寫網頁,呼叫這樣的功能? 沒問題,也可以! 只是目前我們是透過Cordova 去呼叫,所以還是先用Cordova 做介紹囉。
之前提過,Geolocation有下列這些屬性,
屬性 | 功能 |
---|---|
latitude | 緯度 |
longitude | 經度 |
altitude | 高度 |
accuracy | 位置誤差 |
altitudeAccuracy | 高度誤差 |
heading | 移動方向 |
speed | 移動速度(pokemon go...) |
另外,Geolocation 有三個Event...分別是,getCurrentPosition、watchPosition和clearWatch 這三種,
getCurrentPoisition 如字面意思,取得目前的位置
watchPoisition ,則是持續取得裝置的經緯度...
clearPoisition,則是負責停止watchPoisition。
enableHighAccuracy|是否要取得高度精確的位置資訊
maximumAge|保存上一次的經緯度資訊,預設為0,保存期間單位為毫秒
timeout|逾時的時間值,單位毫秒。在未開啟GPS功能或無法取得經緯度的情況下,會回傳錯誤
如果根據測試範例,可發現,getCurrentPoisition的區段數值,是靜止不動的,而watchPoisition的區段數值,則是不斷跳動。
可至Google Play 下載此次範例,Google Play 搜尋 2016iT邦幫忙鐵人賽_範例
html
<div id="show_getPosition"></div>
<hr />
<div id="show_watchPosition"></div>
js
(function () {
"use strict";
var watchID = null;
var getID = null;
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
var getoptions = { timeout: 30000 };
getID = navigator.geolocation.getCurrentPosition(getSuccess, getError, getoptions);//此區段為getCurrentPoisition
var watchoptions = { enableHighAccuracy: true, timeout: 10000 };
watchID = navigator.geolocation.watchPosition(watchSuccess, watchError, watchoptions);//此區段為watchPoisition
};
var getSuccess = function (getposition) {//此區段為getCurrentPoisition
var element1 = document.getElementById('show_getPosition');
element1.innerHTML = "這是getPosition資訊<br />" +
"緯度 " + getposition.coords.latitude + "<br />" +
"經度(度)" + getposition.coords.longitude + "<br />" +
"高度(度)" + getposition.coords.altitude + "<br />" +
"位置誤差(公尺) " + getposition.coords.accuracy + "<br />" +
"高度誤差((公尺)" + getposition.coords.altitudeAccuracy + "<br />" +
"移動方向(度)" + getposition.coords.heading + "<br />" +
"移動速度(公尺/秒)" + getposition.coords.speed + "<br />" +
"取得位置資訊的時間 " + getposition.timestamp ;
};
var watchSuccess = function (watchposition) {//此區段為watchPoisition
var element2 = document.getElementById('show_watchPosition');
var llat = watchposition.coords.latitude;
var llon = watchposition.coords.longitude;
element2.innerHTML = "這是watchPosition資訊<br />" +
"緯度 " + watchposition.coords.latitude + "<br />" +
"經度(度)" + watchposition.coords.longitude + "<br />" +
"高度(度)" + watchposition.coords.altitude + "<br />" +
"位置誤差(公尺) " + watchposition.coords.accuracy + "<br />" +
"高度誤差((公尺)" + watchposition.coords.altitudeAccuracy + "<br />" +
"移動方向(度)" + watchposition.coords.heading + "<br />" +
"移動速度(公尺/秒)" + watchposition.coords.speed + "<br />" +
"取得位置資訊的時間 " + watchposition.timestamp;
// initMap(llat, llon);
};
function getError(error) {
alert('get_error: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
function watchError(error) {
alert('watch_error: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
})();
(待)
2016/12/08 Sunallen