ArcgisForJS如何使用ArcGIS Server的缓冲区几何服务?

文章目录

  • 0.引言
  • 1.使用geometryService生成缓冲区
  • 2.使用geometryEngine生成缓冲区

0.引言

ArcGIS For JS是一款强大的JavaScript库,它提供了许多功能,包括使用ArcGIS Server的缓冲区几何服务。缓冲区几何服务是一种服务,它允许你在地理空间数据上创建一个缓冲区,这个缓冲区是一个多边形区域,它围绕在特定距离内的所有点。这种服务在许多应用中都非常有用,例如在地理信息系统(GIS)中,它可以用于分析某个区域内的所有点。

1.使用geometryService生成缓冲区

(1)查看ArcGIS Server的几何服务
  在这里插入图片描述

  在这里插入图片描述
以下上面红框网址为服务地址,下面红框为操作方法。
  在这里插入图片描述
url:http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer

(2)实现代码

<html lang="en"><head>  <meta charset="utf-8" />  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />  <title>GeometryEngine - geodesic buffers | Sample | ArcGIS Maps SDK for JavaScript 4.28</title>  <style>  html,  body {  padding: 0;  margin: 0;  height: 100%;  }  .viewDivBase {  padding: 0;  margin: 0;  height: 100%;  width: 49.9%;  }  #viewDiv2d {  height: 100%;  width: 100%;  }  #info {  padding: 5px;  margin: 5px;  width: 120px;  text-align: center;  }  </style>  <link rel="stylesheet" href="https://js.arcgis.com/4.28/esri/themes/light/main.css" />  <script src="https://js.arcgis.com/4.28/"></script>  <script>  require([  "esri/Map",  "esri/views/SceneView",  "esri/views/MapView",  "esri/layers/GraphicsLayer",  "esri/Graphic",  "esri/geometry/geometryEngine",  "esri/rest/geometryService",  "esri/rest/support/BufferParameters",  "esri/geometry/SpatialReference"  ], (Map,  SceneView,  MapView,  GraphicsLayer,  Graphic,  geometryEngine,  geometryService,  BufferParameters,  SpatialReference) => {  const map = new Map({  basemap: "satellite"  });  const bufferLayer = new GraphicsLayer();  const pointLayer = new GraphicsLayer();  map.addMany([bufferLayer, pointLayer]);  const viewOptions = {  map: map,  zoom: 3,  center: [0, 60]  };  const view2d = new MapView(viewOptions);  view2d.container = "viewDiv2d";  const polySym = {  type: "simple-fill", // autocasts as new SimpleFillSymbol()  color: [140, 140, 222, 0.5],  outline: {  color: [0, 0, 0, 0.5],  width: 2  }  };  const pointSym = {  type: "simple-marker",  color: [255, 0, 0],  outline: {  color: [255, 255, 255],  width: 1  },  size: 7  };  let bufferEnabled = true;  view2d.on(["click"], event => {  if (bufferEnabled) {  createBuffer(event, view2d);  }  });  function createBuffer(event, view) {  event.stopPropagation();  const point = view.toMap(event);  if (point) {  bufferPoint(point);  }  }  function bufferPoint(point) {  if (!bufferEnabled) {  console.log("buffering not enabled. Hit the b key and click/drag to buffer.");  return;  }  point.hasZ = false;  point.z = undefined;  if (pointLayer.graphics.length === 0) {  pointLayer.add(  new Graphic({  geometry: point,  symbol: pointSym  })  );  } else {  const graphic = pointLayer.graphics.getItemAt(0);  graphic.geometry = point;  }  //使用geometryService生成缓冲区  var url="http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer/";  const params = new BufferParameters({  distances: [560],  unit: "kilometers",  geodesic: true,  bufferSpatialReference: new SpatialReference({ wkid: 3857 }),  outSpatialReference: view2d.spatialReference,  geometries: [point]  });  geometryService.buffer(url, params).then(function (results) {  const buffer = results[0];  if (bufferLayer.graphics.length === 0) {  bufferLayer.add(  new Graphic({  geometry: buffer,  symbol: polySym  })  );  } else {  const graphic = bufferLayer.graphics.getItemAt(0);  graphic.geometry = buffer;  }  });  //使用geometryEngine生成缓冲区  // const buffer = geometryEngine.geodesicBuffer(point, 560, "kilometers");  // if (bufferLayer.graphics.length === 0) {  //   bufferLayer.add(  //     new Graphic({  //       geometry: buffer,  //       symbol: polySym  //     })  //   );  // } else {  //   const graphic = bufferLayer.graphics.getItemAt(0);  //   graphic.geometry = buffer;  // }  }  });  </script>  
</head>  <body>  <div class="viewDivBase" id="viewDiv2d"></div>  
</body>  </html>

(3)实现结果
  在这里插入图片描述

2.使用geometryEngine生成缓冲区

(1)实现代码

<html lang="en"><head>  <meta charset="utf-8" />  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />  <title>GeometryEngine - geodesic buffers | Sample | ArcGIS Maps SDK for JavaScript 4.28</title>  <style>  html,  body {  padding: 0;  margin: 0;  height: 100%;  }  .viewDivBase {  padding: 0;  margin: 0;  height: 100%;  width: 49.9%;  }  #viewDiv2d {  height: 100%;  width: 100%;  }  #info {  padding: 5px;  margin: 5px;  width: 120px;  text-align: center;  }  </style>  <link rel="stylesheet" href="https://js.arcgis.com/4.28/esri/themes/light/main.css" />  <script src="https://js.arcgis.com/4.28/"></script>  <script>  require([  "esri/Map",  "esri/views/SceneView",  "esri/views/MapView",  "esri/layers/GraphicsLayer",  "esri/Graphic",  "esri/geometry/geometryEngine",  "esri/rest/geometryService",  "esri/rest/support/BufferParameters",  "esri/geometry/SpatialReference"  ], (Map,  SceneView,  MapView,  GraphicsLayer,  Graphic,  geometryEngine,  geometryService,  BufferParameters,  SpatialReference) => {  const map = new Map({  basemap: "satellite"  });  const bufferLayer = new GraphicsLayer();  const pointLayer = new GraphicsLayer();  map.addMany([bufferLayer, pointLayer]);  const viewOptions = {  map: map,  zoom: 3,  center: [0, 60]  };  const view2d = new MapView(viewOptions);  view2d.container = "viewDiv2d";  const polySym = {  type: "simple-fill", // autocasts as new SimpleFillSymbol()  color: [140, 140, 222, 0.5],  outline: {  color: [0, 0, 0, 0.5],  width: 2  }  };  const pointSym = {  type: "simple-marker",  color: [255, 0, 0],  outline: {  color: [255, 255, 255],  width: 1  },  size: 7  };  let bufferEnabled = true;  view2d.on(["click"], event => {  if (bufferEnabled) {  createBuffer(event, view2d);  }  });  function createBuffer(event, view) {  event.stopPropagation();  const point = view.toMap(event);  if (point) {  bufferPoint(point);  }  }  function bufferPoint(point) {  if (!bufferEnabled) {  console.log("buffering not enabled. Hit the b key and click/drag to buffer.");  return;  }  point.hasZ = false;  point.z = undefined;  if (pointLayer.graphics.length === 0) {  pointLayer.add(  new Graphic({  geometry: point,  symbol: pointSym  })  );  } else {  const graphic = pointLayer.graphics.getItemAt(0);  graphic.geometry = point;  }  // //使用geometryService生成缓冲区  // var url="http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer/";  // const params = new BufferParameters({  //   distances: [560],  //   unit: "kilometers",  //   geodesic: true,  //   bufferSpatialReference: new SpatialReference({ wkid: 3857 }),  //   outSpatialReference: view2d.spatialReference,  //   geometries: [point]  // });  // geometryService.buffer(url, params).then(function (results) {  //   const buffer = results[0];  //   if (bufferLayer.graphics.length === 0) {  //     bufferLayer.add(  //       new Graphic({  //         geometry: buffer,  //         symbol: polySym  //       })  //     );  //   } else {  //     const graphic = bufferLayer.graphics.getItemAt(0);  //     graphic.geometry = buffer;  //   }  // });  使用geometryEngine生成缓冲区  const buffer = geometryEngine.geodesicBuffer(point, 560, "kilometers");  if (bufferLayer.graphics.length === 0) {  bufferLayer.add(  new Graphic({  geometry: buffer,  symbol: polySym  })  );  } else {  const graphic = bufferLayer.graphics.getItemAt(0);  graphic.geometry = buffer;  }  }  });  </script>  
</head>  <body>  <div class="viewDivBase" id="viewDiv2d"></div>  
</body>  </html>

(2)实现结果
  在这里插入图片描述

参考资料:
[1] 一入GIS深似海. 不一样的前端,JavaScript之arcgis api教程; 2020-11-02 [accessed 2024-02-25].
[2] 牛老师讲GIS. Arcgis for Js之GeometryService实现测量距离和面积; 2014-10-28 [accessed 2024-02-25].
[3] 带着天使反上帝 - Kaybee. arcgis api for javascript 计算长度和面积; 2017-11-12 [accessed 2024-02-25].
[4] GISer.Wang. (十四)ArcGIS API For Javascript之几何服务; 2016-11-26 [accessed 2024-02-25].

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode # 206. 反转链表

206. 反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例…

Intel SGX 概述 --潦草笔记

文章目录 前言一、SGX介绍1.1 指令介绍1.2 数据结构 二、内存保护过程2.1 enclave页面缓存&#xff08;EPC&#xff09;2.2 Enclave页面缓存映射&#xff08;EPCM&#xff09; 三、部署SGX参考资料 前言 SGX是Intel开发的新的处理器技术&#xff0c;可以在计算平台上提供一个可…

Docker本地部署GPT聊天机器人并实现公网远程访问

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址9. 结语 前言 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&…

本地数据库Room——study_1

目录 1.概念 2.组成 3.导入依赖 4.具体实现 4.1 数据表的设置 4.2 方法接口 4.3 数据库类 -》 基石&#xff0c;使用模板 4.4 实现真正的实例Room库 1.概念 Room 持久性库在 SQLite 上提供了一个抽象层&#xff0c;以便在充分利用 SQLite 的强大功能的同时&#xff0c…

12v-36V转5v1A车载空气净化器芯片供电方案-AH8332G

12V-36V转5V 1A车载空气净化器芯片供电方案 随着车载空气净化器的普及&#xff0c;如何为其提供稳定、高效的电源已成为一个重要问题。本文将介绍一种适用于车载空气净化器的供电方案&#xff0c;该方案可将输入电压范围为12V-36V的电源转换为输出为5V&#xff0c;峰值电流为1…

网站数据加密之Hook通用方案

文章目录 1. 写在前面2. 请求分析3. 编写Hook4. 其他案例 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

dolphinscheduler伪集群部署教程

文章目录 前言一、配置免密登录1. 配置root用户免密登录2. 创建用户2.1 创建dolphinscheduler用户2.2 配置dolphinscheduler用户免密登录2.3 退出dolphinscheduler用户 二、安装准备1. 安装条件2. 安装jdk3. 安装MySQL4. 安装zookeeper4.1 zookeeper单机部署4.1.1 zookeeper3.1…

echarts鼠标向右/向左绘制实现放大/还原

echarts toolbox 的datazoom提供了绘制放大的功能&#xff0c;但通过鼠标绘制只能进行放大 应需求放大与还原都通过鼠标行为实现&#xff0c;增加从右往左绘制时还原放大结果 demo 结果 重写datazoom的原型方法实现绘制事件的拦截 const comp myChart._model.getComponent(to…

智慧公厕:打造智慧城市环境卫生新标杆

随着科技的不断发展和城市化进程的加速推进&#xff0c;智慧城市建设已经成为各地政府和企业关注的焦点。而作为智慧城市环境卫生管理的基础设施&#xff0c;智慧公厕的建设和发展也备受重视&#xff0c;被誉为智慧城市的新标杆。本文以智慧公厕源头厂家广州中期科技有限公司&a…

python 中常用的热门库介绍

阅读本文之前请参阅-----如何系统的自学python Python 是一种非常流行的编程语言&#xff0c;它的一个主要优势是拥有一个庞大的生态系统&#xff0c;其中包括许多强大的库。这些库为各种任务提供了解决方案&#xff0c;从数据分析到机器学习&#xff0c;从网络爬虫到图像处理。…

Linux安装Nginx详细步骤

1、创建两台虚拟机&#xff0c;分别为主机和从机&#xff0c;区别两台虚拟机的IP地址 2、将Nginx素材内容上传到/usr/local目录&#xff08;pcre,zlib,openssl,nginx&#xff09; 附件 3、安装pcre库   3.1 cd到/usr/local目录 3.2 tar -zxvf pcre-8.36.tar.gz 解压 3.3 cd…

vue使用gitshot生成gif

vue使用gitshot生成gif 问题背景 本文将介绍vue中使用gitshot生成gif。 问题分析 解决思路&#xff1a; 使用input组件上传一个视频&#xff0c;获取视频文件后用一个video组件进行播放&#xff0c;播放过程进行截图生成图片数组。 demo演示上传一个视频&#xff0c;然后生…