更新记录

1.0.0(2026-01-12)

  1. 初次提交

平台兼容性

uni-app x(4.85)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 6.0 × × ×

前言

  • 插件集成了高德地图SDK,导航SDK,功能参考截图所示
  • 点击下载演示程序,需在电脑端下载,手机端不支持
  • 请试用后满意再购买
  • 该插件不能单独使用,需同时依赖我的高德定位插件才能使用
  • 目前高德已经开始频繁找开发者支付授权费了,使用的时候注意调用频率不要太高!商用还是给钱吧。

接入步骤

  1. 请先在高德开放平台申请你的appkey
  2. 导入插件包到uni_modules下
  3. 打包自定义基座,打包好后最好重启一次HBX,否则可能无法调用插件
  4. 导入示例项目
    //基础使用示例,导入示例项目查看完整功能
    <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;
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络权限,定位权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件定位功能使用高德地图SDK,仅仅用于获取设备位置,并不会上传数据。SDK官方网站为https://lbs.amap.com/api/android-sdk/summary/,其隐私协议参考https://lbs.amap.com/pages/privacy/

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。