更新记录

1.3.0(2025-12-12) 下载此版本

新增热力图支持

1.2.0(2025-12-08) 下载此版本

1.添加各种地图状态的获取; 2.新增各种覆盖物的添加

1.1.0(2025-11-21) 下载此版本

1.新增增加自定义图层功能 2.新增增加缩放、比例尺、鹰眼、地图类型等控件功能 3.新增地图缩放、移动、显示范围、地图视野、样式等接口

查看更多

平台兼容性

uni-app(4.86)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.86)

Chrome Safari Android iOS 鸿蒙 微信小程序
-

xwp-tianditu

基本使用方法

<xwp-tianditu ref="map" @loaded="mapLoaded" @mapClick="mapClick" :mapKey="mapKey" :zIndex="0" :mapOptions="mapOptions">

  • mapOptions,初始化地图配置
  • zIndex web需要,控制ui在地图上层
  • mapKey:天地图key
  • @loaded 监听地图是否加载完成
  • @mapClick 监听地图的点击,返回参数{longitude,latitude}结构
  • @markertap 监听标记点点击
// 初始化定位地图。
centerAndZoom(lnglat:LngLat, zoom:number)
// 将地图的中心点变换到指定的地理坐标
panTo(lnglat:LngLat, zoom?:number)
// 将地图在水平位置上移动x像素,垂直位置上移动y像素
planBy(point:Point)
// 将视图缩放到指定的缩放等级,中心点坐标不变。
setZoom(zoom:number)
// 放大一级视图。
zoomIn()
// 缩小一级视图。
zoomOut()
// 通知地图其容器大小已更改。在更改了容器对象的大小后调用此方法,以便地图能够调整自己适合于新的大小。
checkResize()
// 设置地图最小显示级别。
setMinZoom(level:Number)
// 设置地图最大显示级别。
setMaxZoom(level:Number)
// 设置地图的显示范围。
setMaxBounds(options:LngLatBounds|null)
// 根据提供的坐标点数组设置地图视野,调整后的视野会保证包含提供的坐标点。
setViewport(view:Array<LngLat>)
// 是否放缩,默认可放缩
enableZoom(v:boolean)
// 是否可拖拽,默认可拖拽
enableDrag(v:boolean)
// 添加自定义图层
addTileLayer(url:string,options?:TileLayerOptions)
// 叠加其他WMS服务图层
addWMSTileLayer(url:string,options?:WMSTileLayerOptions)
// 移除图层
removeTileLayer(layerId:number)
// 设置地图样式
setStyle(style:string)
// 移除地图样式
removeStyle()
// 设置标记点
setMarkers(v:Array<MarkerOptions>)
// 逆地理编码
geocode_getLocation(lnglat:LngLat,callback:(data:UTSJSONObject)=>void)
// 地理编码
geocode_getPoint(address:string,callback:(data:UTSJSONObject)=>void)
// 根据关键字搜索
search(params:SearchOptions,callback:(data:UTSJSONObject)=>void)
// 添加缩放控件
addZoomControl(options?:ControlZoomOptions)
// 添加比列尺控件
addScaleControl(options?:ControlScaleOptions)
// 添加鹰眼控件
addOverviewControl(options?:ControlOverviewOptions)
// 添加地图类型控件
addMapTypeControl(options?:ControlMapTypeOptions)
// 添加地图版权控件
addCopyRightControl(options?:ControlBaseOptions,copyRight?:CopyrightOptions)
// 移除控件
removeControl(id:number)
// 获取地图投影类型信息。
getCode(callback:(data:string)=>void)
// 获取地图可视区域,以地理坐标表示。
getBounds(callback:(data:LngLatBounds)=>void)
// 获取地图当前中心点。
getCenter(callback:(data:LngLat)=>void)
// 获取地图视图的大小,以像素表示。
getSize(callback:(data:Point)=>void)
// 获取地图当前缩放级别。
getZoom(callback:(data:number)=>void)
// 获取地图视图的大小,以像素表示。
getDistance(start:LngLat,end:LngLat,callback:(data:number)=>void)
// 根据提供的地理区域或坐标获得最佳的地图视野,返回的对象中包含center和zoom属性,分别表示地图的中心点和级别。
getViewport(view:LngLat[],callback:(data:UTSJSONObject)=>void)
// 设置天地图标记的显隐
setCopyRightShow(show:boolean)
// 清除所有覆盖物
clearOverLays()
// 清除某个覆盖物
removeOverlay(id:number)
// 添加图像标注
addMarker(options:MarkerOptions)
// 添加文字标注
addLabel(options:LabelOptions)
// 添加线
addPolyline(options:PolylineOptions)
// 添加多边形
addPolygon(options:PolygonOptions)
// 添加矩形
addRectangle(options:RectangleOptions)
// 添加圆
addCircle(options:CircleOptions)
// 添加图片覆盖物
addImageOverlay(options:ImageOverlayOptions)
// 添加热力图
addHeatmap(options:HeatmapOptions)
// 显示覆盖物
showOverlay(id:number)
// 隐藏覆盖物
hideOverlay(id:number)
//是否支持canvas 
isSupportCanvas(callback:(data:boolean)=>void)
<template>
    <view class="example">
        <xwp-tianditu ref="map" @loaded="mapLoaded" @mapClick="mapClick" :mapKey="mapKey" :zIndex="0" :mapOptions="mapOptions"></xwp-tianditu>
        <view class="top">
            <text style="background: white;"><text>地图点击位置:</text><text>{{mapClickAddress}}</text></text>
            <view style="background: white;display: flex;flex-direction: row;width: 100%;justify-content: space-between;margin-top: 10px;">
                <input style="flex: 1;" placeholder="输入搜索的地址" v-model="keyWord"/>
                <text @tap="onSearch">搜索</text>
            </view>
            <list-view style="max-height: 300px;" v-show="showSearchResult">
                <list-item v-for="item in searchList" @tap="(item)">
                    <text>{{ item['address']}}</text>
                </list-item>
            </list-view>
        </view>
        <view class="left">
            <scroll-view :class="{'left-content':true,'left-show':showData['open']==true,'left-hide':showData['open']!=true}">
                <view v-for="item in leftConfig">
                    <text class="title" @tap="showData[item.prop as string] = (showData[item.prop as string]==true?false:true)">{{ showData[item.prop as string]==true?'-':'+'}} {{ item.label}}</text>
                    <view class="item"  v-show="showData[item.prop as string] ==true">
                        <text class="button" :style="subindex!= (item['btns'] as Array<UTSJSONObject>).length-1?'margin-right:5px;':''" v-for="(subItem,subindex) in (item['btns'] as Array<UTSJSONObject>)" @tap="excuteFunc(item.prop,subItem.prop)">{{ subItem.label }}</text>
                    </view>
                </view>

            </scroll-view>
            <view v-show="showData['open']==true" class="left-close" @tap="showData['open']=false;">
                <text class="left-close-font">关闭工具</text>
            </view>
            <view v-show="showData['open']!=true"  class="left-open" @tap="showData['open']=true;">
                <text class="left-open-font">打开工具</text>
            </view>
        </view>
    </view>
</template>

<script>
    import { MapOptions,LngLat,MarkerOptions, LngLatBounds, Point, HeatmapData } from '../../utssdk/tianditu';
import { convertData } from './config';
    export default {
        props:{
            mapKey:{
                type:String,
                default:''
            }
        },
        data() {
            return {
                longitude:118.799048,
                latitude:31.968005,
                markers:[] as MarkerOptions[],
                tianduti:null as null|XwpTiandituComponentPublicInstance,
                mapClickAddress:'' as null|string,
                keyWord:'',
                searchList:[] as UTSJSONObject[],
                showSearchResult:false,
                mapOptions:{
                    projection:'EPSG:900913',
                    // center:{lng:118.799048,lat:31.968005} as LngLat,
                    zoom:12,
                    minZoom:1,
                    maxZoom:18
                } as MapOptions,
                layers:[] as number[],
                wmslayers:[] as number[],
                headmapLayer:-1,
                controls:{} as UTSJSONObject,
                showData:{} as UTSJSONObject,
                leftConfig:[
                    {label:'地图基本操作',prop:'map',btns:[{label:'放大',prop:'zoomIn'},{label:'缩小',prop:'zoomOut'},
                        {label:'坐标移动',prop:'panTo'},{label:'像素移动',prop:'panBy'},
                        {label:'中心点及放缩',prop:'centerAndZoom'},{label:'放缩到10',prop:'setZoom'},
                        {label:'1-18级',prop:'1-18Zoom'},{label:'4-10级',prop:'4-10Zoom'},
                        {label:'设置地图显示范围',prop:'setMaxBounds'},{label:'重置地图显示范围',prop:'setMaxBounds1'},
                        {label:'设置地图视野',prop:'setViewport'},{label:'black样式',prop:'style_black'},
                        {label:'indigo样式',prop:'style_indigo'},{label:'默认样式',prop:'style_default'},
                        ]},
                    {label:'地图信息获取',prop:'mapInfo',btns:[{label:'地图类型',prop:'code'},{label:'可视区域',prop:'bounds'},
                        {label:'中心点',prop:'center'},{label:'视图大小',prop:'size'},
                        {label:'缩放等级',prop:'zoom'},{label:'两点距离',prop:'distance'},
                        {label:'最佳视野',prop:'viewport'},
                        ]},
                    {label:'自定义图层',prop:'customLayer',btns:[{label:'添加',prop:'add'},{label:'移除',prop:'remove'}]},
                    {label:'叠加WMS服务图层',prop:'WMSLayer',btns:[{label:'叠加',prop:'add'},{label:'移除',prop:'remove'}]},
                    {label:'基本控件加载',prop:'control',btns:[
                        {label:'添加缩放',prop:'addZoom'},{label:'移除缩放',prop:'removeZoom'},
                        {label:'添加比例尺',prop:'addScale'},{label:'移除比例尺',prop:'removeScale'},
                        {label:'比例尺变红',prop:'redScale'},
                        {label:'添加鹰眼',prop:'addOverview'},{label:'移除鹰眼',prop:'removeOverview'},
                        {label:'添加地图版权',prop:'addCopyRight'},{label:'移除地图版权',prop:'removeCopyRight'},
                        {label:'添加版本信息',prop:'add_copyRight'},{label:'移除版本信息',prop:'remove_copyRight'},
                        {label:'添加地图类型',prop:'addMapType'},{label:'移除地图类型',prop:'removeMapType'},
                        ]},
                    {label:'添加覆盖物',prop:'overlay',btns:[
                        {label:'添加标注',prop:'addMarker'},{label:'自定义标注图片',prop:'addMarker1'},
                        {label:'添加文字标注',prop:'addLabel'},{label:'添加线',prop:'addPolyline'},
                        {label:'添加多边形',prop:'addPolygon'},{label:'添加带洞多边形',prop:'addPolygon1'},
                        {label:'添加矩形',prop:'addRectangle'},{label:'添加圆',prop:'addCircle'},
                        {label:'图片覆盖物类',prop:'addImageOverlay'},{label:'添加热力图',prop:'addHeatmap'},
                        {label:'显示热力图',prop:'showHeatmap'},{label:'隐藏热力图',prop:'hideHeatmap'},
                        ]},
                    {label:'其他',prop:'other',btns:[{label:'显示天地图图标',prop:'showCopyRight'},{label:'隐藏天地图图标',prop:'hideCopyRight'}]},
                ] as UTSJSONObject[],
            };
        },
        created() {

        },
        methods:{
            mapLoaded(){
                this.tianduti = this.$refs['map'] as XwpTiandituComponentPublicInstance;
                this.tianduti.centerAndZoom({lng:118.799048,lat:31.968005},12)
                this.markers = [{lnglat:{lng:this.longitude,lat:this.latitude},tip:'南京南站'}]
            },
            // 地图点击监听
            mapClick(data:UTSJSONObject){
                console.log('mapClick data',data)
                let lnglag = {lng:data.lng as number,lat:data.lat as number} as LngLat;
                // 坐标转换地名
                this.tianduti?.geocode_getLocation(lnglag,(res:UTSJSONObject)=>{
                    console.log('mapClick res',res)
                    if(res['success'] == true){
                        let rdata = res.data as UTSJSONObject
                        this.mapClickAddress = rdata.formatted_address as string

                        this.markers = [{lnglat:lnglag,tip:this.mapClickAddress}]

                        this.tianduti?.panTo(lnglag,null)
                    }else{
                        this.mapClickAddress = '坐标转换失败'
                    }
                })
            },
            onSearch(){
                // 地址搜素
                this.tianduti?.search({keyWord:this.keyWord},(res:UTSJSONObject)=>{
                    console.log('onSearch res',res)
                    if(res['success'] == true){
                        let data = res['data'] as UTSJSONObject;
                        if(data['type'] == 1){
                            this.showSearchResult = true;
                            this.searchList = data['data'] as UTSJSONObject[]
                        }
                    }else{
                        uni.showToast({
                            title:'搜索失败'
                        })
                    }
                })
            },
            (data:UTSJSONObject){
                this.showSearchResult = false;
                let arr = (data['lonlat'] as string).split(',')

                this.markers = [{lnglat:{lng:parseFloat(arr[0]),lat:parseFloat(arr[1])} as LngLat,tip:data['address'] as string}] 
                this.tianduti?.panTo({lng:parseFloat(arr[0]),lat:parseFloat(arr[1])},null)

            },
            onAddTileLayer(){
                let url = "http://t0.tianditu.gov.cn/img_w/wmts?" +
                "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
                `&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${this.mapKey}`
                let layerId = this.tianduti?.addTileLayer(url,null)
                if(layerId == null || layerId == -1) return;
                this.layers.push(layerId);
            },
            onRemoveTileLayer(){
                let first = this.layers.shift();
                if(first != null){
                    let layerId = first;
                    this.tianduti?.removeTileLayer(layerId);
                }
            },
            onAddWMSTileLayer(){
                var config = {
                    version: "1.1.1",   //请求服务的版本
                    layers: 'demo_city,demo_road,demo_anno',
                    transparent: true,  //输出图像背景是否透明
                    styles: "",         //每个请求图层的用","分隔的描述样式
                    format: "image/png" //输出图像的类型
                };
                let url = 'http://gisserver.tianditu.com/tiandituService/wms'
                let layerId = this.tianduti?.addWMSTileLayer(url,null)
                if(layerId == null || layerId == -1) return;
                this.wmslayers.push(layerId);
            },
            onRemoveWMSTileLayer(){
                let first = this.wmslayers.shift();
                if(first != null){
                    let layerId = first;
                    this.tianduti?.removeTileLayer(layerId);
                }
            },
            setStyle(style:string){
                this.tianduti?.setStyle(style);
            },
            removeStyle(){
                this.tianduti?.removeStyle()
            },
            _addControl(type:string,id:number){
                let controls = this.controls.getArray<number>(type);
                if(controls != null){
                    controls.push(id)
                }else{
                    this.controls[type] = [id];
                }
            },
            removeControl(type:string){
                let controls = this.controls.getArray<number>(type);
                if(controls != null){
                    let first = controls.shift();
                    if(first != null){
                        let id = first;
                        this.tianduti?.removeControl(id);
                    }
                }
            },
            addZoomControl() {
                let id = this.tianduti?.addZoomControl({
                    position:'rightBottom',
                    zoomInText:'+',
                    zoomOutText:'-'
                })
                if(id == null || id == -1) return;
                this._addControl('zoom',id);
            },
            addScaleControl() {
                let id = this.tianduti?.addScaleControl({
                    position:'rightBottom',
                })
                if(id == null || id == -1) return;
                this._addControl('scale',id);
            },
            setControlColor(){
                let controls = this.controls.getArray<number>('scale');
                if(controls != null){
                    let first = controls[0];
                    if(first != null){
                        let id = first;
                        this.tianduti?.setControlColor(id,'red');
                    }
                }
            },
            addOverviewControl() {
                let id = this.tianduti?.addOverviewControl({
                    position:'rightBottom',
                    size:{x:150,y:150},
                    isOpen:true
                })
                if(id == null || id == -1) return;
                this._addControl('overview',id);
            },
            addMapTypeControl() {
                let id = this.tianduti?.addMapTypeControl({
                    position:'rightBottom',
                })
                if(id == null || id == -1) return;
                this._addControl('mapType',id);
            },
            addCopyRightControl(){
                let id = this.tianduti?.addCopyRightControl({
                    position:'rightBottom',
                },
                {id:'1',
                    content: "<a href='https://www.tianditu.gov.cn' target='_blank' style='font-size:14px;background:yellow'>自定义的版权控件</a>"})
                if(id == null || id == -1) return;
                this._addControl('copyRight',id);
            },
            add_copyRight(){
                let controls = this.controls.getArray<number>('copyRight');
                if(controls != null){
                    let first = controls[0];
                    if(first != null){
                        let id = first;
                        this.tianduti?.addControlCopyRight(id,{id:'2',
                    content: "<a href='https://www.tianditu.gov.cn' target='_blank' style='font-size:14px;background:yellow'>自定义的版权控件1</a>"});
                    }
                }
            },
            remove_copyRight(){
                let controls = this.controls.getArray<number>('copyRight');
                if(controls != null){
                    let first = controls[0];
                    if(first != null){
                        let id = first;
                        this.tianduti?.removeControlCopyRight(id,{id:'2',
                    content: "<a href='https://www.tianditu.gov.cn' target='_blank' style='font-size:14px;background:yellow'>自定义的版权控件1</a>"});
                    }
                }
            },
            excuteFunc(prop1:null|any,prop2:null|any){
                if(prop1 == 'map'){
                    if(prop2 == 'zoomIn'){
                        this.tianduti?.zoomIn()
                    }else if(prop2 == 'zoomOut'){
                        this.tianduti?.zoomOut()
                    }else if(prop2 == 'panTo'){
                        this.tianduti?.getCenter((data:LngLat)=>{
                            data.lng += 0.1;
                            this.tianduti?.panTo(data,null);
                        })
                    }else if(prop2 == 'panBy'){
                        this.tianduti?.panBy({x:100,y:100})
                    }else if(prop2 == 'centerAndZoom'){
                        this.tianduti?.centerAndZoom({lng:116.64899,lat:40.12948},12)
                    }else if(prop2 == 'setZoom'){
                        this.tianduti?.setZoom(10)
                    }else if(prop2 =='1-18Zoom'){
                        this.tianduti?.setMinZoom(1);
                        this.tianduti?.setMaxZoom(18);
                    }else if(prop2 =='4-10Zoom'){
                        this.tianduti?.setMinZoom(4);
                        this.tianduti?.setMaxZoom(10);
                    }else if(prop2 =='setMaxBounds'){
                        this.tianduti?.setMaxBounds({sw:{lng:116.27648,lat:39.84042},ne:{lng:116.4605,lat:39.9721}})
                    }else if(prop2 =='setMaxBounds1'){
                        this.tianduti?.setMaxBounds(null)
                    }else if(prop2 == 'setViewport'){
                        this.tianduti?.setViewport([{lng:116.27648,lat:39.84042},{lng:116.4605,lat:39.9721}])
                    }else if(prop2 == 'style_black'){
                        this.tianduti?.setStyle('black')
                    }else if(prop2 == 'style_indigo'){
                        this.tianduti?.setStyle('indigo')
                    }else if(prop2 == 'style_default'){
                        this.tianduti?.removeStyle()
                    }
                }else if(prop1 == 'customLayer'){
                    if(prop2 == 'add'){
                        this.onAddTileLayer()
                    }else if(prop2 == 'remove'){
                        this.onRemoveTileLayer()
                    }
                }else if(prop1 == 'WMSLayer'){
                    if(prop2 == 'add'){
                        this.onAddWMSTileLayer()
                    }else if(prop2 == 'remove'){
                        this.onRemoveWMSTileLayer()
                    }
                }else if(prop1 == 'control'){
                    if(prop2 == 'addScale'){
                        this.addScaleControl()
                    }else if(prop2 == 'removeScale'){
                        this.removeControl('scale')
                    }else if(prop2 == 'addZoom'){
                        this.addZoomControl()
                    }else if(prop2 == 'removeZoom'){
                        this.removeControl('zoom')
                    }else if(prop2 == 'addOverview'){
                        this.addOverviewControl()
                    }else if(prop2 == 'removeOverview'){
                        this.removeControl('overview')
                    }else if(prop2 == 'addMapType'){
                        this.addMapTypeControl()
                    }else if(prop2 == 'removeMapType'){
                        this.removeControl('mapType')
                    }else if(prop2 == 'addCopyRight'){
                        this.addCopyRightControl()
                    }else if(prop2 == 'removeCopyRight'){
                        this.removeControl('copyRight')
                    }else if(prop2 == 'redScale'){
                        this.setControlColor()
                    }else if(prop2 =='add_copyRight'){
                        this.add_copyRight()
                    }else if(prop2  =='remove_copyRight'){
                        this.remove_copyRight()
                    }
                }else if(prop1 == 'other'){
                    if(prop2 == 'showCopyRight'){
                        this.tianduti?.setCopyRightShow(true)
                    }else if(prop2 == 'hideCopyRight'){
                        this.tianduti?.setCopyRightShow(false)
                    }
                }else if(prop1 == 'mapInfo'){
                    if(prop2 == 'code'){
                        this.tianduti?.getCode((code:string)=>{
                            uni.showToast({
                                title:'地图类型:'+code,
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'bounds'){
                        this.tianduti?.getBounds((data:LngLatBounds)=>{
                            uni.showToast({
                                title:'地图可视区域:'+JSON.stringify(data),
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'center'){
                        this.tianduti?.getCenter((data:LngLat)=>{
                            uni.showToast({
                                title:'地图当前中心点:'+JSON.stringify(data),
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'size'){
                        this.tianduti?.getSize((data:Point)=>{
                            uni.showToast({
                                title:'地图视图的大小:'+JSON.stringify(data),
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'zoom'){
                        this.tianduti?.getZoom((data:number)=>{
                            uni.showToast({
                                title:'地图当前缩放级别:'+data.toString(),
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'distance'){
                        this.tianduti?.getDistance({lng:116.40769, lat:39.89945},{lng:116.64899,lat:40.12948},(data:number)=>{
                            uni.showToast({
                                title:`两点之间的距离:${data}米`,
                                icon:'none'
                            })
                        })
                    }else if(prop2 == 'viewport'){
                        this.tianduti?.getViewport([{lng:116.40769, lat:39.89945},{lng:116.64899,lat:40.12948}],(data:UTSJSONObject)=>{
                            uni.showToast({
                                title:`最佳的地图视野:${JSON.stringify(data)}`,
                                icon:'none'
                            })
                        })
                    }
                }else if(prop1 == 'overlay'){
                    if(prop2 == 'addMarker'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addMarker({
                            lnglat:{lng:116.40969,lat: 39.89945},
                        })
                    }else if(prop2 == 'addMarker1'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addMarker({
                            lnglat:{lng:116.40969,lat: 39.89945},
                            icon:{
                                iconUrl:"http://api.tianditu.gov.cn/img/map/markerA.png",
                                iconSize: {x:19,y:27},
                                iconAnchor: {x:10,y:25}
                            }
                        })
                    }else if(prop2 == 'addLabel'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addLabel({
                            text:"天地图:<a href='https://www.tianditu.gov.cn'  target='_blank'>https://www.tianditu.gov.cn </a>",
                            position:{lng:116.40969,lat: 39.89945},
                            offset:{x:-9,y:0}
                        })
                    }else if(prop2 =='addPolyline'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addPolyline({
                            points:[{lng:116.41136, lat:39.97569},{lng:116.411794, lat:39.9068},{lng:116.32969, lat:39.92940},{lng:116.385438, lat:39.90610}],
                            color: "blue", 
                            weight: 3, 
                            opacity: 0.5,
                            lineStyle:'dashed'
                        })
                    }else if(prop2 == 'addPolygon'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addPolygon({
                            points:[{lng:116.41136, lat:39.97569},{lng:116.411794, lat:39.9068},{lng:116.32969, lat:39.92940},{lng:116.385438, lat:39.90610}],
                            color: "blue", 
                            weight: 3, 
                            opacity: 0.5,
                            fillColor: "#FFFFFF", 
                            fillOpacity: 0.5,
                            // lineStyle:'dashed'
                        })
                    }else if(prop2 =='addPolygon1'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addPolygon({
                            points:[[
                                {lng:116.315000, lat:39.964750},{lng:116.303330, lat:39.960810},{lng:116.306760, lat:39.866270},{lng:116.328740, lat:39.847560},
                                {lng:116.366500, lat:39.855730},{lng:116.442380, lat:39.856520},{lng:116.455080, lat:39.865480},{lng:116.456110, lat:39.950020},
                                {lng:116.428990, lat:39.967390}
                            ],[
                                {lng:116.349330, lat:39.941590},{lng:116.350620, lat:39.900650},{lng:116.353110, lat:39.898670},{lng:116.413880, lat:39.899990},
                                {lng:116.418340, lat:39.903150},{lng:116.429330, lat:39.903940},{lng:116.427270, lat:39.947910},{lng:116.365810, lat:39.946600}
                            ]],
                            color: "black", 
                            weight: 3, 
                            opacity: 0.2, 
                            fillColor: "blue", 
                            fillOpacity: 0.5
                        })
                    }else if(prop2 =='addRectangle'){
                        this.tianduti?.panTo({lng:116.40969,lat: 39.89945},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addRectangle({
                            bounds:{sw:{lng:116.36231, lat:39.87784},ne:{lng:116.43954, lat:39.92841}},
                        })
                    }else if(prop2 =='addCircle'){

                        this.tianduti?.panTo({lng:116.40093,lat: 39.90313},null)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addCircle({
                            center:{lng:116.40093, lat:39.90313},
                            radius:5000,
                            color:"blue",
                            weight:5,opacity:0.5,
                            fillColor:"#FFFFFF",
                            fillOpacity:0.5,
                            lineStyle:"solid"
                        })
                    }else if(prop2 =='addImageOverlay'){
                        this.tianduti?.centerAndZoom({lng:116.390750,lat:  39.916980},15)
                        this.tianduti?.clearOverLays();
                        this.tianduti?.addImageOverlay({
                            url:"http://lbs.tianditu.gov.cn/images/openlibrary/gugong.jpg",
                            bounds:{sw:{lng:116.385360, lat:39.911380},ne:{lng:116.395940, lat:39.921400}},
                            opacity: 1,
                            alt: "故宫博物院"
                        })
                    }else if(prop2 == 'addHeatmap'){
                        let point = convertData()
                        this.tianduti?.centerAndZoom({lng:108.95, lat:34.27}, 4);
                        this.tianduti?.removeOverlay(this.headmapLayer)
                        this.tianduti?.isSupportCanvas((support)=>{
                            if(!support){
                                uni.showToast({
                                    title:'热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~',
                                    icon:'none'
                                })
                                return
                            }
                            let id = this.tianduti?.addHeatmap({
                                data:{
                                    max:300,
                                    data:point
                                } as HeatmapData,
                                radius:30,
                                // gradient:{
                                //  '0.2':'rgb(0, 255, 255)',
                                //  '0.5':'rgb(0, 110, 255)',
                                //  '0.8':'rgb(100, 0, 255)'
                                // }
                            })
                            if(id != null){ this.headmapLayer = id;}
                        })
                    }else if(prop2 == 'showHeatmap'){
                        this.tianduti?.showOverlay(this.headmapLayer)
                    }else if(prop2 == 'hideHeatmap'){
                        this.tianduti?.hideOverlay(this.headmapLayer)
                    }
                }
            },
        },
        watch:{
            markers(){
                this.tianduti?.setMarkers(this.markers)
            }
        }
    }
</script>

<style lang="scss" scoped>
.example {
    flex: 1;
    position: relative;
    .top {
        position: absolute;
        top:0px;
        left:0px;
        width:100%;
        padding: 10px 10px;
        z-index: 1;
        background-color: white;
        // display: none;

        .row  {
            display: flex;
            flex-wrap: wrap;
            flex-direction: row;
            margin: 5px 0px;
            .item {
                margin: 4px 10px;
                padding: 5px 5px;
                background: white;
            }
        }
    }

    .left {
        position: absolute;
        height: 100%;
        display: flex;
        flex-direction: row;
        z-index: 10;

        .left-content {
            width: 150px;
            background-color: white;

            .title {
                font-size: 16px;
                margin: 5px 0;
            }

            .item {
                margin-left: 10px;
                display: flex;
                flex-direction: row;
                flex-wrap: wrap;

                .button {
                    margin-top: 5px;
                    font-size: 12px;
                    padding: 5px 5px;
                    background: white;
                    border: 1px black solid;
                }
            }
        }

        .left-close {
            margin: auto 0px;
            width: 30px;
            height: 90px;
            background-color: red;
            display: flex;
            align-items: center;
            justify-content: center;

            .left-close-font {
                color: white;
                text-align: center;
            }
        }

        .left-open {
            margin: auto 0px;
            width: 30px;
            height: 90px;
            background-color: white;
            display: flex;
            align-items: center;
            justify-content: center;

            .left-open-font{
                text-align: center;
            }
        }
    }

    .left-show {
        display: flex;
    }

    .left-hide {
        display: none;
    }
}
</style>

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议

暂无用户评论。