W3C地理位置應用程序接口
W3C地理位置應用程序接口(W3C Geolocation API)是一項由萬維網聯盟提出的標準,旨在標準化接收客戶端側設備的地理位置信息的接口。[1]此標準定義了一系列兼容ECMAScript標準的對象,這些對象執行於客戶端應用程序中並通過查詢對應用程序接口(API)透明的位置信息服務器獲得設備位置。最常見的位置信息來源為IP地址、Wi-Fi、藍牙、MAC地址、射頻識別(RFID)、Wi-Fi接入位置、設備全球定位系統(GPS)及GSM/CDMA小區識別碼。隨後服務器根據可用的最佳位置信息返回特定精度的地理位置。
部署於網頁瀏覽器
[編輯]網頁可在瀏覽器實現的情況下使用地理位置API。歷史上,某些瀏覽器可通過Google Gears插件實現此功能,但這一項目於2010年廢止且其依賴的服務端側API於2012年停止響應。[2][3]
地理位置API適合應用於與移動設備(如個人數碼助理與智能手機)適配的網頁程序。在桌面計算機上,W3C地理位置API自Firefox 3.5、Google Chrome、[4]Opera 10.6、[5]Internet Explorer 9.0、[6]和Safari 5即被支持。掌上設備上,它適用於Android(固件版本2.0+)、iOS、Windows Phone與Maemo。W3C地理位置應用程序接口同樣被發布於2010年11月24日的Opera Mobile 10.1實現,支持對Android和Symbian(S60第3及第5代)系統。[7]
Google Gears為老舊和不兼容的瀏覽器提供了地理位置支持,包括Internet Explorer 7.0+,且Google Chrome原生實現Gears的功能。它同樣也能在移動設備上支持地理位置,通過提供Android瀏覽器(2.0版本之前)及Windows Mobile版Opera Mobile插件的方式實現。但是,Google Gear API與W3C地理位置API且已不受支持。
特性
[編輯]W3C地理位置API的結果通常會返回4項位置屬性:經度、緯度(坐標)、海拔(高度)和[位置精度]。這些數據均基於位置來源。在某些查詢中,海拔可能不返回任何值。
位置來源
[編輯]地理位置API不提供位置信息。位置信息由設備所獲取(例如智能手機、PC或調製解調器),隨後才能在瀏覽器中被API所服務。通常地理位置將通過使用這些方法的其中一種來嘗試確定設備位置。
- GPS(全球定位系統)
- 通常適用於有着GPS的設備。一部有着GPS且設置到高精度模式的智能手機可能從此來源獲取位置數據。GPS從衛星信號中計算位置信息。此方法有着最高的準確度;在大多數Android智能手機中,定位準確度可達到10米內。
- 移動網絡位置
- 手機追蹤可在無需內置GPS芯片的情況下定位手機或無線調製解調器。
- WiFi定位系統
- 若在室內使用WiFi,設備最有可能使用WiFi定位系統。部分wifi接入點有着定位服務能力。
- IP位置定位
- 基於最近具有公網IP設備(可為計算機、所連接的路由器或是路由器所使用的ISP)的檢測位置。此位置信息基於可用的IP信息,但諸多情況下用戶的IP都隱藏在互聯網服務提供商NAT的背後,精度只能確保為城市級、地區級甚至是國內級。
實現
[編輯]雖然W3C地理位置API未規定實現方法,但是它基於現有的技術構建而成且被Google Gears地理位置API所嚴重影響。例如:Firefox的地理位置實現[8]使用Google的網絡定位提供商。[9]
Google Gears地理位置通過發送可提示用戶物理位置的一系列參數至網絡定位提供商服務器工作,定位服務器默認為Google所提供的(code.l.google.com)。[10]部分參數為檢測到的移動基站及Wi-Fi網絡列表與其信號強度。這些參數隨後被打包進JavaScript對象表示法(JSON)信息中並通過HTTP POST發送至網絡定位提供商。基於這些參數,網絡定位提供商可計算位置。人們通常使用位置信息來強制訪問控制、本地化與自定義內容;分析流量、個人化網路廣告並防止可能的身份竊取。[11]
示例代碼
[編輯]下列是一段用於檢測瀏覽器是否包含地理位置API並利用其來獲取當前設備位置的簡單JavaScript代碼。這段代碼使用<body onload="geoFindMe()">
創建了可於HTML中調用的函數:
const geoFindMe = () => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, error, geoOptions);
} else {
console.log("阁下的网页浏览器不支持地理位置服务。");
}
}
const success = (position) => {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const altitude = position.coords.altitude;
const accuracy = position.coords.accuracy;
console.log(`纬度:${latitude} 经度:${longitude}`);
}
const error = (error) => {
console.log(`由于 ${error.code}: ${error.message} 无法获取阁下的位置`);
}
const geoOptions = {
enableHighAccuracy: true,
maximumAge: 30000,
timeout: 27000
};
另請參閱
[編輯]參考文獻
[編輯]- ^ Popescu, Andrei (editor, Google Inc.). Geolocation API Specification: W3C Recommendation 24 October 2013. W3C. [4 February 2016]. (原始內容存檔於2021-05-24).
- ^ Geolocation API: Gears API: Google Code. 9 July 2009 [2018-08-11]. (原始內容存檔於2012-03-11).
- ^ GeolocationAPI - gears - Provides the geolocation of a device running a Gears-enabled web browser. - Improving Your Web Browser - Google Project Hosting (頁面存檔備份,存於網際網路檔案館). Code.google.com. Retrieved on 2014-06-01.
- ^ A new Chrome stable release: Welcome, Mac and Linux!. 25 May 2010 [2018-08-11]. (原始內容存檔於2011-10-07).
- ^ Kleinhout, Huib. Opera 10.60 goes final. My Opera. Opera Software. 1 July 2010 [2 July 2010]. (原始內容存檔於2010-07-02).
- ^ W3C Geolocation API in IE9. [2018-08-11]. (原始內容存檔於2011-06-24).
- ^ Opera.com. Opera Mobile 10.1 for Nokia smartphones goes final. 2010-11-25 [2018-08-11]. (原始內容存檔於2013-02-23).
- ^ Location-Aware Browsing. Mozilla Firefox. Mozilla. [2018-08-11]. (原始內容存檔於2018-02-20).
- ^ Geolocation API Network Protocol: Gears API. Google Code. Google. [8 August 2011]. (原始內容存檔於2012-02-18).
- ^ WebScanNotes.com: W3C Geolocation API. WebScanNotes.com. [2018-08-11]. (原始內容存檔於2012-03-06).
- ^ King, Kevin F. Personal Jurisdiction, Internet Commerce, and Privacy: The Pervasive Legal Consequences of Modern Geolocation Technologies. 8 June 2010. SSRN 1622411 .