当前位置: 首页 > news >正文

ArcGIS for js 缓冲(vue项目)

示例:

一、页面布局

<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);// 点赋值给engineGraphicGeometryengineGraphicGeometry=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);// 矩形赋值给engineGraphicGeometryengineGraphicGeometry = 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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码”byte a = 0Xa1“为什么会报编译错误?
  • python游戏开发之五子棋游戏制作
  • Fast-DDS的依赖 foonathan_memory_vendor编译
  • ZICO2: 1【附代码】(权限提升)
  • 智算新风向丨趋动科技获中国信通院泰尔实验室首张智算资源池化能力泰尔测评证书
  • U2net论文复现-简单解读-以及奇奇怪怪的改进-测试roc以及pr
  • 机器学习用Python 还是 R语言?
  • Unknown input format pdf Pandoc can convert to PDF, but not from PDF.解决方案
  • Webkit与Web Push API:提升用户体验的推送技术
  • P3008 [USACO11JAN] Roads and Planes G
  • 24.8.3数据结构|双向循环链表、静态链表
  • 在大语言模型中,我们每次输入的语句长度不同,这样会影响结果吗;在大语言模型中,训练中每次的输入长度都是不一样的,但是是一样权重矩阵,不足的话是补 0吗;;;
  • 前端day7-css选择器
  • 国产AI大模型:从萌芽到繁盛,未来可期
  • uniapp vue3 转换华为鸿蒙(以及问题一些解决方案)
  • hexo+github搭建个人博客
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • bearychat的java client
  • canvas 高仿 Apple Watch 表盘
  • DataBase in Android
  • ES6语法详解(一)
  • github指令
  • Laravel Telescope:优雅的应用调试工具
  • MaxCompute访问TableStore(OTS) 数据
  • Python学习之路13-记分
  • Selenium实战教程系列(二)---元素定位
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue.js源码(2):初探List Rendering
  • vue2.0项目引入element-ui
  • 包装类对象
  • 从tcpdump抓包看TCP/IP协议
  • 从输入URL到页面加载发生了什么
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 聊聊directory traversal attack
  • 前端工程化(Gulp、Webpack)-webpack
  • 深入浅出Node.js
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 @font-face
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Prometheus VS InfluxDB
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #WEB前端(HTML属性)
  • $ git push -u origin master 推送到远程库出错
  • $NOIp2018$劝退记
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (二)windows配置JDK环境
  • (二十三)Flask之高频面试点
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统