三步搞定打卡地图

本文介绍如何在百度地图上动态展示不同用户的打卡点,通过用户名生成不同颜色,并使用Label绘制点,配合CSS实现定位图标及尖角效果,简化了自定义覆盖物的繁琐过程。
摘要由CSDN通过智能技术生成

在利用百度地图进行添加覆盖物时,想要做到显示出,不同用户的打卡点,如上图所示。

因为要显示用户数量不定,所以想用marker类时,肯定不好,因为marker类添加的是图像标注,必须要足够的图片(当然,如果确保每个用户都有头像,可以采用这种)。当不确定用户是否有头像时,就要采用另一种了。

首先,可以根据用户名,来生成不同的颜色

首先通过解析名字匹配hash值来生成颜色(这里部分方法用的extjs的,如果是js自己替换)

//计算名字唯一颜色
function getUniqueColor(name) {
        if (Ext.isEmpty(name)) return 'transparent';

        var hex = (Math.abs(hashCode(name)) % 0xcccccc).toString(16),
            color = `#${Ext.String.leftPad(hex, 6, '0')}`;

        return color;
}

function hashCode(s) {
        if (!s) return null;
        let hash = 0,
            i, chr, len;
        if (!s.length) return hash;
        for (i =
要实现 Vue3 搭配高德地图实现打卡功能,需要进行以下步骤: 1. 引入高德地图 API 在 Vue3 中,我们可以在 main.js 中引入高德地图 API,并将其挂载到 Vue 实例上,以便全局使用。 ```javascript import AMapLoader from "@amap/amap-jsapi-loader"; const _loadAMapApi = () => { return AMapLoader.load({ key: "Your Key", version: "2.0", plugins: ["AMap.MarkerClusterer"], }); }; createApp(App) .use(router) .provide("amapApi", _loadAMapApi()) .mount("#app"); ``` 2. 创建地图实例 在组件中,我们可以通过 inject 获取到 AMapLoader 实例,然后创建地图实例。 ```javascript import { inject } from "vue"; export default { name: "Map", setup() { const amapApi = inject("amapApi"); const map = new amapApi.Map("map-container", { zoom: 13, center: [116.39, 39.9], }); return { map, }; }, }; ``` 3. 添加标记 添加标记可以使用 AMap.Marker 类,先通过 createMarker 创建 Marker 实例,然后通过 map.add 方法将 Marker 添加到地图上。 ```javascript import { createMarker } from "@amap/amap-jsapi-loader"; export default { name: "Map", setup() { const amapApi = inject("amapApi"); const map = new amapApi.Map("map-container", { zoom: 13, center: [116.39, 39.9], }); const addMarker = async () => { const marker = await createMarker({ position: [116.39, 39.9], icon: "https://webapi.amap.com/images/car.png", offset: [-24, -24], map, }); }; return { map, addMarker, }; }, }; ``` 4. 获取当前定位 可以使用 AMap.Geolocation 类获取当前定位,通过 createGeolocation 创建 Geolocation 实例,然后调用 getCurrentPosition 方法获取当前位置。 ```javascript import { createMarker, createGeolocation } from "@amap/amap-jsapi-loader"; export default { name: "Map", setup() { const amapApi = inject("amapApi"); const map = new amapApi.Map("map-container", { zoom: 13, center: [116.39, 39.9], }); const addMarker = async () => { const geolocation = await createGeolocation({ enableHighAccuracy: true, timeout: 10000, maximumAge: 0, }); const marker = await createMarker({ position: geolocation.getCurrentPosition(), icon: "https://webapi.amap.com/images/car.png", offset: [-24, -24], map, }); }; return { map, addMarker, }; }, }; ``` 5. 保存数据到后台 最后,我们可以通过 axios 等库将打卡数据保存到后台。 ```javascript import axios from "axios"; export default { name: "Map", setup() { const amapApi = inject("amapApi"); const map = new amapApi.Map("map-container", { zoom: 13, center: [116.39, 39.9], }); const addMarker = async () => { const geolocation = await createGeolocation({ enableHighAccuracy: true, timeout: 10000, maximumAge: 0, }); const marker = await createMarker({ position: geolocation.getCurrentPosition(), icon: "https://webapi.amap.com/images/car.png", offset: [-24, -24], map, }); const postData = { location: marker.getPosition(), time: new Date(), }; axios.post("https://your-api-endpoint.com/checkin", postData); }; return { map, addMarker, }; }, }; ``` 通过以上步骤,我们就可以在 Vue3 搭配高德地图中实现打卡功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

29号同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值