更新记录
1.0.0(2026-01-12)
- 初次提交
平台兼容性
uni-app x(4.85)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
6.0 |
× |
× |
× |
前言
- 插件集成了高德地图SDK,导航SDK,功能参考截图所示
- 点击下载演示程序,需在电脑端下载,手机端不支持
- 请试用后满意再购买
- 该插件不能单独使用,需同时依赖我的高德定位插件才能使用
- 目前高德已经开始频繁找开发者支付授权费了,使用的时候注意调用频率不要太高!商用还是给钱吧。
接入步骤
- 请先在高德开放平台申请你的appkey
- 导入插件包到uni_modules下
- 打包自定义基座,打包好后最好重启一次HBX,否则可能无法调用插件
- 导入示例项目
//基础使用示例,导入示例项目查看完整功能
<template>
<view style="height: 100%;width: 100%;">
<!-- 引入组件 -->
<Sly-UTSAMap3dNav class="mapView" @onViewCreated="onViewCreated"></Sly-UTSAMap3dNav>
....
</view>
</template>
<script>
import { NativeMapViewContext } from '../../uni_modules/Sly-UTSAMap3dNav/utssdk/app-android';
type MapViewContext = NativeMapViewContext | null;
export default {
data():{
return{
//地图上下文对象,后续基于地图的所有操作都要通过它来调用
mapContext: null as MapViewContext,
}
},
onUnload() {
//销毁组件
this.mapContext?.destroy()
},
methods:{
onViewCreated(e : UniNativeViewEvent) {
//组件创建完成后获取mapContext
this.mapContext = e.detail.context! as MapViewContext;
//设置地图风格
this.mapContext?.setMapStyle({
enabledMyLocation: true,//启用定位
interval: 2000,//连续定位间隔
myLocationType: 1,//定位模式
showCompass: true,
showScaleControls: true,
})
},
}
}
</script>
<style>
.mapView {
height: 600rpx;
width: 100%;
}
</style>
常用方法(IDE中调用方法时都会有详细说明,这里只做简单说明)
| 方法 |
说明 |
参数说明 |
返回结果 |
| getAMap() |
获取原生AMap对象 |
无 |
any(原生AMap对象) |
| setMapLanguage(lan:string) |
设置地图显示语言:中文或英文 |
"zh_cn"或"en" |
void |
| setMapStyle(options:MapStyleOptions) |
设置地图样式 |
见map-options对应 |
void |
| getUiSettings() |
获取地图ui控制器 |
无 |
内置AMapUiSettings类对象 |
| getMapCenterLngLat() |
获取当前地图中心坐标 |
无 |
[lng:number,lat:number] |
| setMapZoom(zoom:number) |
设置地图当前的缩放等级 |
3-20 |
void |
| setMapZoomRange(min:number,max=20) |
设置地图的缩放范围 |
3-20 |
void |
| getMapZoom() |
获取当前地图缩放等级 |
无 |
number |
| getMapSate() |
获取当前地图状态(方向,是否在国内,中心点,区域倾斜度,缩放等级) |
无 |
UTSJSONObject |
| getMapContentApprovalNumber() |
获取地图审图号(普通地图) |
无 |
void |
| clear(isKeepMy=true) |
从地图上删除所有的覆盖物 |
true表示保留我的位置 |
void |
| move2Center(lng:number,lat:number,zoom=10) |
移动地图中心到指定坐标 |
经度,纬度,缩放等级 |
void |
| addPolyline(options:MapPolylineOptions) |
绘制线段 |
见map-options对应 |
any(原生Polyline对象) |
| removePolyline(polyline:any) |
移除绘制的线段 |
上面返回的对象 |
void |
| addMarker(options:MapMarkerOptions) |
绘制点标记 |
见map-options对应 |
any(原生Marker对象) |
| removeMarker(marker:any) |
移除绘制的点标记 |
上面返回的对象 |
void |
| addCircle(options:MapCircleOptions) |
绘制圆 |
见map-options对应 |
any(原生Cicle对象) |
| removeCircle(circle:any) |
移除绘制的圆 |
上面返回的对象 |
void |
| addTileOverlay(options:MapTileOverlayOptions) |
绘制热力图 |
见map-options对应 |
any(原生TileOverlay对象) |
| removeTileOverlay(overlay:any) |
移除热力图 |
上面返回的对象 |
void |
| addMultiPoint(options:MapMultiPointOptions) |
绘制海量点 |
见map-options对应 |
any(原生MultiPointOverlay对象) |
| removeMultiPoint(multiPointOverlay:any) |
移除海量点 |
上面返回的对象 |
void |
| startSmoothMove(options:MapStartSmoothOptions) |
创建一个marker并执行平滑运动(轨迹回放) |
见map-options对应 |
any(原生MovingPointOverlay对象) |
| stopSmoothMove(smoothMarker:any) |
停止平滑移动 |
上面返回的对象 |
void |
| removeSmoothMarker(smoothMarker:any) |
移除平滑移动对象图层 |
上面返回的对象 |
void |
| setOnMapClickListener(callback:MapClickCallback) |
地图单击和长按事件 |
见event-listeners对应 |
Array(原生事件监听器组合) |
| removeMapClickListener(listeners:any[]) |
移除上面监听的事件 |
上面返回的监听器 |
void |
| setOnMapTouchListener(callback:MapTouchCallback) |
地图触摸事件 |
见event-listeners对应 |
any(原生事件监听器) |
| removeMapTouchListener(listener:any) |
移除上面监听的事件 |
上面返回的监听器 |
void |
| setOnCameraChangeListener(callback:MapCameraChangeCallback) |
地图视野变化事件 |
见event-listeners对应 |
any(原生事件监听器) |
| removeCameraChangeListener(listener:any) |
移除上面监听的事件 |
上面返回的监听器 |
void |
| setOnMarkerClickListener(callback:MapMarkerClickCallback) |
marker和其infowindow的点击事件监听 |
见event-listeners对应 |
Array(原生事件监听器组合) |
| removeMarkerClickListener(listener:any[]) |
移除上面监听的事件 |
上面返回的监听器 |
void |
| setOnPolyineClickListener(callback:MapPolylineClickCallback) |
线段点击事件 |
见event-listeners对应 |
any(原生事件监听器) |
| removePolylineClickListener(listener:any) |
移除上面监听的事件 |
上面返回的监听器 |
void |
| setOnMultiPointClickListener(callback:MapMultiPointClickCallback) |
海量点的点击事件监听 |
见event-listeners对应 |
any(原生事件监听器) |
| [禁用]removeMultiPointClickListener(listener:any) |
SDK没有提供移除海量点点击事件的方法 |
无 |
void |
| openOfflineMapPage() |
打开离线地图管理页面 |
无 |
void |
| openNaviPage(options:MapNaviOptions) |
打开内置导航 |
见map-options对应 |
void |
| destroy() |
销毁地图组件 |
无 |
void |
特殊方法调用说明
| uts插件只能对第三方sdk的方法进行“翻译”,上面“翻译”了常用的方法,高德sdk内部还有非常多的方法,插件不可能翻译所有方法,
好在可以利用Java的反射机制,当上面的方法不能满足你的需求时,使用插件提供的反射工具,可以调用高德SDK中任意方法和属性(需参考高德官方api手册),
需要开发者具有一定的java知识,需要的时候可以咨询。 |
方法 |
说明 |
参数说明 |
返回结果 |
| ReflectUtils.getJavaClassByPath(classPath:string) |
获取app环境任意类的Class |
java包路径 |
Class |
| ReflectUtils.getClassInstanceByConstructor(ClassPath : string, params :MethodParam[]) |
执行App运行环境下存在的类的构造函数,创建其实例,之后可以调用其内部方法和属性 |
java包路径和MethodParam |
any |
| ReflectUtils.getInstancePropertyValue(instance : any, key : string) |
获取实例的属性 |
java对象实例和属性字段 |
any |
| ReflectUtils.invokeInstanceMethod(instance : any, methodName : string, params :MethodParam[]) |
执行实例的方法 |
java对象实例,方法名和MethodParam |
any |
| ReflectUtils.invokeStaticMethod(ClassPath : string,, methodName : string, params :MethodParam[]) |
执行类的静态方法 |
类包名,方法名和MethodParam |
any |
| ReflectUtils.proxyInterface(interfaceClassPath : string, callbacks:InterfaceMethodCallback[]) |
原生接口动态代理,可以监听一些上面未提供的事件 |
接口包名,和InterfaceMethodCallback |
any |
MethodParam说明
export type MethodParam = {
/**@property 要传入的值,例如字符串:"hello"*/
value : any;
/**@property 传入的值的java类型或类型所在包路径,例如字符串所属类:UTSAndroid.getJavaClass(String)或其包路径:java.lang.String */
jvClass : Class<any> | string;
}
InterfaceMethodCallback说明
export type InterfaceMethodCallback = {
/**@property 要监听的方法名*/
method : string;
/**@property 该方法回调后的参数*/
callback : (args : any[]) => any | null;
}
AMapUiSettings类
/**
* @description 对高德类UiSettings的封装
*/
export class AMapUiSettings {
private setting : UiSettings;
constructor(setting : UiSettings: ) {
this.setting = setting;
}
/**
*@description 设置所有手势是否可用
*/
setAllGesturesEnabled(enabled : boolean) {
this.setting.setAllGesturesEnabled(enabled)
}
/**@description 设置指南针是否可见**/
setCompassEnabled(enabled : boolean) {
this.setting.setAllGesturesEnabled(enabled)
}
/**@description 设置是否以地图中心点缩放*/
setGestureScaleByMapCenter(isGestureScaleByMapCenter : boolean) { this.setting.setGestureScaleByMapCenter(isGestureScaleByMapCenter) }
/**@description 设置室内地图楼层切换控件是否可见。*/
setIndoorSwitchEnabled(isIndoorSwitchEnabled : boolean) { this.setting.setIndoorSwitchEnabled(isIndoorSwitchEnabled) }
/**@description 设置Logo下边界距离屏幕底部的边距*/
setLogoBottomMargin(pixels : number) { this.setting.setLogoBottomMargin(pixels.toInt()) }
/**@description 设置Logo左边界距离屏幕左侧的边距*/
setLogoLeftMargin(pixels : number) { this.setting.setLogoLeftMargin(pixels.toInt()) }
/**@description 设置“高德地图”Logo的位置。*/
setLogoPosition(position : number) { this.setting.setLogoPosition(position.toInt()) }
/**@description 设置定位按钮是否可见。*/
setMyLocationButtonEnabled(enabled : boolean) { this.setting.setMyLocationButtonEnabled(enabled) }
/**@description 设置旋转手势是否可用。*/
setRotateGesturesEnabled(enabled : boolean) { this.setting.setRotateGesturesEnabled(enabled) }
/**@description 设置比例尺控件是否可见*/
setScaleControlsEnabled(enabled : boolean) { this.setting.setScaleControlsEnabled(enabled) }
/**@description 设置拖拽手势是否可用。*/
setScrollGesturesEnabled(enabled : boolean) { this.setting.setScrollGesturesEnabled(enabled) }
/**@description 设置倾斜手势是否可用。*/
setTiltGesturesEnabled(enabled : boolean) { this.setting.setTiltGesturesEnabled(enabled) }
/**@description 设置缩放按钮是否可见。*/
setZoomControlsEnabled(enabled : boolean) { this.setting.setZoomControlsEnabled(enabled) }
/**@description 设置双指缩放手势是否可用。*/
setZoomGesturesEnabled(enabled : boolean) { this.setting.setZoomGesturesEnabled(enabled) }
/**@description 设置缩放按钮的位置。*/
setZoomPosition(position : number) { this.setting.setZoomPosition(position.toInt()) }
}
map-options参数集
/**
* @description 高德MyLocationStyle类和UISetting类设置参数[https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/MyLocationStyle.html]
*/
export type MapStyleOptions = {
/** @property 是否启用“我的位置”功能:地图定位按钮可用,并且进入地图就定位“我的位置”,默认也显示小蓝点*/
enabledMyLocation ?: boolean;
/** @property 是否显示“我的位置”小蓝点*/
showMyLocationIcon ?: boolean;
/** @property 设置定位(当前位置)的icon图标。*/
myLocationIcon ?: string;
/** @property 设置发起定位请求的时间间隔,myLocationType>=2时有效 */
interval ?: Long;
/**
* @property {MapMyLocationStyle} myLocationType 设置我的位置展示模式,模式为0-7,设置2以上就会持续定位,此时interval生效
* @pattern
* 0:只定位
* 1:定位、且将视角移动到地图中心点。
* 2:定位、且将视角移动到地图中心点,定位点跟随设备移动。
* 3:定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动
* 4:定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动
* 5:定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。
* 6:定位、但不会移动到地图中心点,并且会跟随设备移动。
* 7:定位、但不会移动到地图中心点,地图依照设备方向旋转,并且会跟随设备移动。
*/
myLocationType ?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
/** @property 设置圆形区域(以定位位置为圆心,定位半径的圆形区域)的填充颜色。*/
radiusFillColor ?: string;
/** @property 设置圆形区域(以定位位置为圆心,定位半径的圆形区域)的边框颜色*/
strokeColor ?: string;
/** @property 设置圆形区域(以定位位置为圆心,定位半径的圆形区域)的边框宽度。*/
strokeWidth ?: Float;
/** @property "我的位置"按钮是否可见*/
showMyLocationButton ?: boolean;
/** @property "缩放比例尺"是否可见*/
showScaleControls ?: boolean;
/** @property "指南针"按钮是否可见*/
showCompass ?: boolean;
}
/**
* @description 高德LatLng类设置参数
*/
export type MapLngLatOptions = {
/** @property double 纬度 */
latitude : number
/** @property double 经度 */;
longitude : number;
}
/**
* @description 高德PolylineOptions类设置参数[https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Polyline.html]
*/
export type MapPolylineOptions = {
/** @property 经纬度坐标集合 */
lnglats : number[][];
/** @property 线段纹理图片路径:‘/static/arrow.png’ */
texturePath ?: string;
/** @property 线段宽度,单位px */
width ?: number;
/** @property 线段Z轴的值 float */
zIndex ?: number;
/** @property 线段颜色‘#ff0000’ */
color ?: string;
/** @property 是否是虚线 */
isDottedLine ?: boolean;
/** @property 虚线形状:0|null:方形,1:圆形 */
dottedLineType ?: 0 | 1;
/** @property 是否是大地曲线 */
isGeodesic ?: boolean;
/** @property 是否使用渐变色(有纹理图时无效) */
isUseGradient ?: boolean;
/** @property 是否首尾相连闭合,用作绘制多边形 */
isClosed ?: boolean;
/** @property 设置线段的透明度0~1,1表示不透明 */
transparency ?: number;
}
/**
* @description 高德MakerOptions类设置参数[https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Marker.html]
*/
export type MapMarkerOptions = {
/** @property 在地图上标记位置的经纬度值。必填参数 */
lnglat : number[];
/** @property 设置Marker覆盖物的图标,不传或传入错误会使用默认蓝点,多张则会闪动播放 */
iconPaths ?: string[];
/** @property 点标记的标题 */
title ?: string;
/** @property 点标记的内容 */
snippet ?: string;
/** @property 点标记是否可拖拽 */
draggable ?: boolean;
/** @property 点标记是否可见 */
visible ?: boolean;
/** @property 将Marker设置为贴地显示,可以双指下拉地图查看效果 */
flat ?: boolean;
/** @property float,设置Marker覆盖物的图片旋转角度,从正北开始,逆时针计算。 */
rotateAngle ?: number;
/** @property float,点的透明度 */
alpha ?: number;
/** @property float,设置Marker覆盖物 zIndex。 */
zIndex ?: number;
/** @property float,marker的海拔 */
altitude ?: number;
/** @property float 锚点水平范围的比例,建议传入0 到1 之间的数值。 */
anchorU ?: number;
/** @property float 锚点垂直范围的比例,建议传入0 到1 之间的数值。 */
anchorY ?: number;
/** @property int 设置Marker覆盖物的InfoWindow相对Marker的偏移x。 */
infoWindowOffsetX ?: number;
/** @property int 设置Marker覆盖物的InfoWindow相对Marker的偏移y。 */
infoWindowOffsetY ?: number;
/** @property 是否默认显示infowindow */
isShowInfoWindow ?: boolean,
}
/**
* @description 高德CircleOptions类设置参数[https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Circle.html]
*/
export type MapCircleOptions = {
/** @property 中心坐标 */
centerLnglat : number[];
/** @property double 圆的半径,单位米。 */
raduis : number;
/** @property 圆的填充颜色 */
fillColor ?: string;
/** @property 边框颜色 */
strokeColor ?: string;
/** @property float,边框宽度 */
strokeWidth ?: number;
/** @property 是否边框虚线 */
isStrokeDotted ?: boolean;
/** @property 层级 */
zIndex ?: number;
/** @property 是否可见 */
isVisible ?: boolean;
}
/**
* @description 高德热力图类设置参数
*/
export type MapTileOverlayOptions = {
/** @property 热力点坐标 */
lnglats : number[][];
/** @property 渐变颜色数组 */
colors ?: string[];
/** @property 每一个颜色所占0.几的"宽度",之和为1,例如[0,0.3,0.7] */
colorWidths ?: number[];
}
/**
* @description 高德点平滑移动设置参数
*/
export type MapStartSmoothOptions = {
/** @property 轨迹坐标 */
lnglats : number[][];
/** @property 滑动的图标 */
marker : string;
/** @property 滑动的总时长(秒) */
totalDuration : number;
/** @property 移动监听
@param distance 距离终点还剩多少米
*/
onMoving ?: (distance : number) => void;
}
/**
* @description 高德海量点设置参数
*/
export type MapMultiPointOptions = {
/** @property 图标 */
icon : string;
/** @property 点坐标,建议不超过10万个 */
lnglats : number[][];
}
/**
* @description 高德Poi类
*/
export type MapPoiOptions = {
/** @property 名称 */
name ?: string;
/** @property 坐标 */
lnglat : number[],
/** @property poiId,需调用poiapi获取,传入该值将会执行 POI 的精确检索,获得 POI 详情后不仅会辅助算路,也会覆盖传入的经纬度和名称两个参数。 */
poiId ?: string;
}
/**
* @description 高德CarInfo类 [https://a.amap.com/lbs/static/unzip/Android_Navi_Doc/com/amap/api/navi/model/AMapCarInfo.html]
*/
export type MapCarInfoOptions = {
/** @property 车牌号:京C123456 */
carNumber ?: string;
/** @property 车辆类型,0-燃油客车(默认),1-燃油货车,2-纯电动客车,3-纯电动货车,4-插电式混动汽车,5-插电式混动货车,11-摩托车(测试无效) */
carType ?: string;
/** @property 摩托车排量,int,单位cc */
motorcycleCC ?: number;
/** @property 货车的轴数(用来计算过路费及限重) */
vehicleAxis ?: string;
/** @property 货车的高度,范围:(0,10],单位:米 */
vehicleHeight ?: string;
/** @property 货车的宽度,范围:(0,5],单位:米 */
vehicleWidth ?: string;
/** @property 货车的长度,范围:(0,25],单位:米 */
vehicleLength ?: string;
/** @property 设置货车的类型(大小):1-微型货车 2-轻型/小型货车 3-中型货车 4-重型货车 */
vehicleSize ?: string;
/** @property 设置货车的核定载重,单位:吨 */
vehicleWeight ?: string;
/** @property 设置货车的总重,即车重+核定载重,单位:吨 */
vehicleLoad ?: string;
/** @property 货车重量是否参与算路 */
isVehicleLoadSwitch ?: boolean;
/** @property 是否躲避车辆限行 */
isRestriction ?: boolean;
}
/**
* @description 高德内置导航所需参数
*/
export type MapNaviOptions = {
/** @property 起点Poi */
start ?: MapPoiOptions;
/** @property 途径点Poi,最多3个 */
between ?: MapPoiOptions[];
/** @property 终点Poi */
end ?: MapPoiOptions;
/** @property 导航类型: 0:汽车,1:摩托车,2:(电动)自行车,3:步行 */
naviType ?: number;
/** @property 0:路线预览选择,1:直接以默认路线启动导航 */
pageType ?: number;
/** @property 导航时的车辆信息,主要用于货车导航 */
carInfo ?: MapCarInfoOptions;
}
event-listeners参数集
/**
* @description 地图单击和长按事件回调
*/
export type MapClickCallback = {
/**
*
@property 单击事件
@param lnglat [经度,纬度]
**/
onClick : (lnglat : number[], poiInfo : UTSJSONObject | null) => void;
/**
*
@property 长按事件
@param lnglat [经度,纬度]
**/
onLongClick : (lnglat : number[]) => void;
}
/**
* @description 地图触摸事件回调
*/
export type MapTouchCallback = {
/**
*
@property 手指按下动作
@param event [Android类android.view.MotionEvent实例]
**/
onDown : (event : any) => void;
/**
*
@property 手指移动动作
@param event [Android类android.view.MotionEvent实例]
**/
onMove : (event : any) => void;
/**
*
@property 手指抬起动作
@param event [Android类android.view.MotionEvent实例]
**/
onUp : (event : any) => void
}
/**
* @description 地图视野发生变化的回调
*/
export type MapCameraChangeCallback = {
/**
*
@property 在地图状态改变过程中回调此方法。
@param position JSON对象 字段含义参考:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/CameraPosition.html
**/
onCameraChange : (position : UTSJSONObject) => void;
/**
*
@property 在地图状态改变过程中回调此方法。
@param position JSON对象 字段含义参考:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/CameraPosition.html
**/
onCameraChangeFinish : (position : UTSJSONObject) => void;
}
/**
* @description Marker点击事件回调
*/
export type MapMarkerClickCallback = {
/**
*
@property Marker本身被点击
@param marker [高德类com.amap.api.maps.model.Marker实例]:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Marker.html
**/
onMarkerClick : (marker : any) => void;
/**
*
@property Marker的InfowWindow被点击
@param marker [高德类com.amap.api.maps.model.Marker实例]:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Marker.html
**/
onMarkerInfowWindowClick : (marker : any) => void;
}
/**
* @description Polyline点击事件回调
*/
export type MapPolylineClickCallback = {
/**
*
@param polyline [高德类com.amap.api.maps.model.Polyline实例]:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/Polyline.html
**/
onPolylineClick : (polyline : any) => void;
}
/**
* @description MultiPoint点击事件回调
*/
export type MapMultiPointClickCallback = {
/**
*
@param multiPointItem [高德类com.amap.api.maps.model.MultiPointItem实例]:https://a.amap.com/lbs/static/unzip/Android_Map_Doc/3D/com/amap/api/maps/model/MultiPointItem.html
**/
onPointClick : (multiPointItem : any) => void;
}