【vue3+ArcGIS5】web开发中的地图功能从入门到实战三:在地图上画形状

在地上画形状,这是我们业务开发中常见的需求,把某个地方打marker等等

实现效果

在地图上画一个圆形

js 复制代码
// 画一个圆形
    function drawCircle() {
        const point = {
            //Create a point
            type: "point",
            longitude: -118.80657463861,
            latitude: 34.0005930608889,
        };
        const simpleMarkerSymbol = {
        type: "simple-marker",
        color: [226, 119, 40], // Orange
        outline: {
            color: [255, 255, 255], // White
            width: 1,
        },
        };

        const pointGraphic = new Graphic({ geometry: point, symbol: simpleMarkerSymbol });
        graphicsLayer.add(pointGraphic);
    }

在initMap方法中调用这个生成圆形的方法

js 复制代码
...
// 画一个圆形
drawCircle();

画一条直线

js 复制代码
function drawLine() {
        // Create a line geometry
        const polyline = {
            type: "polyline",
            paths: [
                [-118.821527826096, 34.0139576938577], //Longitude, latitude
                [-118.814893761649, 34.0080602407843], //Longitude, latitude
                [-118.808878330345, 34.0016642996246], //Longitude, latitude
            ],
        };
        const simpleLineSymbol = {
            type: "simple-line",
            color: [226, 119, 40], // Orange
            width: 2,
        };

        const polylineGraphic = new Graphic({ geometry: polyline, symbol: simpleLineSymbol });
        graphicsLayer.add(polylineGraphic);
    }

画一个多边形

js 复制代码
// 画一个多边形
    function drawPolygon() {
        const polygon = {
            type: "polygon",
            rings: [
                [-118.818984489994, 34.0137559967283], //Longitude, latitude
                [-118.806796597377, 34.0215816298725], //Longitude, latitude
                [-118.791432890735, 34.0163883241613], //Longitude, latitude
                [-118.79596686535, 34.008564864635], //Longitude, latitude
                [-118.808558110679, 34.0035027131376], //Longitude, latitude
            ],
        };

        const simpleFillSymbol = {
            type: "simple-fill",
            color: [227, 139, 79, 0.8], // Orange, opacity 80%
            outline: { color: [255, 255, 255], width: 1 },
        };

        const polygonGraphic = new Graphic({
            geometry: polygon,
            symbol: simpleFillSymbol,

        });
        graphicsLayer.add(polygonGraphic);
    }

完整的代码实现

html 复制代码
<script setup>
    import Map from "@arcgis/core/Map";
    import MapView from '@arcgis/core/views/MapView'
    import { onMounted, ref } from "vue";
    import GraphicsLayer from "@arcgis/core/layers/GraphicsLayer";
    import Graphic from "@arcgis/core/Graphic";
    const graphicsLayer = new GraphicsLayer();

    const mapDiv = ref(null)
    let view;
    const initMap = () => {
        const map = new Map({
            basemap: "arcgis/topographic",
            layers: [graphicsLayer], // 将图形图层添加到地图中
        });

        view = new MapView({
            center: [-118.805, 34.020],
            zoom: 13,
            container: mapDiv.value,
            map: map
        });


        view.on('click', (event) => {
            console.log('点击事件:', event);
        });
        // 画一个圆形
        // drawCircle();

        // // 画一条直线
        // drawLine();

        // // 画一个多边形
        drawPolygon();

        view.when(
            () => {
            console.log('地图加载成功')
            },
            (error) => {
            console.error('地图加载失败:', error)
            }
        )
    }

    // 画一个圆形
    function drawCircle() {
        const point = {
            //Create a point
            type: "point",
            longitude: -118.80657463861,
            latitude: 34.0005930608889,
        };
        const simpleMarkerSymbol = {
        type: "simple-marker",
        color: [226, 119, 40], // Orange
        outline: {
            color: [255, 255, 255], // White
            width: 1,
        },
        };

        const pointGraphic = new Graphic({ geometry: point, symbol: simpleMarkerSymbol });
        graphicsLayer.add(pointGraphic);
    }

    function drawLine() {
        // Create a line geometry
        const polyline = {
            type: "polyline",
            paths: [
                [-118.821527826096, 34.0139576938577], //Longitude, latitude
                [-118.814893761649, 34.0080602407843], //Longitude, latitude
                [-118.808878330345, 34.0016642996246], //Longitude, latitude
            ],
        };
        const simpleLineSymbol = {
            type: "simple-line",
            color: [226, 119, 40], // Orange
            width: 2,
        };

        const polylineGraphic = new Graphic({ geometry: polyline, symbol: simpleLineSymbol });
        graphicsLayer.add(polylineGraphic);
    }

    // 画一个多边形
    function drawPolygon() {
        const polygon = {
            type: "polygon",
            rings: [
                [-118.818984489994, 34.0137559967283], //Longitude, latitude
                [-118.806796597377, 34.0215816298725], //Longitude, latitude
                [-118.791432890735, 34.0163883241613], //Longitude, latitude
                [-118.79596686535, 34.008564864635], //Longitude, latitude
                [-118.808558110679, 34.0035027131376], //Longitude, latitude
            ],
        };

        const simpleFillSymbol = {
            type: "simple-fill",
            color: [227, 139, 79, 0.8], // Orange, opacity 80%
            outline: { color: [255, 255, 255], width: 1 },
        };

        const polygonGraphic = new Graphic({
            geometry: polygon,
            symbol: simpleFillSymbol,

        });
        graphicsLayer.add(polygonGraphic);
    }


    
    onMounted(() => {
        initMap()
    })
</script>

<template>
    <h2>ArcGIS Maps SDK for JavaScript Tutorials: Display a map444</h2>
    <div id="container">
        <div ref="mapDiv" class="map-div"></div>
    </div>
</template>

<style>
   #container {
      height: 100%;
      margin: 0;
    }
    .map-div {
        height: 100%;
    }

</style>

这样就实现了在地图上做标记的功能

相关推荐
java水泥工12 小时前
什么是前端
java·vue·html5
mont evergreen1 天前
一封从外部世界寄来的信:二维码数据如何穿越三重门,抵达你的屏幕
electron·vue·事件
志尊宝2 天前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
怦然丶心动2 天前
用 Java 把干支历法算清楚:从节气切年到可读摘要
java·算法·vue·独立开发·spring boot / spring
我最爱吃鱼香茄子5 天前
【毕业设计优选】人力资源管理系统|Java|SpringBoot|Vue|前后端分离|带详细文档+部署教学视频
java·vue·毕业设计·springboot
骑着蜗牛撵大象3276 天前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分
码艺-Alimjan8 天前
Tauri 网站To桌面应用实战总结
前端·javascript·vue
liangshiwei10 天前
ABP x Vue:介绍 ABP Vue UI
vue·abp
frjc11 天前
前端技术选型:主流方案对比与落地建议
vue·react·angular
ss27311 天前
AI全栈实战 | 2.3-01 组件库实战:Element Plus 怎么搭出专业界面,过度封装为什么成维护负担
前端·javascript·elementui·vue