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

news2025/1/19 17:04:45

文章目录

  • 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.coloradmin.cn/o/1469929.html

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

相关文章

网络原理TCP之“三次握手“

TCP内核中的建立连接 众所周知,TCP是有连接的. 当我们在客户端敲出socket new Socket(serverIp,severPort)时,就在系统内核就在建立连接 真正建立连接是在系统内核中建立的,我们程序员只是调用相关的api. 在此处,我们把TCP的建立连接称为三次握手. 系统在内核建立连接时如上…

广联达Linkworks GetAllData 信息泄露漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Spring 容器、核心容器总结

目录 创建容器获取 bean容器类层次结构图核心容器总结容器相关bean 相关依赖注入相关 创建容器 方式一&#xff1a; 类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");方式二&#xff1a; 文件路径加载配…

MySQL数据库进阶第四篇(视图/存储过程/触发器)

文章目录 一、视图简单介绍与基础语法二、视图的检查选项三、视图的更新四、视图的作用五、存储过程的概念与特点六、存储过程的 创建&#xff0c;调用&#xff0c;查看&#xff0c;删除七、存储过程 — 系统变量八、存储过程 — 用户定义变量九、存储过程 — 局部变量十、存储…

<网络安全>《51 网络攻防专业课<第十四课 - 华为防火墙的使用(4)>

8 防火墙的防范技术&#xff08;3&#xff09; 8.1 IP spoofing攻击防范 攻击介绍 为了获得访问权&#xff0c;或隐藏入侵者的身份信息&#xff0c;入侵者生成带有伪造源地址的报文。 处理方法 检测每个接口流入的IP报文的源地址与目的地址&#xff0c;并对报文的源地址反查路…

C#与VisionPro联合开发——串口通信

串口通信 串口通信是一种常见的数据传输方式&#xff0c;通过串行接口&#xff08;串口&#xff09;将数据以串行比特流的形式进行传输。在计算机和外部设备之间&#xff0c;串口通信通常是通过串行通信标准&#xff08;如RS-232&#xff09;来实现的。串口通信可以用于连接各…

【HarmonyOS】低代码开发—使用低代码开发服务卡片

DevEco Studio还支持使用低代码开发功能开发服务卡片&#xff0c;目前只支持JS语言&#xff0c;且compileSdkVersion必须为7或以上。 下面以创建一个新的服务卡片为例进行说明。 1.打开一个工程&#xff0c;创建服务卡片&#xff0c;创建方法包括如下两种方式&#xff1a; 选…

vue3前端项目开发,具备纯天然的防止爬虫采集的特征

vue3前端项目开发,具备纯天然的防止爬虫采集的特征&#xff01;众所周知&#xff0c;网络爬虫可以在网上爬取到一些数据&#xff0c;很多公司&#xff0c;为了自己公司的数据安全&#xff0c; 尤其是web端项目&#xff0c;不希望被爬虫采集。那么&#xff0c;您可以使用vue技术…

[c++] char * 和 std::string

1 char * 和 std::string 的区别 char * 字符串是常量字符串&#xff0c;不能修改&#xff1b;std::string 指向的字符串可以修改 实例代码如下图所示&#xff0c;s1 和 s2 均是常量字符串&#xff0c;字符串常量保存在只读数据区&#xff0c;是只读的&#xff0c;不能写&…

【人工智能高频面试题--基础篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;人工智能高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 人工智能高频面试题 1.什么是人工智能&#xff1f;什么是人工智能神经网络&#xff1f;2.解释…

Linux之ACL权限chmod命令

一. chmod命令 chmod命令来自英文词组change mode的缩写&#xff0c;其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限&#xff0c;普通用户只能管理自己文件的权限属性。 设置权限时可以使用数字法&#xff0c;亦可使用字母表达式&#xff0…

C++ //练习 8.8 修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

C Primer&#xff08;第5版&#xff09; 练习 8.8 练习 8.8 修改上一题的程序&#xff0c;将结果追加到给定的文件末尾。对同一个输出文件&#xff0c;运行程序至少两次&#xff0c;检验数据是否得以保留。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工…

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 &#xff08;1&#xff09;在网页页面右键&#xff0c;检查 &#xff08;2&#xff09;找到network&#xff0c;ctrl R刷新 &#xff08;3&#xff09;找 Ajax 数据包 &#xff08;4&#xff09;…

美联储突然降息无望

作者&#xff1a;秦晋 我们知道&#xff0c;影响比特币未来1-2年市场走向的重要三因素是比特币ETF、比特币减半以及美联储降息。 如果说前两者是影响比特币市场比较紧密的微观因素。那么美联储降息就是影响比特币市场的重要宏观因素。如何看懂宏观因素&#xff1f;尽量倾听和观…

从源码学习static的使用

从源码学习static的使用 前言 ​ static意味静态的&#xff0c;在Java中&#xff0c;主要用来修饰类级别的变量或方法等&#xff0c;被修饰的内容&#xff0c;表示随着类的加载而加载&#xff0c;而不是具体的实例级别。 ​ 具体到static的使用场景&#xff0c;主要有以下用…

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue&#xff0c;package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

第2.5章 StarRocks表设计——行列混存表

注&#xff1a;本篇文章阐述的是StarRocks- 3.2.3版本的行列混存表 一、概述 1.1 背景 StarRocks 基于列存格式引擎构建&#xff0c;在高并发场景&#xff0c;用户希望从系统中获取整行数据。当表宽时&#xff0c;列存格式将放大随机IO和读写。自3.2.3开始&#xff0c;StarRo…

让C语言代码变抽象(其三)

目录 前言&#xff1a; 我们直接看代码 前言&#xff1a; 今天我在写判断语句代码的时候&#xff0c;又想到一个更抽象的代码。 今天我将要将我之前写的抽象遍历代码变得更抽象。 我们直接看代码 这里我们用到的是布尔&#xff0c;当条件为假时值为0&#xff1b; 所以我们这…

力扣随笔之移除元素(简单27)

思路&#xff1a;定义一个指针left&#xff0c;使该指针及该指针左边的数全部都不等于val&#xff0c;定义一个遍历指针i&#xff0c;若nums[i] val&#xff0c;则i自加&#xff0c;若nums[i] ! val&#xff0c;则将left&#xff0c;并将nums[i]的值赋给nums[left]&#xff0c…