使用高德地图api点聚合案例 (自定义样式)

请添加图片描述

高德地图api地址:https://lbs.amap.com/api/javascript-api/reference/map

1.异步创建script标签

注意需要MarkerClusterer插件

(https://webapi.amap.com/maps?v=1.4.15&key=你的key&callback=initAMap&plugin=AMap.MarkerClusterer)

export default function MapLoader() {
    return new Promise((resolve, reject) => {
        if (window.AMap) {
            resolve(window.AMap);
        } else {
            var script = document.createElement('script');
            script.type = "text/javascript";
            script.async = true;
            script.src = "https://webapi.amap.com/maps?v=1.4.15&key=你的key&callback=initAMap&plugin=AMap.MarkerClusterer";
            script.onerror = reject;
            document.head.appendChild(script);
        }
        window.initAMap  = () => {
            resolve(window.AMap);
        };
    });
}

2.参照高德地图api按步骤写功能

<template>
    <view class="map">
        <view class="map" id="map"></view>
    </view>
</template>
<script>
    import AMap from "@/common/util/map.js";
    export default {
        data() {
            return {
                zoom: 11,
                initLat: 29.10037,
                initLng: 119.705008,
                pois:[],
                url:'',//请求接口
            }
        },
        methods: {
            getData(){
                let that = this;
                this.$http.get(that.url).then(res => {
                    if(res.data.success){
                        that.pois = res.data.result;
                        that.initAMap();
                    }
                });
            },
            async initAMap() {
                try {
                    this.resAmap = await AMap();
                    this.$nextTick(function() {
                        let that = this;
                        let map = new this.resAmap.Map('map', {
                            resizeEnable: true,
                            center: [this.initLng, this.initLat],
                            zoom: this.zoom,
                        });
                        this.map = map;
                        let cluster,markers=[];
                        for (let item of this.pois) {
                            let coordinate =[item.longitude,item.latitude];
                            let content = `<div style="background-color:hsla(15, 100%, 50%, 0.7);height:100%;width:200px;box-shadow:hsl(15, 100%, 50%) 0px 0px 1px;padding:5px 3px;line-height:24px;color:white;text-align: center">${item.name}</div>`;
                            content+=`<div style="width: 0px;height: 0px;border-left: 5px solid transparent; border-right: 5px solid transparent;border-top: 8px solid hsla(15, 100%, 50%, 0.7);position: absolute;bottom: -8px;left: 10px"></div>`;
                            markers.push (new that.resAmap.Marker({
                                content: content,
                                position: coordinate,
                            }));
                        }
                        let count = markers.length;
                        let _renderClusterMarker = function (context) {
                            let factor = Math.pow(context.count / count, 1 / 18);
                            let div = document.createElement('div');
                            let Hue = 180 - factor * 180;
                            let bgColor = 'hsla(' + Hue + ',100%,50%,0.7)';
                            let fontColor = 'white';
                            let shadowColor = 'hsla(' + Hue + ',100%,50%,1)';
                            div.style.backgroundColor = bgColor;
                            let size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20);
                            div.style.width = div.style.height = size + 'px';
                            div.style.borderRadius = size / 2 + 'px';
                            div.style.boxShadow = '0 0 1px ' + shadowColor;
                            div.innerHTML = context.count;
                            div.style.lineHeight = size + 'px';
                            div.style.color = fontColor;
                            div.style.fontSize = '14px';
                            div.style.textAlign = 'center';
                            context.marker.setOffset(new that.resAmap.Pixel(-size / 2, -size / 2));
                            context.marker.setContent(div)
                        };
                        cluster = new that.resAmap.MarkerClusterer(this.map, markers, {
                            gridSize: 80,
                            renderClusterMarker: _renderClusterMarker
                        });
                    });
                } catch (e) {
                    console.log(e)
                }
            },
        },
        onLoad() {
            this.getData();
        },
    }
</script>
<style scoped>
    .map {
        width: 100%;
        height: 100vh;
    }
</style>

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用高德地图APIVue3实现自定义弹窗样式时,可以参考以下步骤: 1. 首先,初始化地图弹窗实例,并设置isCustom为true,表示使用自定义窗体。可以使用AMap.InfoWindow类来创建地图弹窗实例,并设置偏移量等属性。\[1\] 2. 在处理地图标记物击事件时,可以通过获取击的标记物对象,设置动画效果,并获取相应的内容。可以使用AMap.InfoWindow的setContent方法设置弹窗内容,然后使用open方法打开弹窗。\[1\] 3. 可以参考高德地图官方提供的demo样式,该demo展示了自定义弹窗的样式。可以在官方demo中查看代码和样式,以便参考和使用。\[2\] 4. 高德地图官网还提供了自定义弹窗内容的例子,使用了Dom操作的方式来实现。可以使用Vue的全局API中的Vue.extend方法来创建一个Vue子类构造器,然后通过实例化该构造器来创建一个Vue对象,类似于Dom中的DocumentFragment接口。这样可以使用Vue的方式来实现自定义弹窗的Dom操作。\[3\] 综上所述,你可以使用高德地图APIVue3来实现自定义弹窗样式。可以参考高德地图官方提供的demo和文档,根据自己的需求进行相应的代码编写和样式设计。 #### 引用[.reference_title] - *1* *3* [高德地图自定义弹窗内容](https://blog.csdn.net/fredricen/article/details/106172766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VUE 高德自定义弹窗样式不生效?(AMap.InfoWindow弹窗样式问题)](https://blog.csdn.net/weixin_39921970/article/details/120744647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值