APICloud(六):使用aMapLBS进行定位

时间:2024-03-15 15:47:33

在APICloud的模块库里边用于定位的地图有很多,如百度、高德,我这里用高德地图进行定位。基本过程如下:

1、在app的模块中添加“aMapLBS”模块

 

2、获取高德地图的 API Key

a、去高德开放平台注册一个开发者账号,链接:http://lbs.amap.com/

b、在高德开放平台中创建一个应用:控制台--->应用管理---->创建新应用,如图:
APICloud(六):使用aMapLBS进行定位
应用名称随便填一个,应用类型根据app的作用选择一个类型,我这里选“生活” 。

c、添加新Key:选择刚刚创建的应用,点击右侧的“添加新Key”,弹出框如下图:
APICloud(六):使用aMapLBS进行定位
key名称:根据命名规范命名,最好也根据下APP的名称和作用。

服务平台:根据APP的服务平台写就好,我这里选的Android

发布版安全码SHA1:使用APICloud平台开发的这个很方便,因为APICloud平台已经提供给你了。打开APICloud找到需要添加定位信息的APP,点击左侧的概览,如图:
APICloud(六):使用aMapLBS进行定位
通过点击“概览”  之后看到的东西比较少,基本上只能看到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(这次这个问题就是这么解决的)。