更新记录
1.0.0(2022-01-19)
高德官方demo功能实现,支持地图样式、定位样式、交通图、室内图等等,支持地图上绘制点标记、地图选点、地图截屏等等,支持地理位置、反地理位置编码,周边美食、景点等搜索
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
推荐使用UTS插件版本(更新升级快)https://ext.dcloud.net.cn/plugin?id=16399
前言
高德官方demo功能实现,支持地图样式、定位样式、交通图、室内图等等,支持地图上绘制点标记、地图选点、地图截屏等等,支持地理位置、反地理位置编码,周边美食、景点等搜索
快速接入
- 在高德地图开放平台(https://console.amap.com/dev/key/app)[https://console.amap.com/dev/key/app]创建Android、iOS应用
- 在uniapp项目的manifest.json的App模块配置的Maps里勾选高德地图,填写Android、iOS的appkey
- 在manifest.json-》原生插件-》云端插件,选择本插件
- 自定义基座
- 运行基座选择自定义基座
- 配置定位权限,参考下面的隐私、权限声明
- App.vue启动时初始化,配置apiKey,跟上面的appkey是同一个key
var amap = uni.requireNativePlugin("wrs-amap");
var apiKey = "";
switch (uni.getSystemInfoSync().platform) {
case 'android':
apiKey = "6de35db11f99a189b38e8e58282b371a";
break;
case 'ios':
apiKey = "832c07aa99ac50592455b721606475c8";
break;
default:
break;
}
// ios没有调用初始化key的话poi功能无法搜索
amap.init({
apiKey:apiKey
});
- 根据高德地图的政策,app第一次启动时,需要弹框提示用户隐私合规示例
try {
// //判断是否是首次启动,隐私信息显示一次就可以了
const value = uni.getStorageSync('agreeStatus');
// if (!value) {
if (true) {
try {
uni.setStorageSync('agreeStatus', 'firstStart');
} catch (e) {
// error
}
//更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态.
var privacyShow = {};
privacyShow.showStatus = 1;// 显示隐私弹窗状态 -1: unknow , 0 : 未显示 , 1 : 已显示
privacyShow.containStatus = 1; // 集成SDK隐私信息状态 -1: unknow , 0 : 未集成 , 1 : 已集成
amap.updatePrivacyShow(privacyShow);
uni.showModal({
title: '温馨提示(隐私合规示例)',
content: '\n亲,感谢您对XXX一直以来的信任!我们依据最新的监管要求更新了XXX《隐私权政策》,特向您说明如下\n1.为向您提供交易相关基本功能,我们会收集、使用必要的信息;\n2.基于您的明示授权,我们可能会获取您的位置(为您提供附近的商品、店铺及优惠资讯等)等信息,您有权拒绝或取消授权;\n3.我们会采取业界先进的安全措施保护您的信息安全;\n4.未经您同意,我们不会从第三方处获取、共享或向提供您的信息;',
success: function (res) {
var params = {};
// -1: unknow , 0 : 未同意 , 1 : 已同意
if (res.confirm) {
params.agreeStatus = 1;
} else if (res.cancel) {
params.agreeStatus = 0;
}
//更新用户授权高德SDK隐私协议状态
amap.updatePrivacyAgree(params);
}
});
}
} catch (e) {
// error
}
- 使用地图UI控件,页面需要使用nvue
<wrs-amapview ref='mapview' :style="'width:'+width+'px;height:'+height+'px;'">
</wrs-amapview>
地图API
设置地图图层类型
var params = {};
params.mapType = 2;
this.$refs.mapview.updateMap(params);
mapType:
- 0:普通地图
- 1:卫星地图
- 2:夜间视图
- 3:导航视图
- 4:公交视图
设置用户定位追踪模式
var params = {};
params.userTrackingMode = 2;
this.$refs.mapview.updateMap(params);
userTrackingMode:
ios:
- 0:不追踪用户
- 1:追踪用户
- 2:追踪用户location与heading
android:
- 0: 只定位,不进行其他操作
- 1: 追踪用户的location更新
- 2: 设置定位的类型为 跟随模式
- 3: 设置定位的类型为根据地图面向方向旋转
- 4: 定位、且将视角移动到地图中心点,定位点依照设备方向旋转, 并且会跟随设备移动。
- 5: 定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。
- 6: 定位、但不会移动到地图中心点,并且会跟随设备移动。
- 7: 定位、但不会移动到地图中心点,地图依照设备方向旋转,并且会跟随设备移动。
是否显示用户位置,即开始定位/停止定位
var params = {};
params.showsUserLocation = true;
this.$refs.mapview.updateMap(params);
是否显示用户位置,即开始定位/停止定位
var params = {};
params.showsUserLocation = true;
this.$refs.mapview.updateMap(params);
是否显示交通路况图层
var params = {};
params.showTraffic = true;
this.$refs.mapview.updateMap(params);
是否显示室内地图
var params = {};
params.showsIndoorMap = true;
this.$refs.mapview.updateMap(params);
自定义地图样式
// 显示
var params = {};
params.customMapStyle = {
enable: true,
path: "/ssss/my_style_new.data"
};
this.$refs.mapview.updateMap(params);
// 不显示
var params = {};
params.customMapStyle = {
enable: false
};
this.$refs.mapview.updateMap(params);
自定义定位蓝点
var myLocationStyle = {};
myLocationStyle.image = "/sss/ss.png"; // 本地图片地址
myLocationStyle.strokeColor = "#ff0000"; // 精度圈 边线颜色
myLocationStyle.fillColor = "#ff0000"; // 精度圈 填充颜色
myLocationStyle.strokeWidth = 2; // 精度圈 边线宽度
myLocationStyle.showsAccuracyRing = true; // 精度圈是否显示,仅支持iOS
myLocationStyle.showsHeadingIndicator = true; // 是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启),仅支持iOS
var params = {};
params.myLocationStyle = myLocationStyle;
this.$refs.mapview.updateMap(params);
设置地图的中心点
var params = {};
params.centerCoordinate = {
latitude: 39.907728,
longitude: 116.397968
};
this.$refs.mapview.updateMap(params);
设置缩放级别
ios:(默认3-19,有室内地图时为3-20)
var params = {};
params.zoomLevel = 15;
params.zoomLevelAnimate = true;
this.$refs.mapview.updateMap(params);
地图放大一级
var params = {};
params.zoomIn = true;
params.zoomInAnimate = true;
this.$refs.mapview.updateMap(params);
地图缩小一级
var params = {};
params.zoomOut = true;
params.zoomOutAnimate = true;
this.$refs.mapview.updateMap(params);
设置地图最小缩放级别
var params = {};
params.minZoomLevel = 3;
this.$refs.mapview.updateMap(params);
设置地图最大缩放级别
var params = {};
params.maxZoomLevel = 19;
this.$refs.mapview.updateMap(params);
是否显示比例尺
var params = {};
params.showsScale = true;
this.$refs.mapview.updateMap(params);
是否显示指南针
var params = {};
params.showsCompass = true;
this.$refs.mapview.updateMap(params);
增加点标记AnnotaionMarker
var path = "_www";
var absPath = plus.io.convertLocalFileSystemURL(path);
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var image1 = absPath + "/static/greenPin_lift";
var image2 = absPath + "/static/amap_through";
// ios会自动加载.png的1/2/3倍图
switch (uni.getSystemInfoSync().platform) {
case 'android':
image1 += ".png";
image2 += ".png";
break;
default:
break;
}
var latitudes = [39.992520, 39.992520, 39.998293, 40.004087, 40.001442, 39.989105, 39.989098,
39.998439, 39.979590, 39.978234
];
var longitudes = [116.336170, 116.336170, 116.352343, 116.348904, 116.353915, 116.353915, 116.360200,
116.360201, 116.324219, 116.352792
];
var annotationMarkers = [];
for (var i = 0; i < latitudes.length; i++) {
var latitude = latitudes[i];
var longitude = longitudes[i];
var image = null;
if (i % 2 == 0) {
image = image1;
} else {
image = image2;
}
var selected = false;
if (i == 0) {
selected = true;
}
var lockedToScreen = false;
if (i == 0) {
lockedToScreen = true;
}
annotationMarkers.push({
title: "北京" + i,
subtitle: "北京是中国的首都" + i,
coordinate: {
latitude: latitude,
longitude: longitude
},
image: {
type: "local",
path: image
},
canShowCallout: true, // 点击时,是否显示消息介绍提示窗口
draggable: true, // 是否可以拖拽
selected: selected, // 是否选中,同一时间只选中一个
lockedToScreen: lockedToScreen // 是否固定在屏幕上
});
}
var params = {};
params.annotationMarkers = annotationMarkers;
params.showAllAnnotationMarkers = true; // 是否缩放地图显示完所有的AnnotationMarker
params.removeCurAllAnnotationMarkers = true; // 是否移除当前地图上的AnnotationMarker
this.$refs.mapview.addAnnotationMarkers(params);
地图wrs-amapview事件
-
加载地图事件@onLoadMap 所有的API都需要在onLoadMap事件时或之后调用
-
点击了点AnnotationMarker事件, @onClickAnnotationMarker
-
点击了AnnotationMarker上的消息介绍提示窗口事件, @onClickCallout
搜索周边POI
var amap = uni.requireNativePlugin("wrs-amap");
var params = {};
// 搜索关键字,多个关键字用“|”分割
params.query = this.query;
// 类型,多个类型用“|”分割 可选值:文本分类、分类代码
// params.ctgy =
params.pageNum = 1;
params.pageSize = 20;
// 查询城市,可选值:cityname(中文或中文全拼)、citycode、adcode。注:当用户指定的经纬度和city出现冲突,若范围内有用户指定city的数据,则返回相关数据,否则返回为空。
// params.city = "北京";
if (this.locationDetail) {
// 搜索中心点坐标,跟city二选一即可
params.searchBound = {
latitude: this.locationDetail.location.latitude,
longitude: this.locationDetail.location.longitude,
radiusInMeters: 500
};
}
amap.poiSearch(params, (resp) => {
var flag = resp.flag;
if (flag) {
var pois = resp.pois;
} else {
uni.showModal({
title: '搜索结果',
content: "关键字:" + this.query + " 没有搜索到数据",
success: function(res) {
}
});
}
} else {
var str = JSON.stringify(resp);
uni.showModal({
title: '搜索错误',
content: str,
success: function(res) {
}
});
}
});
地理编码
var params= {};
params.city = this.city;
params.name = this.name;
amap.geocodeSearched(params, (resp) => {
var flag = resp.flag;
var str = JSON.stringify(resp);
if(flag) {
this.msg = str;
} else {
this.msg = "地理编码错误:" + str;
}
});
逆地理编码
var params= {};
params.latitude = this.latitude;
params.longitude = this.longitude;
params.radius = this.radius;
params.type = "autonavi"; // 仅支持Android,输入参数坐标类型,autonavi:高德坐标,gps:GPS坐标
amap.regeocodeSearched(params, (resp) => {
var flag = resp.flag;
var str = JSON.stringify(resp);
if(flag) {
this.msg = str;
} else {
this.msg = "反地理编码错误:" + str;
}
});