【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>

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

相关推荐
是梦终空2 天前
计算机源码273—基于SpringBoot+Vue3停车场管理系统带支沙箱支付(源代码+数据库)
数据库·spring boot·vue·mybatis·停车场管理系统·沙箱支付·毕设设计
_Twink1e2 天前
基于Vue的纯前端的库存销售系统
前端·vue.js·vue·web
灵魂学者2 天前
使用 Electron 打包项目构建 .EXE 桌面应用程序(简)
electron·node.js·vue·build·桌面应用程序
Zephyr_02 天前
SQL,MyBatis-Plus,maven,Spring与VUE3
sql·spring·vue·maven·mybatis
:mnong3 天前
附图报价系统设计分析5
electron·pdf·vue·cad·dwg·定额
桃花键神3 天前
【2026精品项目】基于SpringBoot3+Vue3的旧物置换系统(包含源码+项目文档+SQL脚本+部署教程)
数据库·spring boot·sql·vue
FlyWIHTSKY3 天前
**Vue 3 `<script setup>` 语法糖** 中的一行解构赋值,用来**从父组件透传下来的属性(attrs)
vue
CAE虚拟与现实3 天前
前后端调试常用工具大全
前端·后端·vue·react·angular
web行路人4 天前
前端对Commands(斜杠命令)一些常用
前端·javascript·vue.js·vue
布局呆星5 天前
Spring Boot+MyBatis-Plus+Vue3前后端协作Note
spring boot·typescript·vue·mybatis