在APICloud的模块库里边用于定位的地图有很多,如百度、高德,我这里用高德地图进行定位。基本过程如下:
1、在app的模块中添加“aMapLBS”模块;
2、获取高德地图的 API Key。
a、去高德开放平台注册一个开发者账号,链接:http://lbs.amap.com/
b、在高德开放平台中创建一个应用:控制台--->应用管理---->创建新应用,如图:
应用名称随便填一个,应用类型根据app的作用选择一个类型,我这里选“生活” 。
c、添加新Key:选择刚刚创建的应用,点击右侧的“添加新Key”,弹出框如下图:
key名称:根据命名规范命名,最好也根据下APP的名称和作用。
服务平台:根据APP的服务平台写就好,我这里选的Android
发布版安全码SHA1:使用APICloud平台开发的这个很方便,因为APICloud平台已经提供给你了。打开APICloud找到需要添加定位信息的APP,点击左侧的概览,如图:
通过点击“概览” 之后看到的东西比较少,基本上只能看到APP信息。点击右下角的^就能看到更全的,像“appKey”、像“Android签名证书SHA1码”、像“Android包名”,这些都是我们需要的好东东。
将APICloud项目概览中的“Android签名证书SHA1码”复制到高德的“发布版安全SHA1”中。
PackageName:获取方法跟获取SHA1码是一样的,将APICloud项目概览中的“Android包名”复制过来就好啦。
d、提交
e、提交成功后,应用下方就会多出一条刚刚创建的Key信息,至此获取API Key完成。
3、将 API Key配置到项目的config.xml文件中:
<feature name="aMapLBS"> <param name="android_api_key" value="f7Is0dWLom2q6rV3ZfFPZ1aa"/> </feature>
注意:一个API key只能对应于一个APP项目,多个APP中使用同一个API key会出现异常。
4、页面使用Demo:
/** *点击“所在位置”所在a标签时触发该事件,该事件用来定位当前所处位置 * @param obj:点击的A标签 * **/ function loadPosition(){ var aMapLBS = api.require('aMapLBS');//引入模块 //配置定位信息 aMapLBS.configManager({ accuracy: 'hundredMeters', filter: 1 }, function(ret, err) { if (ret.status) { //先取消其他定位 aMapLBS.stopUpdatingLocation(); //先定位经纬度 aMapLBS.singleLocation({ timeout: 10 },function(ret,err){ if (ret.status) { //alert(JSON.stringify(ret)); //alert("经度:"+ret.lon+"\n纬度:"+ret.lat); $("#longitude").val(ret.lon); $("#latitude").val(ret.lat); //直接定位地址 aMapLBS.singleAddress({ timeout: 10 }, function(ret2, err2) { if (ret2.status) { //alert(JSON.stringify(ret2));//获取所属兴趣点名称 var address = ret2.address.AOIName; $("#position").text(ret2.address.AOIName); } }); } }); } }); }
注意:添加新的模块之后,需要自定义loader,不能再使用系统的loader,也不能再使用以前的loader,需要重新编译自定义loader。重新编译并下载安装之后,最好来一次“全量真机同步” 。有时候重编且全量同步之后依旧报错(最近一次使用就是在调用aMapLBS.singleLocation时,ret.status一直是false),可以尝试下云编译(云编译之前记得把所有需要提交的代码都提交)编译完成后看看是否有问题,若没有问题再重新编译自定义loader(这次这个问题就是这么解决的)。