【vue3/高德地图】实现地图打点/自定义点位图标

在这里插入图片描述

<template>
    <div class="app-container">
            <div id="container"></div>
    </div>
</template>
 
<script setup>
import AMapLoader from '@amap/amap-jsapi-loader';
/*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用shallowRef进行非深度监听,
因为在Vue3中所使用的Proxy拦截操作会改变JSAPI原生对象,所以此处需要区别Vue2使用方式对地图对象进行非深度监听,
否则会出现问题,建议JSAPI相关对象采用非响应式的普通对象来存储)*/
import { shallowRef } from '@vue/reactivity';
import { ref, reactive} from "vue";
import geojsonData from '../assets/huzhou_division'


const allMap = shallowRef(null);

function initMap() {
    window._AMapSecurityConfig = {
        securityJsCode: '',
    }
    AMapLoader.load({
        key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.GeoJSON"], // 需要使用的的插件列表,如比例尺'AMap.Scale'等

    }).then((AMap) => {
        const map = new AMap.Map("container", {  //设置地图容器id
            viewMode: "2D",    //是否为3D地图模式
            zoom: 10,           //初始化地图级别
            center: [119.898881, 30.594178], //初始化地图中心点位置
            mapStyle: 'amap://styles/',

        });
        allMap.value = map


// 点位信息
        const markerdata = reactive([[119.898881, 30.794178], [119.998881, 30.794178], [119.798881, 30.794178], [119.698881, 30.794178], [120.098881, 30.794178]])

// 适用于少数点
        markerdata.forEach(element => {
            // 创建 AMap.Icon 实例:
            const icon = new AMap.Icon({
                size: new AMap.Size(50, 60),    // 图标尺寸
                
                // vue3/vite 需要用特定的本地图片引入方式,不可require引入
                image: new URL('../assets/images/压力表.png', import.meta.url).href,  // Icon的图像
                // imageOffset: new AMap.Pixel(0, -60),  // 图像相对展示区域的偏移量,适于雪碧图等
                imageSize: new AMap.Size(50, 60), // 根据所设置的大小拉伸或压缩图片
                imageOffset: new AMap.Pixel(0, 0)
            });
            // 创建一个 Marker 实例:
            const marker = new AMap.Marker({
                position: new AMap.LngLat(element[0], element[1]),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
                // title: 'hhhhhh',
                icon: icon
            });
            marker.content = proxy.$refs.dialog

            // 将创建的点标记添加到已有的地图实例:
            map.add(marker);

        });


    }).catch(e => {
        console.log(e);
    })
}

initMap()


</script>
 
<style lang="scss" scoped>
.app-container {
    position: absolute;
    top: 0;
    left: 0;
    z-index: -1;
}

#container {
    padding: 0px;
    margin: 0px;
    width: 1920px;
    height: 1080px;
}

</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值