更新记录

1.0.1(2025-03-14)

新增内容
  • 新增地图缩放事件
  • 新增多数属性同时设置接口
  • 新增可修改中心图标
    优化内容
  • 优化地图拖拽事件回调中心位置
  • 优化标注可设置位置偏移
  • 优化交互

    1.0.0(2025-03-12)

    首发


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.94 app-vue × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

地图组件 ly-map


1 初始化

默认填充父布局

<ly-map ref="map" map-key="天地图key"/>

2 组件说明

支持参数
参数 类型 说明
mapKey String 天地图官网申请的key,必填否则地图不能正确出来
lonlat Array 地图初始位置,默认值[111.668097, 40.825417]
zoom Number 地图初始缩放等级,默认值16
showCenterIcon Boolean 是否在地图中间显示图标, 默认值 false不显示
centerIcon String 修改默认中间显示图标
showLocationIcon Boolean 是否在地图右下角显示定位图标, 默认值 false不显示
支持事件
事件 说明
onLoaded 当地图加载完成时
onLocation 点击右下角定位按钮时
onZoomEnd(lon:number, lat:number,zoom:Number) 缩放完成时,并返回中心位置
onStartDrag(lon:number, lat:number,zoom:Number) 当地图开始拖拽时,并返回中心位置
onEndDrag(lon:number, lat:number,zoom:Number) 当地图结束拖拽时,并返回中心位置
支持方法
方法 说明
setCenter(lon:number, lat:number,zoom:Number) 将地图的中心点变换到指定的地理坐标,如果同时指定了缩放等级,则同时缩放到指定的等级
参数说明:
lon:地图的中心点经度
lat:地图的中心点纬度
zoom:地图的比例尺级别
setType(type:Number) 设置地图显示类型
参数说明:
type:要设置的地图展示类型 0矢量地图 1卫星地图 其它显示矢量地图
setMarkers(Array<Object>) 将标注添加到地图中,支持多个标注同时添加,标注Object格式见下表
setZoom(zoom:Number) 将视图缩放到指定的缩放等级,中心点坐标不变
参数说明:
zoom:地图的比例尺级别
resize() 重置地图展示区域尺寸
setOption(option:Object) 同时设置多个属性,支持中心点、缩放、标注,配置option如下
标注Object 格式说明
key value 说明
icon String 标注显示图标的路径,支持网络图片
width Number 标注图标宽度
height Number 标注图标高度
lon Number 标注显示的位置经度
lat Number 标注显示的位置纬度
offsetX Number 标注图标相对左上角水平偏移
offsetY Number 标注图标相对左上角垂直偏移
多属性配置说明
const option = {
    // 中心点
    center: {lon: 116.391231, lat: 39.907334},
    // 多标注
    markers: [
        {icon: icon1, width: 24, height: 27, lon: 116.389231, lat: 39.906034},
    ],
    // 缩放
    zoom: 16,
    // 地图类型
    type: 1,
}

示例代码

完整代码如下

<template>
    <view class="map-page-wrapper">
        <view class="map-box">
            <ly-map ref="map"
                    :map-key="mapKey"
                    :lonlat="lonlat"
                    :zoom="zoom"
                    :show-center-icon="showCenterIcon"
                    :center-icon="centerIcon"
                    :show-location-icon="showLocationIcon"
                    :on-location="location"
                    :on-loaded="loaded"
                    :on-start-drag="startDrag"
                    :on-zoom-end="zoomEnd"
                    :on-end-drag="endDrag"/>
        </view>
        <view class="tool-box">
            <view class="tool" @tap="setType(0)">矢量地图</view>
            <view class="tool" @tap="setType(1)">卫星地图</view>
            <view class="tool" @tap="setMarkers()">设置标注</view>
            <view class="tool" @tap="clearMarkers()">清除标注</view>
            <view class="tool" @tap="setZoom(1)">缩放+</view>
            <view class="tool" @tap="setZoom(-1)">缩放-</view>
            <view class="tool" @tap="setCenter(116.391231,39.907334)">设置位置1</view>
            <view class="tool" @tap="setCenter(111.668097, 40.825417)">设置位置2</view>
            <view class="tool" @tap="setCenterIcon(true)">显示中心图标</view>
            <view class="tool" @tap="setCenterIcon(false)">隐藏中心图标</view>
            <view class="tool" @tap="setLocationIcon(true)">显示定位图标</view>
            <view class="tool" @tap="setLocationIcon(false)">隐藏定位图标</view>
            <view class="tool" @tap="setIcon()">修改中心图标</view>
            <view class="tool" @tap="setOption()">同时设置属性</view>
        </view>
    </view>
</template>
<script>
    import icon1 from '../static/icon1.png';
    import icon2 from '../static/icon2.png';
    import icon3 from '../static/icon3.png';

    export default {
        data() {
            return {
                // 天地图官网地址 https://oauth.tianditu.gov.cn/
                mapKey: "天地图申请的key",
                // 中心位置
                lonlat: [111.668097, 40.825417],
                // 缩放
                zoom: 16,
                // 地图展示类型
                type: 0,
                // 显示中心图标
                showCenterIcon: true,
                // 显示定位图标
                showLocationIcon: true,
                // 不设置使用默认图标
                centerIcon: "",
            };
        },
        onReady() {
            // 绑定组件
            this.map = this.$refs.map;
        },
        methods: {
            location() {
                console.log("点击定位按钮回调");
            },
            loaded() {
                console.log("地图创建完成");
            },
            zoomEnd(lon, lat) {
                console.log("地图缩放完成", lon, lat);
            },
            startDrag(lon, lat) {
                console.log("开始地图拖拽", lon, lat);
            },
            endDrag(lon, lat) {
                console.log("结束地图拖拽", lon, lat);
            },
            setZoom(zoom) {
                this.zoom += zoom;
                if (this.zoom <= 10) this.zoom = 1;
                if (this.zoom >= 20) this.zoom = 20;
                this.map.setZoom(this.zoom);
            },
            setType(type) {
                // type 0矢量地图 1卫星地图 其他矢量地图
                this.type = type;
                this.map.setType(this.type);
            },
            setCenter(lon, lat) {
                this.lonlat = [lon, lat];
                this.map.setCenter(lon, lat);
            },
            setMarkers() {
                this.map.setMarkers([
                    {icon: icon1, width: 24, height: 27, lon: 111.666020, lat: 40.82740},
                    {icon: icon2, width: 24, height: 24, lon: 111.667020, lat: 40.82740},
                    {icon: icon1, width: 24, height: 27, lon: 111.665020, lat: 40.82740},
                    {icon: icon2, width: 24, height: 24, lon: 111.669020, lat: 40.82740},
                    {icon: icon1, width: 24, height: 27, lon: 111.670020, lat: 40.82740},
                ]);
            },
            clearMarkers() {
                this.map.setMarkers([]);
            },
            setCenterIcon(show) {
                this.showCenterIcon = show;
            },
            setLocationIcon(show) {
                this.showLocationIcon = show;
            },
            setIcon() {
                // 默认图标和icon切换显示
                this.centerIcon = this.centerIcon ? "" : icon3;
            },
            setOption() {
                // 同时设置多个属性
                this.map.setOption({
                    center: {lon: 116.391231, lat: 39.907334},
                    markers: [
                        {icon: icon1, width: 24, height: 27, lon: 116.389231, lat: 39.906034},
                        {icon: icon2, width: 24, height: 24, lon: 116.390231, lat: 39.906034},
                        {icon: icon1, width: 24, height: 27, lon: 116.391231, lat: 39.906034},
                        {icon: icon2, width: 24, height: 24, lon: 116.392231, lat: 39.906034},
                        {icon: icon1, width: 24, height: 27, lon: 116.393231, lat: 39.906034},
                        // 带偏移,如不设置默认 offsetX=width/2, offsetY=height
                        {icon: icon3, width: 24, height: 24, lon: 116.391231, lat: 39.906034, offsetX: 12, offsetY: -24}
                    ],
                    zoom: 16,
                    type: 1,
                });
            }
        }
    };
</script>

<style lang="scss">
    .map-page-wrapper {
        width: 100%;
        height: 100vh;

        .map-box {
            width: 100%;
            height: 100%;
        }

        .tool-box {
            position: absolute;
            // 天地图默认z-index:400 需要大于400
            z-index: 999;
            top: 0;
            left: 0;
            width: 100%;
            border-radius: 8rpx;
            padding: 16rpx;
            display: flex;
            flex-wrap: wrap;
            gap: 16rpx;

            .tool {
                font-size: 28rpx;
                border-radius: 8rpx;
                padding: 12rpx 24rpx;
                background: #ffffff;
                box-shadow: 0 0 6rpx rgba(0, 0, 0, .15);
            }
        }
    }
</style>

隐私、权限声明

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

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

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

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问