钟离赢硕 發表於 2023-11-7 17:53:00

ArcGIS API for JavaScript入门

<p>arcgis官网:https://arcgis.fenxianglu.cn/docs/load.html</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106175338816-1991557925.png" alt="" width="863" height="499" loading="lazy"></p>
<p>官网英文版地址:https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231108165840225-708439866.png" alt="" width="804" height="475" loading="lazy"></p>
<p>&nbsp;</p>
<h3>一、集成到应用----@arcgis/core方式</h3>
<p>1、引入ArcGIS API for JavaScript</p>
<div class="cnblogs_code">
<pre>yarn add @arcgis/core</pre>
</div>
<p>或者指定安装版本</p>
<div class="cnblogs_code">
<pre>yarn add @arcgis/core@<span style="color: rgba(128, 0, 128, 1)">4.25</span></pre>
</div>
<p>如果提示:'yarn' 不是内部或外部命令,也不是可运行的程序 或批处理文件。则先安装yarn,安装命令如下:</p>
<div class="cnblogs_code">
<pre>npm install -g yarn </pre>
</div>
<p>安装完成后,如下所示:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106144624588-559745454.png" alt="" width="227" height="263" loading="lazy"></p>
<p>2、创建一个div,装载我们的地图</p>
<div class="cnblogs_code">
<pre>&lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;</pre>
</div>
<p>3、引入arcgis</p>
<div class="cnblogs_code">
<pre>import Map <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/Map.js</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import MapView </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/views/MapView.js</span><span style="color: rgba(128, 0, 0, 1)">"</span>;</pre>
</div>
<p>引入ArcGIS中的样式</p>
<div class="cnblogs_code">
<pre>import <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/assets/esri/themes/light/main.css</span><span style="color: rgba(128, 0, 0, 1)">"</span>;</pre>
</div>
<p>4、在mounted创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted(){</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">basemap: basemap,</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用本地ArcGIS server中发布的地图服务</span>
      basemap: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用在线地图服务</span>
      zoom: <span style="color: rgba(128, 0, 128, 1)">24</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">地图初始化缩放级别   只有使用在线地图服务该属性才有效</span>
<span style="color: rgba(0, 0, 0, 1)">    });
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(255, 0, 0, 1)">//美国WGS_84坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">99.298390123</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">32.192839123</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">125.2983901923</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">50.281973892</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心点坐标</span>
      center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
    })
}</span></pre>
</div>
<p>注意:不能在created中创建,否则报错:</p>
<div class="cnblogs_code">
<pre> #container element with id <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span> not found</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106152744683-984301741.png" alt="" width="828" height="356" loading="lazy"></p>
<p>清除放大缩小按钮</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<p>把左上角放大缩小组件移到右下角</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.move(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">bottom-right</span><span style="color: rgba(128, 0, 0, 1)">'</span>);</pre>
</div>
<p>清除底部powered by ESRI</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribution</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107100619244-1428161447.png" alt="" width="816" height="334" loading="lazy"></p>
<p>完整代码如下:</p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">about</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
    &lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/assets/esri/themes/light/main.css</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import Map </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/Map.js</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import MapView </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/views/MapView.js</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;</span>
<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AboutView</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
components: {

},
mounted(){</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({</span>
      basemap: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用在线地图服务</span>
      zoom: <span style="color: rgba(128, 0, 128, 1)">24</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">地图初始化缩放级别   只有使用在线地图服务该属性才有效</span>
<span style="color: rgba(0, 0, 0, 1)">    });
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">限定范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//美国WGS_84</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">99.298390123</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">32.192839123</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">125.2983901923</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">50.281973892</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标</span>
      center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
    })
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除放大缩小按钮</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribution</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除底部powered by ESRI</span>
<span style="color: rgba(0, 0, 0, 1)">}
}
</span>&lt;/script&gt;</pre>
</div>
<p><strong>中心点</strong>:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心点</span>
      center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
    })</span></pre>
</div>
<p id="转到中心点">转到中心点</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mapView.goTo({
center: [</span><span style="color: rgba(128, 0, 128, 1)">110.123141243</span>, <span style="color: rgba(128, 0, 128, 1)">33.5322342</span><span style="color: rgba(0, 0, 0, 1)">]
})</span></pre>
</div>
<p>获取中心点</p>
<div class="cnblogs_code">
<pre>console.log(mapView.center)</pre>
</div>
<p id="触发地图">触发地图</p>
<p>可以使用设置本身中心点来触发地图。</p>
<div class="cnblogs_code">
<pre>mapView.<span style="color: rgba(0, 0, 255, 1)">set</span>({center: })</pre>
</div>
<p>&nbsp;</p>
<p><strong>MapView的基础设置</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置旋转角度为 270</span>
mapView.rotation = <span style="color: rgba(128, 0, 128, 1)">270</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置缩放层级为 18</span>
mapView.zoom = <span style="color: rgba(128, 0, 128, 1)">18</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置中心点为 [-112, 38]</span>
mapView.center = [-<span style="color: rgba(128, 0, 128, 1)">112</span>, <span style="color: rgba(128, 0, 128, 1)">38</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置地图比例为 1:24000</span>
mapView.scale = <span style="color: rgba(128, 0, 128, 1)">24000</span></pre>
</div>
<p>MapView的限定范围</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,</span>
            extent: <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Extent({
            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
            }),</span>
          })</pre>
</div>
<p>实例创建完成回调</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mapView.when(function(){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This function will execute once the promise is resolved</span>
<span style="color: rgba(0, 0, 0, 1)">}, function(error){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This function will execute if the promise is rejected due to an error</span>
}); </pre>
</div>
<p>属性设置</p>
<div class="cnblogs_code">
<pre>mapView.<span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">({
    center: [</span><span style="color: rgba(128, 0, 128, 1)">121.3022630323934</span>, <span style="color: rgba(128, 0, 128, 1)">29.868660680345652</span><span style="color: rgba(0, 0, 0, 1)">],
    zoom: </span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
});</span></pre>
</div>
<p>观察属性变动</p>
<div class="cnblogs_code">
<pre>mapView.watch([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">], function(newV, oldV, propName) {
    console.log(newV, oldV, propName)
});</span></pre>
</div>
<p>MapView.toScreen函数</p>
<p>将给定的map point 转换为屏幕点。屏幕点表示相对于视图左上角的像素点。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> mapPoint =<span style="color: rgba(0, 0, 0, 1)"> {
x: </span>-<span style="color: rgba(128, 0, 128, 1)">49.97</span><span style="color: rgba(0, 0, 0, 1)">,
y: </span><span style="color: rgba(128, 0, 128, 1)">41.73</span><span style="color: rgba(0, 0, 0, 1)">,
spatialReference:{
   wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span><span style="color: rgba(0, 0, 0, 1)">
}
};
</span><span style="color: rgba(0, 0, 255, 1)">const</span> screenPoint = mapView.toScreen(mapPoint);</pre>
</div>
<p>再将屏幕点的位置赋值给弹框的左上角点,这样弹框会跟着地图的缩放而相应的变化。</p>
<p><strong>常见的一些 WKID</strong></p>
<ul>
<li>3857:Web墨卡托投影,<span style="color: rgba(255, 0, 0, 1)">用于大多数Web地图应用程序</span>。</li>
<li>4326:WGS84地理坐标系,经纬度坐标系。</li>
<li>102100 / 102200:ArcGIS Online 底图使用的Web墨卡托投影。</li>
<li>3413 / 3031:南极和北极的极面投影。</li>
<li>27700:英国国家格网,适用于英格兰、威尔士和苏格兰。</li>
</ul>
<p>当使用墨卡拖投影时,写法与4326不一样,如下所示:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> zoom: 6,</span>
         <span style="color: rgba(255, 0, 0, 1)"> spatialReference: 3857,</span>
          })</pre>
</div>
<p>如果如下所示写在extent里面,则无法显示地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> zoom: 6,</span>
            extent: <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Extent({
            </span><span style="color: rgba(255, 0, 0, 1)"> spatialReference: {
               wkid: 3857
               },</span><span style="color: rgba(0, 0, 0, 1)">
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
            }),</span>
          })</pre>
</div>
<p>实际开发中建议用3857,因为<code>EPSG:4326</code>&nbsp;感觉map 地图被上下压缩过一样,而&nbsp;<code>EPSG:3857</code>&nbsp;坐标系就很正常。</p>
<h3>二、集成到应用----esri-loader方式</h3>
<p>1、安装esri-loader</p>
<div class="cnblogs_code">
<pre>npm i esri-loader</pre>
</div>
<p>2、创建一个div,装载我们的地图</p>
<div class="cnblogs_code">
<pre>&lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;</pre>
</div>
<p>3、引入esri-loader</p>
<div class="cnblogs_code">
<pre>import {loadModules} from "esri-loader";</pre>
</div>
<p>4、在mounted创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 传入需要使用的类</span>
      .then(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            basemap: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用在线地图服务</span>
            zoom: <span style="color: rgba(128, 0, 128, 1)">24</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">地图初始化缩放级别   只有使用在线地图服务该属性才有效</span>
<span style="color: rgba(0, 0, 0, 1)">          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//美国WGS_84</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">99.298390123</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">32.192839123</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">125.2983901923</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">50.281973892</span><span style="color: rgba(0, 0, 0, 1)">,
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标</span>
            center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
          })

      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.error(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">地图初始化失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err);
      })
}</span></pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106162931584-965731817.png" alt="" width="815" height="377" loading="lazy"></p>
<p>完整代码:</p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">home</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
    &lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import {loadModules} </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri-loader</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;

export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HomeView</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      map: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
      view: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">
    }
},
components: {
},
mounted() {
    loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 传入需要使用的类</span>
      .then(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            basemap: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用在线地图服务</span>
            <span style="color: rgba(255, 0, 0, 1)">zoom: 24</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">地图初始化缩放级别   只有使用在线地图服务该属性才有效</span>
<span style="color: rgba(0, 0, 0, 1)">          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//美国WGS_84</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">99.298390123</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">32.192839123</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">125.2983901923</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">50.281973892</span><span style="color: rgba(0, 0, 0, 1)">,
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标</span>
            center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
          })

      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.error(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">地图初始化失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err);
      })
}
}
</span>&lt;/script&gt;</pre>
</div>
<p>缩放</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            basemap: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果使用在线地图服务</span>
            <span style="color: rgba(255, 0, 0, 1)">zoom: 24,</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">地图初始化缩放级别   只有使用在线地图服务该属性才有效</span>
          });</pre>
</div>
<p id="转到中心点及缩放">转到中心点及缩放</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mapView.goTo({
center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
zoom: </span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
})</span></pre>
</div>
<p>&nbsp;</p>
<h3>三、使用本地ArcGIS server中发布的地图服务</h3>
<p>arcgis本地化部署到tomcat</p>
<p>1、下载ArcGis418_api</p>
<p>官方下载地址:ArcGIS Developers</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106171050720-1794369775.png" alt="" width="781" height="423" loading="lazy"></p>
<p>选择4.18</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106171141775-496431872.png" alt="" width="781" height="464" loading="lazy"></p>
<p>上面那个是api,下面那个是说明文档,下载后如下所示:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106171813162-1463367197.png" alt="" width="223" height="35" loading="lazy"></p>
<p>解压后如下所示:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106172007631-568202811.png" alt="" width="339" height="176" loading="lazy"></p>
<p>2、部署到tomcat</p>
<p>在arcgis_js_api文件下找到Init.js和dojo.js两个文件。搜索HOSTNAME_AND_PATH_TO_JSAPI,替换Init.js和dojo.js里的baseUrl为:baseUrl:"/ArcGis418_api/dojo"</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106172724104-157084426.png" alt="" width="777" height="94" loading="lazy"></p>
<p>修改为:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106173042255-1463297998.png" alt="" width="645" height="58" loading="lazy"></p>
<p>将4.18目录拷贝到tomcat的webapp目录下,将4.18目录改名为ArcGis418_api</p>
<p>修改tomcat端口号为9999,然后启动tomcat。</p>
<p>3、创建一个div,装载我们的地图</p>
<div class="cnblogs_code">
<pre>&lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;</pre>
</div>
<p>4、引入</p>
<div class="cnblogs_code">
<pre>import {loadModules, setDefaultOptions, loadCss} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri-loader</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
setDefaultOptions({url: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/ArcGis418_api</span><span style="color: rgba(128, 0, 0, 1)">"</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/init.js</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">});
loadCss(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/ArcGis418_api</span><span style="color: rgba(128, 0, 0, 1)">"</span> + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/esri/themes/light/main.css</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<p>5、在mounted创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    loadModules([ <span style="color: rgba(255, 0, 0, 1)">// 加载js
      </span></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/TileLayer</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 传入需要使用的类</span>
      .then(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> { <span style="color: rgba(255, 0, 0, 1)">// 注意顺序要与上面加载的js一致
          </span></span><span style="color: rgba(0, 0, 255, 1)">var</span> url =<span style="color: rgba(128, 0, 0, 1)">"底图服务器的地址</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.layer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TileLayer({
            url: url
          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            layers: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.layer <span style="color: rgba(255, 0, 0, 1)">// 添加图层</span>
          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">99.298390123</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">32.192839123</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">125.2983901923</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">50.281973892</span><span style="color: rgba(0, 0, 0, 1)">,
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标</span>
            center: [<span style="color: rgba(128, 0, 128, 1)">110.3289749234</span>, <span style="color: rgba(128, 0, 128, 1)">41.2394820934</span><span style="color: rgba(0, 0, 0, 1)">]
          })

      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.error(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">地图初始化失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err);
      })
}</span></pre>
</div>
<p>6、效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231106174908964-1411885709.png" alt="" width="833" height="383" loading="lazy"></p>
<h3>四、添加marker点及文字标注</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">drawPoint</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;打点&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">drawPoint() {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新绘制突出显示</span>
<span style="color: rgba(0, 0, 0, 1)">      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/Graphic</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/GraphicsLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      ]).then(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图片标记样式</span>
      let pictureMarkerSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
         <span style="color: rgba(255, 0, 0, 1)"> type: </span></span><span style="color: rgba(255, 0, 0, 1)">'picture-marker'</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">,</span> <span style="color: rgba(255, 0, 0, 1)">// 图片标记</span>
          url: require(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/assets/logo.png</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
          width: </span><span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">,
          height: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
          angle: </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      }
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 标注样式</span>
      let textSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
          <span style="color: rgba(255, 0, 0, 1)">type: </span></span><span style="color: rgba(255, 0, 0, 1)">"text",</span> <span style="color: rgba(255, 0, 0, 1)">// 文本标记</span>
          color: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> haloColor: "black",
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> haloSize: "1px",</span>
          text: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">武汉</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          xoffset: </span><span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">,
          yoffset: </span><span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">,
          font: { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autocasts as new Font()</span>
            size: <span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">,
            family: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sans-serif</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            weight: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">normal</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
          }
      };
      </span><span style="color: rgba(0, 0, 255, 1)">const</span> point = { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 点坐标
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Create a point</span>
          type: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          longitude: </span><span style="color: rgba(128, 0, 128, 1)">114.303877</span><span style="color: rgba(0, 0, 0, 1)">,
          latitude: </span><span style="color: rgba(128, 0, 128, 1)">30.574443</span><span style="color: rgba(0, 0, 0, 1)">,
      };
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> marker样式与点</span>
      <span style="color: rgba(0, 0, 255, 1)">const</span> pointGraphic = <span style="color: rgba(255, 0, 0, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"> Graphic({</span>
          <span style="color: rgba(255, 0, 0, 1)">geometry</span>: point,
          <span style="color: rgba(255, 0, 0, 1)">symbol</span>: pictureMarkerSymbol,
          attributes: { <span style="color: rgba(255, 0, 0, 1)">// 添加属性</span>
            name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            des: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">这是一个marker点</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          },
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 标注样式与点</span>
      <span style="color: rgba(0, 0, 255, 1)">const</span> pointGraphicText = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
          geometry: point,
          symbol: textSymbol,
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建图层并将点添加到图层</span>
      let graphicsLayer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GraphicsLayer({
          id: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">001</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          title: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">markerLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          graphics:
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将标注样式添加到图形中</span>
<span style="color: rgba(0, 0, 0, 1)">      graphicsLayer.graphics.add(pointGraphicText);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将图层添加map中</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map.layers.add(graphicsLayer); <span style="color: rgba(255, 0, 0, 1)">// 添加一个图层到图层集合</span>
      })
    }</span></pre>
</div>
<p>上面是图片标记样式,还有简单标记样式,代码如下:</p>
<div class="cnblogs_code">
<pre>let markerSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-marker</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#FFD600</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          outline: {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自动转换为新的SimpleLineSymbol()</span>
            color: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#121212</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            width: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          },
          size: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      };</span></pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231113111310020-838290707.png" alt="" width="380" height="253" loading="lazy"></p>
<p><strong>添加图形</strong></p>
<p>(1)、添加一个</p>
<div class="cnblogs_code">
<pre>mapView.graphics.add(pointGraphic)</pre>
</div>
<p>(2)、添加多个</p>
<div class="cnblogs_code">
<pre>mapView.graphics.addMany()</pre>
</div>
<p>(3)、删除</p>
<div class="cnblogs_code">
<pre>mapView.graphics.remove(pointGraphic)</pre>
</div>
<p>(4)、删除多个</p>
<div class="cnblogs_code">
<pre>mapView.graphics.removeMany()</pre>
</div>
<p>(5)、删除全部</p>
<div class="cnblogs_code">
<pre>mapView.graphics.removeAll()</pre>
</div>
<p><strong>添加和删除图层</strong></p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107113439604-237841151.png" alt="" width="756" height="488" loading="lazy"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使用数组在地图的构造函数中添加图层</span>
let fl = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FeatureLayer(url);
let gl </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GraphicsLayer();
let map </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
layers:
});

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用Add()添加图层</span>
<span style="color: rgba(0, 0, 0, 1)">map.add(fl)

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用Add()添加图层</span>
<span style="color: rgba(0, 0, 0, 1)">map.addMany();

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用图层集合添加图层</span>
<span style="color: rgba(0, 0, 0, 1)">map.layers.addMany();

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用layers集合的push方法添加图层</span>
<span style="color: rgba(0, 0, 0, 1)">map.layers.push(fl, gl);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除某个图层</span>
<span style="color: rgba(0, 0, 0, 1)">map.layers.remove(fl)

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用图层集合删除图层</span>
map.layers.removeMany();</pre>
</div>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107102834632-1748836821.png" alt="" width="837" height="383" loading="lazy"></p>
<p>获得marker点的点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">drawPoint() {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新绘制突出显示</span>
<span style="color: rgba(0, 0, 0, 1)">      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/Graphic</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/GraphicsLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      ]).then(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> marker样式</span>
      let pictureMarkerSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">picture-marker</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
          url: require(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/assets/logo.png</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
          width: </span><span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">,
          height: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
          angle: </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      }
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 标注样式</span>
      let textSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autocasts as new TextSymbol()</span>
          color: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> haloColor: "black",
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> haloSize: "1px",</span>
          text: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">武汉</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          xoffset: </span><span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">,
          yoffset: </span><span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">,
          font: { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autocasts as new Font()</span>
            size: <span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">,
            family: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sans-serif</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            weight: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">normal</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
          }
      };
      </span><span style="color: rgba(0, 0, 255, 1)">const</span> point = { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 点坐标
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Create a point</span>
          type: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          longitude: </span><span style="color: rgba(128, 0, 128, 1)">114.303877</span><span style="color: rgba(0, 0, 0, 1)">,
          latitude: </span><span style="color: rgba(128, 0, 128, 1)">30.574443</span><span style="color: rgba(0, 0, 0, 1)">,
      };
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> marker样式与点</span>
      <span style="color: rgba(0, 0, 255, 1)">const</span> pointGraphic = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
          geometry: point,
          symbol: pictureMarkerSymbol,
          attributes: {
            name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            des: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">这是一个marker点</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          },
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 标注样式与点</span>
      <span style="color: rgba(0, 0, 255, 1)">const</span> pointGraphicText = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
          geometry: point,
          symbol: textSymbol,
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建图层并将点添加到图层</span>
      let graphicsLayer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GraphicsLayer({
          id: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">001</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          title: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">markerLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          graphics:
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将标注样式添加到图层中</span>
<span style="color: rgba(0, 0, 0, 1)">      graphicsLayer.graphics.add(pointGraphicText);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将图层添加map中</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span>.map.layers.add(graphicsLayer); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加一个图层到图层集合</span>
<span style="color: rgba(255, 0, 0, 1)">

      let that = this;
      this.view.on("click", function (event) {
          that.view.hitTest(event.screenPoint).then((responses) =&gt; {
            if (responses.results.length &gt; 0) {
            // marker graphic的attributes
            const data = responses.results.graphic.attributes;
            console.log("markerData"</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">, data);
            }
          });
      });</span>
      })
    },</span></pre>
</div>
<p>点击图标,效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107114017609-447464072.png" alt="" width="830" height="388" loading="lazy"></p>
<h3>五、多段线</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">handleClick</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;画线&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">handleClick() {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新绘制突出显示</span>
<span style="color: rgba(0, 0, 0, 1)">      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/Graphic</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
      ]).then(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      let paths </span>=<span style="color: rgba(0, 0, 0, 1)"> []
      paths.push([</span><span style="color: rgba(128, 0, 128, 1)">114.299975</span>, <span style="color: rgba(128, 0, 128, 1)">30.567826</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">经纬度</span>
      paths.push([<span style="color: rgba(128, 0, 128, 1)">116.400306</span>, <span style="color: rgba(128, 0, 128, 1)">39.910481</span><span style="color: rgba(0, 0, 0, 1)">])
      paths.push([</span><span style="color: rgba(128, 0, 128, 1)">121.487427</span>, <span style="color: rgba(128, 0, 128, 1)">31.229783</span><span style="color: rgba(0, 0, 0, 1)">])
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加线</span>
      let polyline =<span style="color: rgba(0, 0, 0, 1)"> {
          <span style="color: rgba(255, 0, 0, 1)">type: </span></span><span style="color: rgba(255, 0, 0, 1)">"polyline"</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">, // 多段线</span>
          paths: paths,
      };

      let color </span>= [<span style="color: rgba(128, 0, 128, 1)">48</span>, <span style="color: rgba(128, 0, 128, 1)">242</span>, <span style="color: rgba(128, 0, 128, 1)">120</span>, <span style="color: rgba(128, 0, 128, 1)">0.5</span>]<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">颜色</span>
      <span style="color: rgba(0, 0, 255, 1)">const</span> width = <span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">;
      let polylineSymbol </span>=<span style="color: rgba(0, 0, 0, 1)"> { <span style="color: rgba(255, 0, 0, 1)">// 多段线的样式</span>
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">实线,不设置也默认这个</span>
<span style="color: rgba(0, 0, 0, 1)">          width: width,
          color: color
      }
      let polylineGraphic </span>= <span style="color: rgba(255, 0, 0, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"> Graphic({</span>
          <span style="color: rgba(255, 0, 0, 1)">geometry</span>: polyline,
          <span style="color: rgba(255, 0, 0, 1)">symbol</span>: polylineSymbol,
      });
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.graphics.add(polylineGraphic);
      })

    }</span></pre>
</div>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107095224571-1824475222.png" alt="" width="796" height="386" loading="lazy"></p>
<p>画虚线dash</p>
<div class="cnblogs_code">
<pre>let polylineSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dash</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">实线,不设置也默认这个</span>
<span style="color: rgba(0, 0, 0, 1)">          width: width,
          color: color
      }</span></pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231113143834036-1265424939.png" alt="" width="796" height="457" loading="lazy"></p>
<p>画一条白色的虚线和一条黑色的实线来实现铁路线的效果:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> width = <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">;
      let polylineSymbol </span>=<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">实线,不设置也默认这个</span>
          width: width+<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
          color: [</span><span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>],<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 黑色</span>
          join: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">round</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          miterLimit: </span><span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">
      }
      let polylineSymbol1 </span>=<span style="color: rgba(0, 0, 0, 1)"> {
          type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dash</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">虚线,不设置也默认这个</span>
<span style="color: rgba(0, 0, 0, 1)">          width: width,
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">white</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          join: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">round</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          miterLimit: </span><span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">
      }
      let polylineGraphic </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
          geometry: polyline,
          symbol: polylineSymbol,
      });
      let polylineGraphic1 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
          geometry: polyline,
          symbol: polylineSymbol1,
      });
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.graphics.add(polylineGraphic);
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view.graphics.add(polylineGraphic1);</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231113150044708-1723214954.png" alt="" width="800" height="396" loading="lazy"></p>
<p id="更新-geometry">更新 geometry</p>
<div class="cnblogs_code">
<pre>polylineGraphic.geometry =<span style="color: rgba(0, 0, 0, 1)"> {
type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polyline</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
paths: [
    [</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第1个 path</span>
      [-<span style="color: rgba(128, 0, 128, 1)">97.06138</span>,<span style="color: rgba(128, 0, 128, 1)">32.837</span>,<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">],
      [</span>-<span style="color: rgba(128, 0, 128, 1)">97.06133</span>,<span style="color: rgba(128, 0, 128, 1)">32.836</span>,<span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">],
      [</span>-<span style="color: rgba(128, 0, 128, 1)">97.06124</span>,<span style="color: rgba(128, 0, 128, 1)">32.834</span>,<span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">]
    ], [</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第2个 path</span>
      [-<span style="color: rgba(128, 0, 128, 1)">97.06326</span>,<span style="color: rgba(128, 0, 128, 1)">32.759</span><span style="color: rgba(0, 0, 0, 1)">],
      [</span>-<span style="color: rgba(128, 0, 128, 1)">97.06298</span>,<span style="color: rgba(128, 0, 128, 1)">32.755</span><span style="color: rgba(0, 0, 0, 1)">]
    ]
]
}</span></pre>
</div>
<p id="更新-symbol">更新 symbol</p>
<div class="cnblogs_code">
<pre>polylineGraphic.symbol =<span style="color: rgba(0, 0, 0, 1)"> {
type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
color: [</span><span style="color: rgba(128, 0, 128, 1)">226</span>, <span style="color: rgba(128, 0, 128, 1)">119</span>, <span style="color: rgba(128, 0, 128, 1)">40</span><span style="color: rgba(0, 0, 0, 1)">],
width: </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p>&nbsp;</p>
<h3>六、测距</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">measurePolyline</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;测距&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">measurePolyline() {
      let _this </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/2d/draw/Draw</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/geometryEngine</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Polyline</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/GraphicsLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Graphic</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dojo/domReady!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      ]).then(
          () </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            let lineLayer </span>= _this.map.findLayerById(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lineLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">lineLayer) {
            lineLayer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> GraphicsLayer({ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建线图层</span>
                id: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lineLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            });
            }
            _this.map.layers.add(lineLayer);
            let draw </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Draw({
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在view里创建draw</span>
<span style="color: rgba(0, 0, 0, 1)">            view: _this.view,
            });
            let action </span>= draw.create(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polyline</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建画线实例</span>
<span style="color: rgba(0, 0, 0, 1)">            _this.view.focus();
            action.on(
                [
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vertex-add</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, <span style="color: rgba(255, 0, 0, 1)">// 顶点添加事件
                  </span></span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vertex-remove</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, <span style="color: rgba(255, 0, 0, 1)">// 顶点移除事件
                  </span></span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cursor-update</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, <span style="color: rgba(255, 0, 0, 1)">// 鼠标移动事件
                  </span></span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">redo</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">undo</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">draw-complete</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, <span style="color: rgba(255, 0, 0, 1)">// 鼠标双击绘制完成事件</span>
                ],
                createPolyline
            );

            function createPolyline(</span><span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> vertices = <span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">.vertices;
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> symbol =<span style="color: rgba(0, 0, 0, 1)"> {
                type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-marker</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                color: [</span><span style="color: rgba(128, 0, 128, 1)">255</span>, <span style="color: rgba(128, 0, 128, 1)">255</span>, <span style="color: rgba(128, 0, 128, 1)">255</span><span style="color: rgba(0, 0, 0, 1)">],
                size: </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">,
                outline: {
                  color: [</span><span style="color: rgba(128, 0, 128, 1)">255</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">],
                  width: </span><span style="color: rgba(128, 0, 128, 1)">1.5</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> points</span>
<span style="color: rgba(0, 0, 0, 1)">                },
            };

            lineLayer.removeAll();
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> graphics = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                geometry: </span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Polyline({
                  paths: vertices,
                  spatialReference: _this.view.spatialReference,
                }),

                symbol: {
                  type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-line</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autocasts as new SimpleFillSymbol</span>
                  color: [<span style="color: rgba(128, 0, 128, 1)">255</span>, <span style="color: rgba(128, 0, 128, 1)">116</span>, <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">],
                  width: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
                  cap: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">round</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  join: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">round</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                },
            });

            lineLayer.add(graphics);

            </span><span style="color: rgba(0, 0, 255, 1)">var</span> firstTextSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
                type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">blue</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                haloColor: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">black</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                haloSize: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                text: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0.00千米</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                xoffset: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                yoffset: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                font: {
                  size: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
                  family: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sans-serif</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  weight: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bold</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                },
            };

            </span><span style="color: rgba(0, 0, 255, 1)">var</span> firstPoint =<span style="color: rgba(0, 0, 0, 1)"> {
                type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                x: vertices[</span><span style="color: rgba(128, 0, 128, 1)">0</span>][<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">],
                y: vertices[</span><span style="color: rgba(128, 0, 128, 1)">0</span>][<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">],
                spatialReference: _this.view.spatialReference, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">和底图相同的坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            };
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> firstTextGraphics = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                geometry: firstPoint,
                symbol: firstTextSymbol,
            });
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> firstGraphics = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                geometry: firstPoint,
                symbol: symbol,
            });

            lineLayer.addMany();

            let linePath </span>= []; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">线段坐标集合</span>
            let pointStart = []; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">起点</span>
            pointStart.push(vertices[<span style="color: rgba(128, 0, 128, 1)">0</span>][<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]);
            pointStart.push(vertices[</span><span style="color: rgba(128, 0, 128, 1)">0</span>][<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]);
            linePath.push(pointStart);

            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (let i = <span style="color: rgba(128, 0, 128, 1)">1</span>; i &lt; vertices.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> point =<span style="color: rgba(0, 0, 0, 1)"> {
                  type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  x: vertices[</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">],
                  y: vertices[</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">],
                  spatialReference: _this.view.spatialReference, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">和底图相同的坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">                };

                let xy </span>= []; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">鼠标当前经纬度</span>
                xy.push(vertices[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]);
                xy.push(vertices[</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]);
                linePath.push(xy);

                </span><span style="color: rgba(0, 0, 255, 1)">var</span> line = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Polyline({
                  hasZ: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                  hasM: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  paths: linePath,
                  spatialReference: _this.view.spatialReference,
                });

                let length </span>= GeometryEngine.geodesicLength(line, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">meters</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                let lengthText </span>= lengthFormat(length); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">单位转换</span>
                <span style="color: rgba(0, 0, 255, 1)">var</span> textSymbol =<span style="color: rgba(0, 0, 0, 1)"> {
                  type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">blue</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  haloColor: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">black</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  haloSize: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  text: lengthText,
                  xoffset: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">20px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  yoffset: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">20px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  font: {
                  size: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
                  family: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sans-serif</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  weight: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bold</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  },
                };

                </span><span style="color: rgba(0, 0, 255, 1)">var</span> textGraphics = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                  geometry: point,
                  symbol: textSymbol,
                });

                </span><span style="color: rgba(0, 0, 255, 1)">var</span> Graphics = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                  geometry: point,
                  symbol: symbol,
                });
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将标注和鼠标位置添加到地图</span>
<span style="color: rgba(0, 0, 0, 1)">                lineLayer.addMany();
            }

            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">长度单位转换</span>
<span style="color: rgba(0, 0, 0, 1)">            function lengthFormat(length) {
                let lengthText;
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (length &lt; <span style="color: rgba(128, 0, 128, 1)">2000</span><span style="color: rgba(0, 0, 0, 1)">) {
                  length </span>= length.toFixed(<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
                  </span><span style="color: rgba(0, 0, 255, 1)">return</span> (lengthText = length + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">米</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                  length </span>= (length / <span style="color: rgba(128, 0, 128, 1)">1000</span>).toFixed(<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
                  </span><span style="color: rgba(0, 0, 255, 1)">return</span> (lengthText = length + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">千米</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                }
            }
            }
          }
      );
    }</span></pre>
</div>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107103944070-813234371.png" alt="" width="803" height="355" loading="lazy"></p>
<p>点击测距后,在地图上点击就可以测量两点之间的距离,要想结束测距则双击。</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107104140329-1221883898.png" alt="" width="804" height="333" loading="lazy"></p>
<p>&nbsp;</p>
<h3>七、多边形</h3>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">about</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
    &lt;div id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;height: 80vh</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/assets/esri/themes/light/main.css</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import Map </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/Map.js</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import MapView </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/views/MapView.js</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
import Graphic </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/Graphic</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dark-gray</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> polygonGraphic = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
      geometry: {
      <span style="color: rgba(255, 0, 0, 1)">type: </span></span><span style="color: rgba(255, 0, 0, 1)">"polygon"</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">, // 多边形</span>
      rings: [
          [
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">84.311909</span>,<span style="color: rgba(128, 0, 128, 1)">41.062564</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">82.214617</span>,<span style="color: rgba(128, 0, 128, 1)">38.363399</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">]
          ]
      ]
      },
      symbol: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-fill</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: [</span><span style="color: rgba(128, 0, 128, 1)">227</span>, <span style="color: rgba(128, 0, 128, 1)">139</span>, <span style="color: rgba(128, 0, 128, 1)">79</span>, <span style="color: rgba(128, 0, 128, 1)">0.8</span><span style="color: rgba(0, 0, 0, 1)">],
      style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      outline: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          width: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
      }
      }
    })

    mapView.graphics.add(polygonGraphic)
}
}
</span>&lt;/script&gt;</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107163351646-1298329645.png" alt="" width="808" height="369" loading="lazy"></p>
<p>测量多边形面积</p>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">measurePolygon</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;侧面积&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">measurePolygon() {
      let _this </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Color</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/symbols/SimpleLineSymbol</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/TileLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/draw/Draw</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/geometryEngine</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Polyline</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/GraphicsLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Graphic</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dojo/domReady!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      ]).then(
          ([
             Map,
             Color,
             SimpleLineSymbol,
             MapView,
             TileLayer,
             Draw,
             GeometryEngine,
             Point,
             Polyline,
             Polygon,
             GraphicsLayer,
             Graphic,
         ]) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            let polygonLayer </span>= _this.map.findLayerById(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygonLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">绘制面图层</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">polygonLayer) {
            polygonLayer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GraphicsLayer({
                id: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygonLayer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            }); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">绘制线图层</span>
<span style="color: rgba(0, 0, 0, 1)">            }

            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">画面按钮事件</span>
            let draw = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Draw({
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在view里创建draw</span>
<span style="color: rgba(0, 0, 0, 1)">            view: _this.view,
            });
            let action </span>= draw.create(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建画线实例</span>
<span style="color: rgba(0, 0, 0, 1)">            _this.view.focus();
            action.on(
                [
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vertex-add</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> when a vertex is added鼠标单击</span>
                  <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vertex-remove</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> when a vertex is removed 移除</span>
                  <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cursor-update</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> when the pointer moves 鼠标移动</span>
                  <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">draw-complete</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> when the drawing is completed 鼠标双击</span>
<span style="color: rgba(0, 0, 0, 1)">                ],
                function (evt) {
                  createPolygon(evt.vertices);
                }
            );
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> };

            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">画面和测量面积</span>
<span style="color: rgba(0, 0, 0, 1)">            function createPolygon(vertices) {
            polygonLayer.removeAll();
            let symbol </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">点样式</span>
                type: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-marker</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                color: [</span><span style="color: rgba(128, 0, 128, 1)">47</span>, <span style="color: rgba(128, 0, 128, 1)">79</span>, <span style="color: rgba(128, 0, 128, 1)">79</span><span style="color: rgba(0, 0, 0, 1)">],
                width: </span><span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">,
                size: </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">,
                outline: {
                  color: [</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">],
                  width: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
                },
            };
            <span style="color: rgba(255, 0, 0, 1)">let fillSymbol </span></span><span style="color: rgba(255, 0, 0, 1)">= {
                //面样式
                type: "simple-fill", // autocasts as new SimpleFillSymbol()
                color: ,
                outline: {
                  // autocasts as new SimpleLineSymbol()
                  color: ,
                  width: 2</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">,
                },
            };</span>

            let polygon </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Polygon({
                rings: vertices,
                spatialReference: _this.view.spatialReference,
            });

            let polygonGraphics </span>= <span style="color: rgba(255, 0, 0, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"> Graphic({</span>
                <span style="color: rgba(255, 0, 0, 1)">geometry</span>: polygon,
                <span style="color: rgba(255, 0, 0, 1)">symbol</span>: fillSymbol,
            });
            polygonLayer.add(polygonGraphics);
            let area </span>= GeometryEngine.geodesicArea(polygon, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">square-meters</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            let areaText </span>=<span style="color: rgba(0, 0, 0, 1)"> areaFormat(area);
            let center </span>=<span style="color: rgba(0, 0, 0, 1)"> polygon.centroid;
            let pointCenter </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                longitude: center.longitude,
                latitude: center.latitude,
            };
            let textSymbol </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">面积标注</span>
                type: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">white</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                haloColor: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">black</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                haloSize: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2px</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                text: areaText,
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">xoffset: '50px',
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">yoffset: '-5px',</span>
<span style="color: rgba(0, 0, 0, 1)">                font: {
                  size: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
                  family: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sans-serif</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  weight: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bold</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                },
            };
            let textGraphics </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">标注为面中心位置</span>
<span style="color: rgba(0, 0, 0, 1)">                geometry: pointCenter,
                symbol: textSymbol,
            });
            polygonLayer.add(textGraphics);

            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (let i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i &lt; vertices.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
                let point </span>=<span style="color: rgba(0, 0, 0, 1)"> {
                  type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">point</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  x: vertices[</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">],
                  y: vertices[</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">],
                  spatialReference: _this.view.spatialReference,
                };

                let pointGraphics </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
                  geometry: point,
                  symbol: symbol,
                });
                polygonLayer.add(pointGraphics);
            }
            _this.map.layers.add(polygonLayer);
            }

            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">面积单位转换</span>
<span style="color: rgba(0, 0, 0, 1)">            function areaFormat(area) {
            let areaText;
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (area &lt; <span style="color: rgba(128, 0, 128, 1)">2000</span><span style="color: rgba(0, 0, 0, 1)">) {
                area </span>= area.toFixed(<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
                </span><span style="color: rgba(0, 0, 255, 1)">return</span> (areaText = area + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">平方米</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                area </span>= (area / <span style="color: rgba(128, 0, 128, 1)">10000</span>).toFixed(<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
                </span><span style="color: rgba(0, 0, 255, 1)">return</span> (areaText = area + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">平方千米</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            }
            }
          }
      );
    },</span></pre>
</div>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107104624301-1441714211.png" alt="" width="798" height="353" loading="lazy"></p>
<p>&nbsp;</p>
<h3>八、缩放</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoomOut</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;放大&lt;/el-button&gt;
&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoomIn</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;缩小&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">zoomOut() {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view.zoom++<span style="color: rgba(0, 0, 0, 1)">;
    },
    zoomIn() {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view.zoom--<span style="color: rgba(0, 0, 0, 1)">;
    },</span></pre>
</div>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107105209696-398345765.png" alt="" width="816" height="360" loading="lazy"></p>
<p>&nbsp;</p>
<h3>九、拖拽</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">drag</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;拖拽&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">drag(){
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.dragFlag=!<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.dragFlag;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听拖拽</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span>.view.on(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">drag</span><span style="color: rgba(128, 0, 0, 1)">"</span>, function (<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">that.dragFlag) {
          </span><span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">.stopPropagation();
      }
      });
    }</span></pre>
</div>
<p>设置初始值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 初始化属性</span>
<span style="color: rgba(0, 0, 0, 1)">data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      dragFlag: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      }
    }</span></pre>
</div>
<p>效果</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107105922076-843736211.png" alt="" width="808" height="356" loading="lazy"></p>
<p>点击拖拽按钮可以进行切换</p>
<p>&nbsp;</p>
<h3>十、复位</h3>
<p>1、添加按钮的点击事件</p>
<div class="cnblogs_code">
<pre>&lt;el-button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">resetSite</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;复位&lt;/el-button&gt;</pre>
</div>
<p>2、编写点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 复位</span>
<span style="color: rgba(0, 0, 0, 1)">    resetSite() {
      let _this </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Extent</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/SpatialReference</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dojo/domReady!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      ]).then(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> ext = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Extent({
          spatialReference: </span><span style="color: rgba(0, 0, 255, 1)">new</span> SpatialReference({ wkid: <span style="color: rgba(128, 0, 128, 1)">4326</span><span style="color: rgba(0, 0, 0, 1)"> }),
          xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
          ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
          xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
          ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标</span>
      _this.view.center = [<span style="color: rgba(128, 0, 128, 1)">114.308786</span>, <span style="color: rgba(128, 0, 128, 1)">30.593342</span><span style="color: rgba(0, 0, 0, 1)">]
      _this.view.extent </span>=<span style="color: rgba(0, 0, 0, 1)"> ext;
      });
    },</span></pre>
</div>
<p>3、mounted中创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/TileLayer</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Extent</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 传入需要使用的类</span>
      .then(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">var</span> url =<span style="color: rgba(128, 0, 0, 1)">"本地的底图服务器地址</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.layer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TileLayer({
            url: url
          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            layers: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.layer
          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> zoom: 6,</span>
            extent: <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Extent({
            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
            }),
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> center: </span>
<span style="color: rgba(0, 0, 0, 1)">          })

          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> this.view.map.ground.surfaceColor = "#FFB6C1";</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除放大缩小按钮</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribution</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除底部powered by ESRI</span>
<span style="color: rgba(0, 0, 0, 1)">      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.error(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">地图初始化失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err);
      })</span></pre>
</div>
<p>注意:当你在Extent中设置了xmin、ymin、xmax、ymax后,还设置center的话,mounted中创建的地图时,center会有限覆盖xmin、ymin、xmax、ymax的配置。</p>
<p>效果:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107112801534-918248992.png" alt="" width="824" height="401" loading="lazy"></p>
<p>当你放大如下所示:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107112833726-1387450331.png" alt="" width="821" height="403" loading="lazy"></p>
<p>点击复位按钮,效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107112905931-1464547255.png" alt="" width="818" height="399" loading="lazy"></p>
<h3>十一、弹层Popup</h3>
<p>右键点击地图任何地方弹出弹层</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    loadModules([
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">esri/layers/TileLayer</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/Map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/views/MapView</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">esri/geometry/Extent</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 传入需要使用的类</span>
      .then(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">var</span> url =<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">本地地图服务器地址</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.layer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TileLayer({
            url: url
          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
            layers: </span><span style="color: rgba(0, 0, 255, 1)">this</span>.layer <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加图层</span>
<span style="color: rgba(0, 0, 0, 1)">          });
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.view = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
            container: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            map: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.map,
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> zoom: 6,</span>
            extent: <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Extent({
            spatialReference: {
                wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">美国WGS_84坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">            },
            xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
            ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
            xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
            ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
            }),
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">中心坐标
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> center: </span>
<span style="color: rgba(0, 0, 0, 1)">          })

          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> this.view.map.ground.surfaceColor = "#FFB6C1";</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除放大缩小按钮</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.ui.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">attribution</span><span style="color: rgba(128, 0, 0, 1)">"</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除底部powered by ESRI</span>

          <span style="color: rgba(255, 0, 0, 1)">this.view.on('click', (result) =&gt; { // 单击事件
            const {
            longitude,
            latitude
            } = result.mapPoint
            this.view.popup.open({
            title: '标题',
            content: `&lt;p&gt;这是一段内容,经度:`+longitude+`纬度:`+latitude+`&lt;/p&gt;`,
            location: result.mapPoint // 或
</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">            })
          })</span>
      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.error(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">地图初始化失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err);
      })
},</span></pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107162307179-1307848691.png" alt="" width="817" height="376" loading="lazy"></p>
<p>控制左键单击和右键单击显示不同的效果:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置view.popup.autoOpenEnabled = false;后,鼠标的三个键都可以触发点击事件,没有任何设置,只有滚轮和右键会触发点击事件。</span>
          <span style="color: rgba(255, 0, 0, 1)">this.view.popup.autoOpenEnabled = false;</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autoOpenEnabled:Popup指示需要允许或禁止单击事件传播</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.on(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span>, (result) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">右键</span>
            <span style="color: rgba(255, 0, 0, 1)">if (result.button == 2) {
            </span><span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
                longitude,
                latitude
            } </span>=<span style="color: rgba(0, 0, 0, 1)"> result.mapPoint
            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.popup.open({
                title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                content: `</span>&lt;p&gt;这是右键单击弹出的一段内容,经度:`+longitude+`纬度:`+latitude+`&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
                location: result.mapPoint </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或 </span>
<span style="color: rgba(0, 0, 0, 1)">            })
            }
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">左键</span>
            <span style="color: rgba(255, 0, 0, 1)">if (result.button == 0) {
            </span><span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
                longitude,
                latitude
            } </span>=<span style="color: rgba(0, 0, 0, 1)"> result.mapPoint

            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.popup.open({
                title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                content: `</span>&lt;p&gt;这是左键单击弹出的一段内容,经度:`+longitude+`纬度:`+latitude+`&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
                location: result.mapPoint </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或 </span>
<span style="color: rgba(0, 0, 0, 1)">            })
            }
          })</span></pre>
</div>
<p>注意:需要设置this.view.popup.autoOpenEnabled = false;,否则左键点击地图没有反应。效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231108180923676-1108268002.png" alt="" width="780" height="464" loading="lazy"></p>
<p>点击事件的属性:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231108181212053-2099247775.png" alt="" width="509" height="509" loading="lazy"></p>
<p><strong>覆盖物弹层</strong>:点击了多边形才会弹框</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dark-gray</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> polygonGraphic = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
      geometry: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      rings: [
          [
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">84.311909</span>,<span style="color: rgba(128, 0, 128, 1)">41.062564</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">82.214617</span>,<span style="color: rgba(128, 0, 128, 1)">38.363399</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">]
          ]
      ]
      },
      symbol: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-fill</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: [</span><span style="color: rgba(128, 0, 128, 1)">227</span>, <span style="color: rgba(128, 0, 128, 1)">139</span>, <span style="color: rgba(128, 0, 128, 1)">79</span>, <span style="color: rgba(128, 0, 128, 1)">0.8</span><span style="color: rgba(0, 0, 0, 1)">],
      style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      outline: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          width: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
      }
      },
      attributes: {
      id: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">polygon_1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
      }
    })

    mapView.graphics.add(polygonGraphic)</span>
<span style="color: rgba(0, 0, 0, 1)">
    mapView.on(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span>, (e) =&gt;<span style="color: rgba(0, 0, 0, 1)"> { <span style="color: rgba(255, 0, 0, 1)">// 单击事件</span>
      mapView.hitTest(e).then((e2) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      e2.results.forEach(e3 </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          let attrs </span>=<span style="color: rgba(0, 0, 0, 1)"> e3.graphic.attributes
          </span><span style="color: rgba(0, 0, 255, 1)">if</span>(attrs.id === <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">polygon_1</span><span style="color: rgba(128, 0, 0, 1)">'</span>) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 判断是否点击了多边形图层</span>
<span style="color: rgba(0, 0, 0, 1)">            mapView.popup.open({
            title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
            content: `</span>&lt;p&gt;这是点击多边形才弹出的一段内容&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
            location: e.mapPoint
            })
          }
      })
      })
    })
}</span></pre>
</div>
<p id="点击检测-hittest">点击检测 hitTest</p>
<p>返回与指定屏幕坐标相交的每个图层的 Hit Test 结果,结果以包含不同结果类型的数组组织。</p>
<p>以下图层类型将在检测到相交时返回所有特性:<code>FeatureLayer</code>、<code>CSVLayer</code>、<code>GeoJSONLayer</code>、<code>GeoRSSLayer</code>、<code>GraphicsLayer</code>、<code>KMLLayer</code>、<code>MapNotesLayer</code>、<code>OGCFeatureLayer</code>、<code>StreamLayer</code>&nbsp;和&nbsp;<code>WFSLayer</code>。</p>
<p><code>VectorTileLayer</code>&nbsp;的 Hit Test 结果包含一个具有属性的图形,指示与屏幕点相交的矢量 tile 风格的图层 ID 和名称。对于实际特征的详细属性和空间信息,返回的结果中并没有提供。</p>
<p><code>MediaLayer</code>&nbsp;的 Hit Test 结果如果检测到相交的元素,则包含所有媒体元素。<code>RouteLayer</code>&nbsp;的 Hit Test 结果如果检测到相交的元素,则包含所有路径元素。</p>
<p>常用于捕获覆盖物,精确点击对象。</p>
<div class="cnblogs_code">
<pre>mapView.on(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span>, (e) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
mapView.hitTest(e).then((e2) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
<span style="color: rgba(0, 0, 0, 1)">})
})</span></pre>
</div>
<p>效果如下</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107163158016-1948275739.png" alt="" width="791" height="362" loading="lazy"></p>
<p>内置弹层:将弹层代码内置到多边形代码内</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> polygonGraphic = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
      geometry: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      rings: [
          [
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">84.311909</span>,<span style="color: rgba(128, 0, 128, 1)">41.062564</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">82.214617</span>,<span style="color: rgba(128, 0, 128, 1)">38.363399</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">]
          ]
      ]
      },
      symbol: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-fill</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: [</span><span style="color: rgba(128, 0, 128, 1)">227</span>, <span style="color: rgba(128, 0, 128, 1)">139</span>, <span style="color: rgba(128, 0, 128, 1)">79</span>, <span style="color: rgba(128, 0, 128, 1)">0.8</span><span style="color: rgba(0, 0, 0, 1)">],
      style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      outline: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          width: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
      }
      },
<span style="color: rgba(255, 0, 0, 1)">   popupTemplate: {
      title: </span></span><span style="color: rgba(255, 0, 0, 1)">'标题',
      content: `&lt;p&gt;这是内置弹层中弹出的一段内容&lt;/p&gt;`,
      overwriteActions: true // 覆盖现有的弹出操作
      }</span>
<span style="color: rgba(0, 0, 0, 1)">    })

    mapView.graphics.add(polygonGraphic)</span>
}</pre>
</div>
<p>鼠标左键点击,效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107163736993-1579531050.png" alt="" width="826" height="380" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong>隐藏<span style="color: rgba(255, 0, 0, 1)">停靠控制按钮</span></strong></p>
<p><span style="color: rgba(0, 0, 0, 1)">停靠控制按钮如下:</span></p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107164303094-1782646551.png" alt="" loading="lazy"></p>
<p>代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> polygonGraphic = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Graphic({
      geometry: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">polygon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      rings: [
          [
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">84.311909</span>,<span style="color: rgba(128, 0, 128, 1)">41.062564</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">82.214617</span>,<span style="color: rgba(128, 0, 128, 1)">38.363399</span><span style="color: rgba(0, 0, 0, 1)">],
            [</span><span style="color: rgba(128, 0, 128, 1)">81.99385</span>,<span style="color: rgba(128, 0, 128, 1)">41.423614</span><span style="color: rgba(0, 0, 0, 1)">]
          ]
      ]
      },
      symbol: {
      type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simple-fill</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: [</span><span style="color: rgba(128, 0, 128, 1)">227</span>, <span style="color: rgba(128, 0, 128, 1)">139</span>, <span style="color: rgba(128, 0, 128, 1)">79</span>, <span style="color: rgba(128, 0, 128, 1)">0.8</span><span style="color: rgba(0, 0, 0, 1)">],
      style: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">solid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      outline: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          width: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
      }
      },
      popupTemplate: {
      title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      content: `</span>&lt;p&gt;这是内置弹层中弹出的一段内容&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
      overwriteActions: </span><span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 覆盖现有的弹出操作</span>
<span style="color: rgba(0, 0, 0, 1)">      }
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> attributes: {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   id: 'polygon_1'
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> }</span>
<span style="color: rgba(0, 0, 0, 1)">    })
    <span style="color: rgba(255, 0, 0, 1)">mapView.popup.dockOptions </span></span><span style="color: rgba(255, 0, 0, 1)">= {
      buttonEnabled: false</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">,
    }</span>
    mapView.graphics.add(polygonGraphic)</span>
}</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107164207292-144912738.png" alt="" width="810" height="370" loading="lazy"></p>
<p>&nbsp;</p>
<h3>十二、地图控件 - Widget</h3>
<p>1、指南针</p>
<p>(1)、引入</p>
<div class="cnblogs_code">
<pre>import Compass <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/widgets/Compass</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>(2)、mounted中创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })
    </span><span style="color: rgba(255, 0, 0, 1)">const compass = new Compass({
      view: mapView,
    })
    mapView.ui.add(compass, {
      position: "top-right"
    })</span>
}</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107165341158-503218858.png" alt="" width="811" height="371" loading="lazy"></p>
<p>&nbsp;</p>
<p>2、打印</p>
<p>(1)、引入</p>
<div class="cnblogs_code">
<pre>import Print <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@arcgis/core/widgets/Print.js</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>(2)、mounted中创建地图</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Map({
      basemap: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">streets-vector</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
    })

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> mapView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MapView({
      map,
      container: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      center: [</span><span style="color: rgba(128, 0, 128, 1)">102.92934063304513</span>, <span style="color: rgba(128, 0, 128, 1)">25.102234987110343</span><span style="color: rgba(0, 0, 0, 1)">],
      extent: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化范围</span>
<span style="color: rgba(0, 0, 0, 1)">      spatialReference: {
          wkid: </span><span style="color: rgba(128, 0, 128, 1)">4326</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">坐标系</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      xmin: </span><span style="color: rgba(128, 0, 128, 1)">73.481382</span><span style="color: rgba(0, 0, 0, 1)">,
      ymin: </span><span style="color: rgba(128, 0, 128, 1)">18.173515</span><span style="color: rgba(0, 0, 0, 1)">,
      xmax: </span><span style="color: rgba(128, 0, 128, 1)">122.18916</span><span style="color: rgba(0, 0, 0, 1)">,
      ymax: </span><span style="color: rgba(128, 0, 128, 1)">53.521718</span><span style="color: rgba(0, 0, 0, 1)">,
      },
    })
    </span><span style="color: rgba(255, 0, 0, 1)">const print = new Print({
      view: mapView,
      printServiceUrl:
          "https://utility.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task",
    })
    mapView.ui.add(print, {
      position: "top-right",
    })</span>
}</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107170036325-1169612022.png" alt="" width="813" height="372" loading="lazy"></p>
<p>文件格式如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107170231735-921913176.png" alt="" width="336" height="253" loading="lazy"></p>
<p>导出JPG效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107170528374-930414911.png" alt="" width="657" height="559" loading="lazy"></p>
<p>&nbsp;</p>
<p>3、缩放</p>
<p>缩放是默认地图UI控件,初始化 MapView 即存在,</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107170802368-1603772025.png" alt="" width="805" height="369" loading="lazy"></p>
<p>不过也可以修改其显示位置。</p>
<div class="cnblogs_code">
<pre>mapView.ui.move(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zoom</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">top-right</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/2138872/202311/2138872-20231107171152788-589663416.png" alt="" width="817" height="373" loading="lazy"></p>
<h3>十三、事件 - Event</h3>
<p>1、单击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置view.popup.autoOpenEnabled = false;后,鼠标的三个键都可以触发点击事件,没有任何设置,只有滚轮和右键会触发点击事件。</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.popup.autoOpenEnabled = <span style="color: rgba(0, 0, 255, 1)">false</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> autoOpenEnabled:Popup指示需要允许或禁止单击事件传播</span>
          <span style="color: rgba(0, 0, 255, 1)">this</span>.view.on(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span>, (result) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">右键</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (result.button == <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
                longitude,
                latitude
            } </span>=<span style="color: rgba(0, 0, 0, 1)"> result.mapPoint
            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.popup.open({
                title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                content: `</span>&lt;p&gt;这是右键单击弹出的一段内容,经度:`+longitude+`纬度:`+latitude+`&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
                location: result.mapPoint </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或 </span>
<span style="color: rgba(0, 0, 0, 1)">            })
            }
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">左键</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (result.button == <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
                longitude,
                latitude
            } </span>=<span style="color: rgba(0, 0, 0, 1)"> result.mapPoint

            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.view.popup.open({
                title: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">标题</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                content: `</span>&lt;p&gt;这是左键单击弹出的一段内容,经度:`+longitude+`纬度:`+latitude+`&lt;/p&gt;<span style="color: rgba(0, 0, 0, 1)">`,
                location: result.mapPoint </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或 </span>
<span style="color: rgba(0, 0, 0, 1)">            })
            }
          })</span></pre>
</div>
<p>2、鼠标移动事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view.on(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pointer-move</span><span style="color: rgba(128, 0, 0, 1)">"</span>, function (<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">) {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> event.x和event.y为鼠标的坐标,通过下面的代码给mark-move类的标签设置样式,即跟着鼠标移动</span><span style="color: rgba(0, 0, 0, 1)">
            $(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.mark-move</span><span style="color: rgba(128, 0, 0, 1)">"</span>).css({left: (<span style="color: rgba(0, 0, 255, 1)">event</span>.x - <span style="color: rgba(128, 0, 128, 1)">5</span>), top: (<span style="color: rgba(0, 0, 255, 1)">event</span>.y - <span style="color: rgba(128, 0, 128, 1)">5</span>), display: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">});
          })</span></pre>
</div>
<p>鼠标移动,就让mark-move类的块级标签跟着cursor光标走。</p>
<p>3、鼠标离开事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.view.on(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pointer-leave</span><span style="color: rgba(128, 0, 0, 1)">"</span>, function (<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">) {
            $(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.mark-move</span><span style="color: rgba(128, 0, 0, 1)">"</span>).css({display: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">none</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">});
          });</span></pre>
</div>
<p>光标离开地图,样式就消失。</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/zwh0910/p/17812669.html
頁: [1]
查看完整版本: ArcGIS API for JavaScript入门