ArcGIS for js 缓冲(vue项目)

news2024/12/23 17:19:45

示例:

一、页面布局

<template>
    
    <div id="viewDiv">

        <div class="content">
          <el-button-group class="btnGroup">
            <el-button type="button" @click="toolClick('point')" title="缓冲点">缓冲点</el-button>
            <el-button type="button" @click="toolClick('polygon')" title="缓冲面">缓冲面</el-button>
            <el-button type="button" @click="toolClick('rectangle')" title="缓冲矩形">缓冲矩形</el-button>
          </el-button-group>
        </div>

   </div>


</template>
<script setup>
    ***
    ***
</script>
<style lang="less" scoped>
 .map ::v-deep .esri-view-surface.esri-view-surface--touch-none:focus::after {
		outline: none !important;
	}
	.map {
		width: 100%;
		/* height: 185vw; */
		position: absolute;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
	}

#viewDiv {
        padding: 0;
        margin: 0;
        height: 100vh;
        width: 100%;
    }

    .content{
        width:20%;
        left: 40%;
        right:40%;
        position: absolute;
        margin: 10;
       
    }
   
</style>

二、引入依赖
 

import {onMounted, ref} from 'vue';
import Map from "@arcgis/core/Map";
import Color from "@arcgis/core/Color";
import Graphic from "@arcgis/core/Graphic.js";
import MapView from "@arcgis/core/views/MapView";
import "@arcgis/core/assets/esri/themes/light/main.css";
import WebTileLayer from "@arcgis/core/layers/WebTileLayer";
import FeatureLayer from "@arcgis/core/layers/FeatureLayer.js";
import Point from "@arcgis/core/geometry/Point.js";
import SimpleFillSymbol from "@arcgis/core/symbols/SimpleFillSymbol";
import SimpleLineSymbol from "@arcgis/core/symbols/SimpleLineSymbol";
import * as geometryService from "@arcgis/core/rest/geometryService.js";
import * as geometryEngine from "@arcgis/core/geometry/geometryEngine.js";
import SketchViewModel from "@arcgis/core/widgets/Sketch/SketchViewModel.js";
import GraphicsLayer from "@arcgis/core/layers/GraphicsLayer.js";
import BufferParameters from "@arcgis/core/rest/support/BufferParameters.js";

三、实现代码

<script setup>
***
***

let sketchViewModel = null;
let graphicsLayer = null;
let graphicsLayerId = "graphicsLayer";
let engineGraphicGeometry = null;


onMounted(()=>{
  view.container = "viewDiv";

  createGraphicsLayer();

  createSketchViewModel();

  bufferMethod();
});


function toolClick(type){

  switch(type){
    case "point":
      graphicsLayer.removeAll();//清除绘制图层
      // 绘制点 
      sketchViewModel.create("point", { "mode": "click" });
    break;
    case "polygon":
    graphicsLayer.removeAll();//清除绘制图层
      // 绘制面
      sketchViewModel.create("polygon", { mode: "click" });
    break;
    case "rectangle":
    graphicsLayer.removeAll();//清除绘制图层
      // 绘制矩形
      sketchViewModel.create("rectangle", { mode: "click" });
    break;
  }

}

// 地图
const dzLayer = new WebTileLayer({
        urlTemplate: "http://{subDomain}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={col}&TILEROW={row}&TILEMATRIX={level}&tk=7b79e37115f10c512f76cdecda599902",
        subDomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7']
    });


    // 标注
    const dzbzLayer = new WebTileLayer({
        urlTemplate: "https://{subDomain}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={col}&TILEROW={row}&TILEMATRIX={level}&tk=7b79e37115f10c512f76cdecda599902",
        subDomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7']
    });


   const featureLayer = new FeatureLayer({
		url:"http://116.141.0.114:48080/geoscene/rest/services/%E8%80%95%E4%BF%9D/%E5%8F%8C%E9%98%B3%E5%8C%BA%E5%9B%BE%E6%96%91/FeatureServer/0",
		outFields: ["*"], //加载所有要素字段
		opacity:0.5,//透明度
		//popupTemplate: TuCeng03TC, //加载模板,
		//definitionExpression: "",// 筛查
		// 渲染
		renderer: {
			type: "simple",
			symbol: {
				type: "simple-fill",//simple-line(线)、simple-fill(面)
				style: "solid",// solid 全部填充、cross十字交错、diamond菱形、square矩形、triangle三角形
				color: [255,20,60, 0.4],
				outline: {
					color: [255, 0, 0, 1],
					width: 2,
				},
			},
		}
	});

    const map = new Map({
        basemap: {
            baseLayers: [dzLayer,featureLayer],
            referenceLayers:[dzbzLayer]
        }
    });


    const  view = new MapView({
        // 长春坐标系
        center:[125.331345,43.8328],
        // 初始层级
        zoom:10,
        //container:"viewDiv",
        map:map,
        constraints: {
            minZoom: 10,// 最小层级
            maxZoom: 19 // 最大层级
        }
    });


// 创建绘制图层
function createGraphicsLayer(){
  graphicsLayer = map.findLayerById(graphicsLayerId)
	if (graphicsLayer === null || graphicsLayer === undefined) {
		graphicsLayer = new GraphicsLayer({id: graphicsLayerId})
		map.add(graphicsLayer)
	}
  //清空上次绘制图形
	graphicsLayer.removeAll();
}

// 创建绘制图层模板
function createSketchViewModel(){
  if (sketchViewModel == null || sketchViewModel == undefined) {
		sketchViewModel = new SketchViewModel({
			view: view,
			layer: graphicsLayer, //view不可编辑,map的可编辑
		});
	}
}

function bufferMethod(){
  sketchViewModel.on("create",function(event){
    if(event.state === "complete"){
      if(event.graphic.geometry.type == "point"){
        let point = new Point({
          x:event.graphic.geometry.x,
          y: event.graphic.geometry.y,
					spatialReference: event.graphic.geometry.spatialReference,
        });

        // 点
        const centerPoint = new Graphic({
					geometry: point,
          symbol:{
            type:"simple-marker",
            color:[255,0,0],
            outline:{
              color:[255,255,255],
              width:1
            },
            size:7
          }
          // 图片
					// symbol: {
					// 	type: "picture-marker",
					// 	url: new URL(icons, import.meta.url).href,
					// 	width: "40px",
					// 	height: "40px",
					// },
				});
        // 点添加到绘制图层
        graphicsLayer.add(centerPoint);
        // 点赋值给engineGraphicGeometry
        engineGraphicGeometry=centerPoint.geometry;
      }else if(event.graphic.geometry.type == "polygon" || event.graphic.geometry.type == "rectangle"){
        // 矩形
        let symbol = new SimpleFillSymbol({
					style: "solid",
					outline: new SimpleLineSymbol({
						style: "solid",
						color: new Color([255, 0, 0]),
						width: 2,
					}),
					color: new Color([255, 255, 0, 0.25]),
				});
				let handgraphic = new Graphic({
					geometry: event.graphic.geometry,
					symbol: symbol,
				});
        // 添加矩形
				graphicsLayer.add(handgraphic);
        // 矩形赋值给engineGraphicGeometry
        engineGraphicGeometry = handgraphic.geometry;
      }

      /*
      // 使用geometryService生成缓冲区
      const url = "https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer";

      //创建缓冲区参数
      let params = new BufferParameters({
            geometries: [event.graphic.geometry],
            distances: [10],
            unit: "kilometers",//meters-米;kilometers-千米",
            outSpatialReference: view.spatialReference,
            bufferSpatialReference:view.spatialReference,
        });

        geometryService.buffer(url,params).then(function(results){
          let symbol = new SimpleFillSymbol({
						style: "solid",
						outline: new SimpleLineSymbol({
							style: "solid",
							color: new Color([160, 219, 211, 0.8]),
							width: 1,
						}),
						color: new Color([217, 236, 219, 0.4]),
					});
					let graphic = new Graphic({
						geometry: results[0],
						symbol: symbol,
					});
					graphicsLayer.add(graphic);
        });
        */

        //使用geometryEngine生成缓冲区
        const buffer = geometryEngine.geodesicBuffer(engineGraphicGeometry,10,"kilometers");
        // 缓冲区样式
        let symbol = new SimpleFillSymbol({
						style: "solid",
						outline: new SimpleLineSymbol({
							style: "solid",
							color: new Color([160, 219, 211, 0.8]),
							width: 1,
						}),
						color: new Color([217, 236, 219, 0.4]),
					});
        // 缓冲图形
        const bufferLayer = new Graphic({
          geometry:buffer,
          symbol:symbol,
        });

        graphicsLayer.add(bufferLayer);

    }
  });
}
    

</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查询表信息时有一个数据为null相关解决

查询的时候varchar类型的username一直查不到为null,这个问题干了我好久 当时我以为是连接mysql数据库的时候没有在url后面添加添加指定字符的编码、解码格式的参数约束.然后经过分析发现 我创建的这个Account对象 直接上结果&#xff0c;问题出在了setUsername()方法上 错误…

ICM-20948芯片详解(7)

接前一篇文章&#xff1a;ICM-20948芯片详解&#xff08;6&#xff09; 五、组件概览及详述 再次给出ICM-20948芯片的内部结构框图&#xff1a; 2. 组件详述 &#xff08;9&#xff09;传感器数据寄存器 传感器数据寄存器包含最新的陀螺仪、加速计、辅助传感器和温度测量数据…

Python获取Excel内容

Python获取Excel内容 目录 Python获取Excel内容1.读取Excel并登陆2.下载Excel中图片 数据存储到列表3.上传到接口 需求&#xff1a;获取xlsx files目录下的所有Excel信息&#xff0c;并将数据打包成字典格式上传到接口 示例数据&#xff1a; 1.读取Excel并登陆 import os impo…

只渲染阴影(blender的cycle渲染)

点击物体属性&#xff0c;visibility&#xff0c;mask的阴影收集器 shadow catcher 点出蒙版层 新建collection收集集合&#xff0c;点击蒙版让物体消失并挖洞&#xff0c;

我命由我不由天:我的计算机教师中级岗之旅

在计算机行业的洪流中&#xff0c;作为一名20年计算机专业毕业的博主&#xff0c;我深知这几年就业的坎坷与辉煌。今天&#xff0c;我想与大家分享我的故事&#xff0c;一段关于梦想、挑战与坚持的计算机教师中级岗之旅。希望我的经历能为大家提供一个发展方向&#xff0c;在计…

群晖第五篇-docker部署自动化程序并设置推送

因网络政策调整&#xff0c;我们今后在使用docker的时候会比较繁琐。。。 1.打开Container Manager配置docker源&#xff0c;在右侧注册表镜像URL中填入自己找到的可用的docker镜像地址&#xff0c;然后点击应用。 2.在注册表页面中搜索"qd"&#xff0c;下载第一个镜…

java 位运算符

java位运算符 位于算符符号解释&按位与 当两位同为1时返回1|按位或,只要有一位为1即返回1~按位非,将操作数每个位(包括符号位,全部取反)^按位异或 两位相同时返回0,不相同时返回1<<左移运算符>>右移运算符 符号的介绍: &(与) -> 有假则假|(或) ->…

ctfhub eval执行

url http://challenge-1e9b95e5c3c2862c.sandbox.ctfhub.com:10800/ 源码 <?php if (isset($_REQUEST[cmd])) {eval($_REQUEST["cmd"]); } else {highlight_file(__FILE__); } ?> 首先&#xff0c;isset($_REQUEST[cmd]) 用于检查是否通过 $_REQUEST &am…

连接其他主机上的redis连接不上`telnet: Unable to connect to remote host: Connection refused`

telnet: Unable to connect to remote host: Connection refused 这个错误通常表示目标主机&#xff08;192.168.8.29&#xff09;上的服务&#xff08;6379端口&#xff09;没有运行&#xff0c;或者主机的防火墙/网络设置阻止了连接。 你可以尝试以下步骤来解决问题&#xf…

计算机组成原理核心概念-问题理解

目录 1.怎么理解计算机组成原理中存储器、控制器、运算器、输入输出设备之间的协作关系和工作流程 2.比、比特等类似几种表示信息存储的单位具体换算 3.介绍计算机的五大功能-数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能 4.计算机的工作过程/指令…

OED下载助手地址

ODE v0.8.9 官方版 (自窝挖坑多功能生态应用) | 克隆窝ODE易称"窝的"&#xff0c;是窝头将以多功能生态为主扩展开发的应用&#xff0c;会随时间发展慢慢堆积些有的没的功能&#xff0c;主要用于自窝学习&#xff0c;也希望能帮到大家。 下载地址&#xff1a; 克隆窝…

Java基础:线程池拒绝策略详解

目录 线程池拒绝策略概述1. AbortPolicy&#xff08;默认策略&#xff09;2. CallerRunsPolicy3. DiscardPolicy4. DiscardOldestPolicy5. 自定义拒绝策略 在Java多线程编程中&#xff0c;线程池&#xff08;ThreadPool&#xff09;是一种重要的并发工具&#xff0c;它允许我们…

代码随想录 day 32 动态规划

第九章 动态规划part01 今天正式开始动态规划&#xff01; 理论基础 无论大家之前对动态规划学到什么程度&#xff0c;一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目&#xff0c;看我讲的理论基础&#xff0c;会有感觉 是不是简单题想复杂了&#xff1f; …

0208-场景状态模式的UML图

一、设置状态 二、Uml类图

白话Java - 守护线程

全文详见个人独立博客&#xff1a;白话Java - 守护线程 白话Java - 守护线程关于”白话”, 偶然想到的词。目的就是用简洁&#xff0c;明快的语言来告诉您&#xff0c;我所知道的一切。 Java中的线程分两类&#xff0c;用户线程和守护线程。 Thread commonThread new Thread(…

尚硅谷谷粒商城项目笔记——七、安装rabbitMQ【电脑CPU:AMD】

七、安装rabbitMQ 注意&#xff1a; 因为电脑是AMD芯片&#xff0c;自己知识储备不够&#xff0c;无法保证和课程中用到的环境一样&#xff0c;所以环境都是自己根据适应硬件软件环境重新配置的&#xff0c;这里的虚拟机使用的是VMware。 [!NOTE] 下载RabbitMQ和Erlang的安装…

最新!2024年—华为认证HCIP考证流程

HCIP HCIP&#xff08;Huawei Certified ICT Professional 华为认证ICT高级工程师&#xff09;是华为职业认证中用于标识个人能力在某一技术领域达到高级工程师级别的证明&#xff0c;表示通过认证的人员具有丰富的ICT知识和实践能力。 HCIP方向 HCIP认证条件 无&#xff0…

蝙蝠避障:盲人出行的守护者,让每一步都安心

在这个多彩的世界里&#xff0c;作为一位盲人&#xff0c;我时常感受着出行的种种挑战。每一次踏出家门&#xff0c;都是一场未知的探险&#xff0c;心里难免有些忐忑。街道上的车流声、人群的喧闹&#xff0c;这些对我而言只是模糊的背景音&#xff0c;真正让我担忧的是那些突…

【AI】OCR篇1

每日更新&#xff0c;建议关注、收藏、点赞 ocr流程 版面分析 、预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正 判断页面上的文本朝向&#xff0c;图像预处理&#xff0c;做角度矫正和去噪。对文档版面进行分析&#xff0c;进每一行进行行分割&#xff0c;把每…

AI/机器学习(计算机视觉/NLP)方向面试复习4

1. 什么是知识图谱&#xff1f; 是结构化的语义知识库&#xff0c;用于迅速描述物理世界中的概念及其相互关系。它的基本单位是(实体-关系-实体) 就是点-线-点。 存储类型有结构化和非结构化的数据。结构化数据就是关系数据库&#xff0c;一张表格&#xff0c;关系很清楚&…