ArcGIS API for JavaScript

一、基础使用

1、安装

点击查看文档

npm install @arcgis/core yarn install @arcgis/core pnpm install @arcgis/core

2、引入

CSS: 点击查看文档

import '@arcgis/core/assets/esri/themes/dark/main.css'

ts:

import Map from '@arcgis/core/Map' import MapView from '@arcgis/core/views/MapView'

3、创建

点击查看文档

点击查看Map文档 点击查看MapView文档

<template> <div id="map" /> </template> <script setup lang="ts"> import Map from '@arcgis/core/Map' import MapView from '@arcgis/core/views/MapView' import { onMounted } from 'vue' onMounted(() => { const map = new Map({ basemap: 'topo-vector' }) const view = new MapView({ container: 'map', map, center: [116.6, 35.5], zoom: 8, }) }) </script> <style> html, body, #app, #map { height: 100%; width: 100%; margin: 0; padding: 0; } </style>

4、地图UI

点击查看Zoom文档

点击查看ScaleBar文档

import Zoom from '@arcgis/core/widgets/Zoom' import ScaleBar from '@arcgis/core/widgets/ScaleBar' const zoom = new Zoom({ view }) view.ui.add(zoom, { position: 'bottom-right' }) const scaleBar = new ScaleBar({ view, unit: 'metric' }) view.ui.add(scaleBar, { position: 'bottom-right' })

5、使用自定义瓦片地图

点击查看TileLayer文档

点击查看Basemap文档

import TileLayer from '@arcgis/core/layers/TileLayer' import BaseMap from '@arcgis/core/Basemap' const mapBaseLayer = new TileLayer({ url: 'http://xxx.xxx.xxx.xxx:xxxx/arcgis/rest/services/JINING/GEO_JN_IMAGES/MapServer', }) const mapBaseMap = new BaseMap({ baseLayers: [mapBaseLayer] }) const map = new Map({ basemap: mapBaseMap })

6、添加地图图片图层

点击查看MapImageLayer文档

点击查看SimpleRender文档

点击查看SimpleFillSymbol文档

import MapImageLayer from '@arcgis/core/layers/MapImageLayer' const imageLayer = new MapImageLayer({ url: 'http://xxx.xxx.xxx.xxx:xxxx/arcgis/rest/services/JNORCL/GEO_JN_XZQH/MapServer', visible: true, sublayers: [ { id: 2, title: '', renderer: new SimpleRenderer({ symbol: new SimpleFillSymbol({ color: [0, 0, 0, 0], outline: { color: '#05e4c6', width: 2.5, }, }), }), labelsVisible: true, visible: true, }, ], }) map.add(imageLayer)

7、添加图形覆盖物

引入 Graphic 构建工具

import Graphic from '@arcgis/core/Graphic'

引入构建图形的两个重要元素geometry和symbols(这里以 PointSimpleMarkerSymbol 为例)

import Point from '@arcgis/core/geometry/Point' import SimpleMarkerSymbol from '@arcgis/core/symbols/SimpleMarkerSymbol' // 或 import { Point } from '@arcgis/core/geometry' import { SimpleMarkerSymbol } from '@arcgis/core/symbols'

使用

const marker = new Graphic({ geometry: new Point({ longitude: 120, latitude: 36, }), symbol: new SimpleMarkerSymbol({ color: [226, 119, 40], outline: { color: [255, 255, 255], width: 2, }, }), })

添加

// (method) __esri.Collection<__esri.Graphic>.add(item: Graphic, index?: number | undefined): void view.graphics.add(marker)

删除

// (method) __esri.Collection<__esri.Graphic>.remove(item: Graphic): void view.graphics.remove(marker) // 删除所有 view.graphics.removeAll()

8、MapView点击事件与命中测试

点击查看click文档

点击查看hitTest文档

view.on('click', (event) => { console.log(event.mapPoint) view.hitTest(event).then((response) => { console.log(response.results) }) })

9、Popup弹出窗

方式一:

const pictureMarker = new Graphic({ geometry: new Point({ longitude: 120, latitude: 36, }), symbol: new PictureMarkerSymbol({ url: img, width: '64px', height: '64px', }), popupTemplate: { title: 'Vue', content: 'Vue is a progressive framework for building user interfaces.', }, })

方式二:

view.popup.id = 'person' view.popup.alignment = 'bottom-right' const popupTemplate = { title: '执法人员详情', location: new Point({ longitude: info.longitude, latitude: info.latitude }), content: `<div class="flex-wrap flex-start peopleInfoWindow"> <div class="item">姓名:${account}</div> <div class="item" ${sexName ? '' : 'style="display: none"'}>性别:${sexName}</div> <div class="item">手机号:${phone}</div> <div class="item">经度:${info.longitude}</div> <div class="item">纬度:${info.latitude}</div> <div class="item">所属区县:${postName}</div> </div>` } view.popup.open(popupTemplate)

10、视角移动缩放

点击查看文档

view.goTo({ target: Point, zoom: range }) view.goTo({ center: [lng, lat], zoom: range })

二、进阶使用

1、draw绘制

引入Draw

import Draw from '@arcgis/core/views/draw/Draw'

使用

type Type = 'point' | 'polyline' | 'polygon' | 'rectangle' | 'circle' const draw = new Draw({ view: MapView }) const action = draw.value!.create('polyline') MapView.focus() action.value.on( ['vertex-add', 'vertex-remove', 'cursor-update', 'redo', 'undo', 'draw-complete'], (event) => { // do something } )

2、sketch绘制

引入SketchViewModel

import SketchViewModel from '@arcgis/core/widgets/Sketch/SketchViewModel'

使用

type CreateType = 'point' | 'polyline' | 'polygon' | 'rectangle' | 'circle' const sketch = new SketchViewModel({ view: MapView, layer: GraphicLayer, }) sketch.create('polyline')

3、测量、测面、判断相交等

引入geometryEngine

import * as geometryEngine from '@arcgis/core/geometry/geometryEngine'

使用

geometryEngine.geodesicLength(geometry, unit) geometryEngine.geodesicArea(geometry, unit) geometryEngine.intersect(geometry1, geometry2)

4、Editor进行layer编辑

引入Editor

import Editor from '@arcgis/core/widgets/Editor'

使用

const editor = new Editor({ view: MapView })

5、使用queryFeatures查询

使用queryFeatures方法

相关Query

FeatureLayer.queryFeatures().then((results) => { console.log(results.features) // do something })
// 查询符合字段的features const layer = new FeatureLayer({ url: Url }) const query = new Query() query.where = 'STATE_NAME = 青岛' query.outSpatialReference = { wkid: 4326 } // 这个可以将输出的坐标系进行转换 query.returnGeometry = true query.outFields = ['*'] layer.queryFeatures(query).then((results) => { console.log(results.features) // do something })
// 传递一个geometry返回与之相交的features const queryParams = layer.createQuery() queryParams.geometry = geometry queryParams.spatialRelationship = 'intersects' layer.queryFeatures(queryParams).then((results) => { console.log(results.features) // do something })