PhoneGap API介紹:Geolocation
作者:佚名
本文將介紹PhoneGap API——Geolocation:使得你的應用程序可以訪問地理位置信息。geolocation對象提供了對設備GPS傳感器的訪問。Geolocation提供設備的位置信息,例如經度和緯度。位置信息的常見來源包括全球定位系統(GPS),以及通過諸如IP地址、RFID、WiFi和藍牙的MAC地址、和GSM/CDMA手機ID的網絡信號所做的推斷。不能保證該API返回的是設備的真實位置信息。這個API是基于W3C Geo location API Specification實現的。有些設備已經提供了對該規范的實現,對于這些設備采用內置實現而非使用PhoneGap的實現。對于沒有地理位置支持的設備
方法:
參數:
對象(只讀):
geolocation.getCurrentPosition
- 返回一個Position對象表示設備的當前位置。
- navigator.geolocation.getCurrentPosition(geolocationSuccess,
- [geolocationError],
- [geolocationOptions]);
參數:
- geolocationSuccess:獲取位置信息成功時調用的回調函數,參數為當前的位置信息。
- geolocationError:(可選項)獲取位置信息出錯時調用的回調函數。
- geolocationOptions:(可選項)地理位置選項。
說明:
- geolocation.getCurrentPositon是一個異步函數。它回傳一個包含設備當前位置信息的Position對象給geolocationSuccess回調函數。如果發生錯誤,觸發geolocationError回調函數并傳遞一個PositionError對象。
支持的平臺:
- Android
- BlackBerry (OS 4.6)
- BlackBerry WebWorks (OS 5.0或更高版本)
- iPhone
簡單的范例:
- // 獲取位置信息成功時調用的回調函數
- // 該方法接受一個“Position”對象,包含當前GPS坐標信息
- var onSuccess = function(position) {
- alert('Latitude: ' + position.coords.latitude + '\n' +
- 'Longitude: ' + position.coords.longitude + '\n' +
- 'Altitude: ' + position.coords.altitude + '\n' +
- 'Accuracy: ' + position.coords.accuracy + '\n' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
- 'Heading: ' + position.coords.heading + '\n' +
- 'Speed: ' + position.coords.speed + '\n' +
- 'Timestamp: ' + new Date(position.timestamp) + '\n');
- };
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
完整的范例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>Device Properties Example</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- // 等待加載PhoneGap
- document.addEventListener("deviceready", onDeviceReady, false);
- // PhoneGap加載完畢
- function onDeviceReady() {
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
- }
- // 獲取位置信息成功時調用的回調函數
- function onSuccess(position) {
- var element = document.getElementById('geolocation');
- element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
- 'Longitude: ' + position.coords.longitude + '<br />' +
- 'Altitude: ' + position.coords.altitude + '<br />' +
- 'Accuracy: ' + position.coords.accuracy + '<br />' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
- 'Heading: ' + position.coords.heading + '<br />' +
- 'Speed: ' + position.coords.speed + '<br />' +
- 'Timestamp: ' + new Date(position.timestamp) + '<br />';
- }
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- </script>
- </head>
- <body>
- <p id="geolocation">Finding geolocation...</p>
- </body>
- </html>
- 監視設備的當前位置的變化。
- var watchId = navigator.geolocation.watchPosition(geolocationSuccess,
- [geolocationError],
- [geolocationOptions]);
參數:
- geolocationSuccess: 獲取位置信息成功時調用的回調函數,參數為當前位置信息。
- geolocationError:(可選項)獲取位置信息出錯時調用的回調函數。
- geolocationOptions:(可選項)地理位置選項。
返回:
- String:返回的watch id是位置監視String:返回的watch id是位置監視周期的引用。可以通過geolocation.clearWatch調用該watch ID以停止對位置變化的監視。
說明:
- geolocation.watchPosition是一個異步函數。當檢測到設備的位置發生改變時,它返回設備的當前位置。當設備檢索到一個新的位置,會觸發geolocationSuccess回調函數并傳遞一個Position對象作為參數。如果發生錯誤,會觸發geolocationError回調函數并傳遞一個PositionError對象。
支持的平臺:
- Android
- BlackBerry (OS 4.6)
- BlackBerry WebWorks (OS 5.0或更高版本)
- iPhone
簡單的范例:
- // 獲取位置信息成功時調用的回調函數
- // 該方法接受一個“Position”對象,包含當前GPS坐標信息
- function onSuccess(position) {
- var element = document.getElementById('geolocation');
- element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br>' +
- 'Longitude: ' + position.coords.longitude + '<br>' +
- '<hr>' + element.innerHTML;
- }
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- // Options: 每隔3秒鐘檢索一次位置信息
- var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { frequency: 3000 });
完整的范例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>Device Properties Example</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- // 等待加載PhoneGap
- document.addEventListener("deviceready", onDeviceReady, false);
- var watchID = null;
- // PhoneGap加載完畢
- function onDeviceReady() {
- // 每隔3秒鐘更新一次
- var options = { frequency: 3000 };
- watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
- }
- // 獲取位置信息成功時調用的回調函數
- function onSuccess(position) {
- var element = document.getElementById('geolocation');
- element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
- 'Longitude: ' + position.coords.longitude + '<br />' +
- <hr />'' + element.innerHTML;
- }
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- </script>
- </head>
- <body>
- <p id="geolocation">Finding geolocation...</p>
- </body>
- </html>
- 停止watchID參數指向的設備位置變化監視。
- navigator.geolocation.clearWatch(watchID);
參數:
- watchID:要清除的watchPosition周期的id。(字符串類型)
說明:
- geolocation.clearWatch函數通過清除watchID指向的geolocation.watchPosition來停止對設備位置變化的監視。
支持的平臺:
- Android
- BlackBerry (OS 4.6)
- BlackBerry WebWorks (OS 5.0或更高版本)
- iPhone
簡單的范例:
- // 選項: 每隔3秒鐘檢索一次位置信息
- var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { frequency: 3000 });
- // ...后繼處理...
- navigator.geolocation.clearWatch(watchID);
完整的范例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>Device Properties Example</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- // 等待加載PhoneGap
- document.addEventListener("deviceready", onDeviceReady, false);
- var watchID = null;
- // PhoneGap加載完畢
- function onDeviceReady() {
- // 每隔3秒鐘更新一次
- var options = { frequency: 3000 };
- watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
- }
- // 獲取位置信息成功時調用的回調函數
- function onSuccess(position) {
- var element = document.getElementById('geolocation');
- element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
- 'Longitude: ' + position.coords.longitude + '<br />' +
- '<hr />' + element.innerHTML;
- }
- // 清除前述已經開始的監視
- function clearWatch() {
- if (watchID != null) {
- navigator.geolocation.clearWatch(watchID);
- watchID = null;
- }
- }
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- </script>
- </head>
- <body>
- <p id="geolocation">Finding geolocation...</p>
- <button onclick="clearWatch();">Clear Watch</button>
- </body>
- </html>
- 當得到一個有效地理位置信息時,此用戶回調函數被調當獲得一個地理位置信息時,此用戶回調函數被調用。
- function(position) {
- // 進行處理
- }
參數:
- position:設備返回的地理位置信息。(Position類型)
范例:
- function geolocationSuccess(position) {
- alert('Latitude: ' + position.coords.latitude + '\n' +
- 'Longitude: ' + position.coords.longitude + '\n' +
- 'Altitude: ' + position.coords.altitude + '\n' +
- 'Accuracy: ' + position.coords.accuracy + '\n' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
- 'Heading: ' + position.coords.heading + '\n' +
- 'Speed: ' + position.coords.speed + '\n' +
- 'Timestamp: ' + new Date(position.timestamp) + '\n');
- }
- 當geolocation函數發生錯誤時,此用戶回調函數被調用。
- function(error) {
- // 處理錯誤
- }
參數:
- error:設備返回的錯誤信息。(PositionError類型)
- 用戶定制地理位置檢索的可選參數。
- { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true };
選項:
- frequency:以毫秒為單位的檢索位置周期。這個選項并非W3C規范的一部分,未來會被刪除并用maximumAge來替代該選項。(數字類型)(默認值:10000)
- enableHighAccuracy:提供一個表明應用程序希望獲得最佳可能結果的提示。(布爾類型)
- timeout:允許的以毫秒為單位的最大時間間隔,該時間間隔是從geolocation.getCurrentPosition或geolocation.watchPosition的調用到相應的geolocationSuccess回調函數被調用。(數字類型)
- maximumAge:應用程序將接受一個緩存的位置信息,當該緩存的位置信息的年齡不大于此參數設定值,單位是毫秒。(數字類型)
Android的特異情況:
- 除非enableHighAccuracy選項被設定為true,否則Android 2.X模擬器不會返回一個地理位置結果。
- { enableHighAccuracy: true }
- 包含由geolocation API創建的Position坐標信息。
屬性:
- coords:一系列地理坐標。(Coordinates類型)
- timestamp:以毫秒為單位的coords的創建時間戳。(DOMTimeStamp類型)
說明:
- Position對象是由PhoneGap創建和填充的,并通過一個回調函數返回用戶。
支持的平臺:
- Android
- BlackBerry (OS 4.6)
- BlackBerry WebWorks (OS 5.0或更高版本)
- iPhone
簡單的范例:
- // 獲取位置信息成功后調用的回調函數
- var onSuccess = function(position) {
- alert('Latitude: ' + position.coords.latitude + '\n' +
- 'Longitude: ' + position.coords.longitude + '\n' +
- 'Altitude: ' + position.coords.altitude + '\n' +
- 'Accuracy: ' + position.coords.accuracy + '\n' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
- 'Heading: ' + position.coords.heading + '\n' +
- 'Speed: ' + position.coords.speed + '\n' +
- 'Timestamp: ' + new Date(position.timestamp) + '\n');
- };
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
完整的范例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>Device Properties Example</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- // 等待加載PHoneGap
- document.addEventListener("deviceready", onDeviceReady, false);
- // PhoneGap加載完畢
- function onDeviceReady() {
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
- }
- // 獲取位置信息成功后調用的回調函數
- function onSuccess(position) {
- var element = document.getElementById('geolocation');
- element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
- 'Longitude: ' + position.coords.longitude + '<br />' +
- 'Altitude: ' + position.coords.altitude + '<br />' +
- 'Accuracy: ' + position.coords.accuracy + '<br />' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
- 'Heading: ' + position.coords.heading + '<br />' +
- 'Speed: ' + position.coords.speed + '<br />' +
- 'Timestamp: ' + new Date(position.timestamp) + '<br />';
- }
- // onError回調函數接收一個PositionError對象
- function onError(error) {
- alert('code: ' + error.code + '\n' +
- 'message: ' + error.message + '\n');
- }
- </script>
- </head>
- <body>
- <p id="geolocation">Finding geolocation...</p>
- </body>
- </html>
iPhone的特異情況:
- timestamp:單位為秒而非毫秒。
一種變通方法是手動將時間戳轉換為毫秒(*1000):
- var onSuccess = function(position) {
- alert('Latitude: ' + position.coords.latitude + '\n' +
- 'Longitude: ' + position.coords.longitude + '\n' +
- 'Timestamp: ' + new Date(position.timestamp * 1000) + '\n');
- };
- 當發生錯誤時,一個PositionError對象會傳遞給geolocationError回調函數。
屬性:
- code:一個在下面常量列表中定義的錯誤代碼。
- message:說明錯誤細節的錯誤信息。
常量:
- PositionError.PERMISSIONPositionError.PERMISSION_DENIED:權限被拒絕
- PositionError.POSITION_UNAVAILABLE:位置不可用
- PositionError.TIMEOUT:超時
說明:
- 當使用Geolocation發生錯誤時,一個PositionError對象會作為geolocationError回調函數的參數傳遞給用戶。
- 一系列用來描述位置的地理坐標信息的屬性。
屬性:
- latitude:以十進制表示的緯度。(數字類型)
- longitude:以十進制表示的經度。(數字類型)
- altitude:位置相對于橢圓球面的高度,單位為米。(數字類型)
- accuracy:以米為單位的緯度和經度坐標的精度水平。(數字類型)
- altitudeAccuracy:以米為單位的高度坐標的精度水平。(數字類型)
- heading:運動的方向,通過相對正北做順時針旋轉的角度指定。(數字類型)
- speed:以米/秒為單位的設備當前地面速度。(數字類型)
說明:
- 作為Position對象的一部分,Coordinates對象是由PhoneGap創建和填充的。該Position對象會作為一個回調函數的參數返回用戶。
支持的平臺:
- Android
- BlackBerry (OS 4.6)
- BlackBerry WebWorks (OS 5.0或更高版本)
- iPhone
簡單的范例:
- // 獲取位置信息成功后調用的回調函數
- var onSuccess = function(position) {
- alert('Latitude: ' + position.coords.latitude + '\n' +
- 'Longitude: ' + position.coords.longitude + '\n' +
- 'Altitude: ' + position.coords.altitude + '\n' +
- 'Accuracy: ' + position.coords.accuracy + '\n' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
- 'Heading: ' + position.coords.heading + '\n' +
- 'Speed: ' + position.coords.speed + '\n' +
- 'Timestamp: ' + new Date(position.timestamp) + '\n');
- };
- // 獲取位置信息出錯后調用的回調函數
- var onError = function() {
- alert('onError!');
- };
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
完整的范例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>Geolocation Position Example</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- // 設置一個當PhoneGap加載完畢后觸發的事件
- document.addEventListener("deviceready", onDeviceReady, false);
- // PhoneGap加載完畢并就緒
- function onDeviceReady() {
- navigator.geolocation.getCurrentPosition(onSuccess, onError);
- }
- // 顯示位置信息中的“Position”屬性
- function onSuccess(position) {
- var div = document.getElementById('myDiv');
- div.innerHTML = 'Latitude: ' + position.coords.latitude + '<br/>' +
- 'Longitude: ' + position.coords.longitude + '<br/>' +
- 'Altitude: ' + position.coords.altitude + '<br/>' +
- 'Accuracy: ' + position.coords.accuracy + '<br/>' +
- 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br/>' +
- 'Heading: ' + position.coords.heading + '<br/>' +
- 'Speed: ' + position.coords.speed + '<br/>';
- }
- // 如果獲取位置信息出現問題,則顯示一個警告
- function onError() {
- alert('onError!');
- }
- </script>
- </head>
- <body>
- <div id="myDiv"></div></body>
- </html>
Android的特異情況:
- altitudeAccuracy: Android設備上不支持該屬性,返回值總是null。
責任編輯:佚名
來源:
PhoneGap中國