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