Cordova介紹
Cordova是從PhoneGap中抽出的核心代碼,是驅動PhoneGap的核心引擎
技術探索
常見地理坐標編碼:
高德地圖: GCJ-02
百度地圖:BD-09
GPS: WGS-84
主流定位原理:
集合 gps,基站,wifi定位機制,單一定位弊端明顯。
百度地圖坐標轉換原理圖
高德地圖坐標轉換原理圖
坐標編碼轉化:
GPS(WGS-84)轉 GCJ-02(國內地理坐標編碼)
JS優秀項目 : https://github.com/hiwanz/wgs2mars.js.git
cordova官方項目
Cordova Geolocation Plugin
下載地址:https://github.com/apache/cordova-plugin-geolocation.git
百度android sdk5.0 cordova版本
下載地址:https://github.com/eleme/phonegap_baidu_sdk_location.git
支持返回GCJ-02、BD-09編碼,默認返回GCJ-02編碼
備注:不了解 github.com 的小伙伴們強烈建議去玩下,接下來我會將很多優秀項目介紹給大家
實現細節
技術難點:兼容性
簡單粗暴的javascriptAPI , 百度,高德測試安卓機,都出現機型兼容性問題,技術路線不通;
國內定位geolocation安卓機存在兼容性問題,技術路線不通;
百度和高德在國內定位做的還算不錯,兼容性問題很小,技術探索可將百度androidSDK/高德androidSDK封裝成cordova 插件,技術路線走通;
IOS定位 geolocation 定位較好,不存在兼容性問題,但存在地理坐標編碼問題,geolocation 返回GPS(WGS-84)編碼,上文介紹已能解決, 技術路線走通;
逆編碼問題: Amap之痛,高德javascript采用比較惡心的多次回調,普通調用方式,在cordova項目中壓根不起作用,嘗試過各種方 式,<script></script> 無效,ajax 獲取 js文件,eval(js文件),存在比較惡心的第一次使用白屏,document.write()同樣不行,偶然嘗試了 jsonp機制,有效,分析其原理,然后衍生出兼容angular.js的javascript版本,技術路線走通;
高德地圖javascriptAPI引入cordova項目,tokenkey需要自己去申請
// 初始化Amap
function __initAmap(callback) {
if (typeof AMap === 'undefined') {
//jquery版本
// $$.getJSON('http://webapi.amap.com/maps?v=1.3&key=tokenkey' + '&callback=theFunctionName', {}, callback);
// javascript版本(兼容angular.js)
window.onloadAMap = function () {
callback();
};
var url = 'http://webapi.amap.com/maps?v=1.3&key=tokenkey&callback=onloadAMap';
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.querySelector('head').appendChild(script);
} else {
callback();
}
}
最終實現方案
ios定位 gelocation
android定位 將最新版本baidu sdk 5.0封裝成 cordova插件
ios,android 逆編碼: 采用高德 javascriptAPI.
高德Amap的技術探索成功,將可實現所有地圖相關功能,包括繪制地圖,覆蓋圖層,導航等等....一切都基於Amap;
demo
未完待續
技術交流: var.object@gmail.com