【WebGIS实例】(9)ArcGIS REST Service 点周边查询

背景

有这么一个需求,在地图上点击一个点,以该点为中心绘制半径为100米的圆,然后从arcgis rest 服务里查询与该圆相交或包含关系的矢量要素。简单来说就是点周边查询或者说是缓冲区查询。

我问了下ChatGPT,按理来说ArcGIS Service自身就可以进行缓冲区查询的,但是可能我那个业务系统用的版本比较老,查的时候一直提示参数错误,别无他法,只得曲线救国。

实现思路:

  1. 获取点击位置的坐标,并以此为中心利用turf.js生成一个多边形圆(GeoJSON格式)
  2. 将GeoJSON格式的多边形圆转换为EsriJSON格式
  3. 直接进行ArcGIS REST Service的Query请求

实现

第一步:生成一个圆

npm install @turf/turf
import * as turf from '@turf/turf'

const point = [lng, lat] // 圆心点
const radius = 0.5; // 半径
const options = { steps: 50, units: 'kilometers' };
const circle = turf.circle(point, radius, options);

console.log('circle: ', circle); 
// 打印一下,我们得到了一个geojson格式的圆,见下图

在这里插入图片描述

第二步:圆的格式转换

为什么要做这一步?因为ArcGIS REST Service的查询中输入的矢量(好像)只支持esri-json格式。

npm install @terraformer/arcgis
import { geojsonToArcGIS } from "@terraformer/arcgis"

const esriCircle = geojsonToArcGIS(circle)

console.log('esriCircle: ', esriCircle);
// 打印一下,我们得到了一个esrijson格式的圆,见下图

在这里插入图片描述

第三步:查

import { arcgisToGeoJSON } from "@terraformer/arcgis"

const params = {
  returnGeometry: true,
  where: '1=1',
  outSR: 4326,
  outFields: '*',
  inSR: 4326,
  "geometry": JSON.stringify(esriCircle.geometry),
  "geometryType": "esriGeometryPolygon",
  spatialRel: 'esriSpatialRelIntersects',
  geometryPrecision: 6,
  "f": "json",
};
axios({
  method: 'get',
  url: url, // 示例:http://cache1.arcgisonline.cn/arcgis/rest/services/ChinaOnlineCommunity_Mobile/MapServer/0/query
  params,
}).then(res => {
  const geojsonData = arcgisToGeoJSON(res.data) // 再把格式转换回geojson
  console.log('geojsonData: ', geojsonData);
})

在这里插入图片描述


其他

这是一个常见的通过ArcGIS发布的服务的Query界面:Query: China (ID: 0) (arcgisonline.cn)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章Web GIS基础 1.1GIS及相关技术的发展 1.1.1Web开发技术的发展 1.1.2GIS的发展 1.1.3Web服务的发展 1.1.4Web GIS的发展 1.2OGC的Web服务规范 1.2.1OWS服务体系 1.2.2空间信息Web服务的角色与功能 1.2.3空间信息Web服务的系统框架 1.2.4OWS中的常用服务 1.2.5服务的请求与响应 1.3RESTREST风格的Web服务 1.3.1REST中的基础知识 1.3.2REST风格的Web服务 1.3.3REST风格的Web服务实例 1.4Web GIS的组成 1.5ArcGIS Server REST风格的Web服务 1.5.1ArcGIS S erver站的架构 1.5.2ArcGIS Server发布的服务类型 1.5.3服务发布 1.5.4Web服务的URL及元数据 1.5.5查看地图 1.5.6使用ArcGIS Server REST风格Web服务的过程 1.5.7支持的输出格式 第2章ArcGIS API for JavaScript基础 2.1ArcGIS API for JavaScript版的Hello World 2.2ArcGIS API for JavaScript与Dojo 2.2.1ArcGIS API for JavaScript的构成 2.2.2ArcGIS API for JavaScript与Dojo的关系 2.3开发与调试工具 2.3.1集成开发环境 2.3.2调试工具 2.3.3Firebug 2.3.4其他工具软件 2.4Dojo基础知识 2.4.1JavaScript对象 2.4.2函数也是对象 2.4.3模拟类与继承 2.4.4使用模块与包管理源代码 第3章页面布局设计 3.1使用布局小部件设计页面框架 3.1.1小部件与布局小部件简介 3.1.2使用面板组织页面元素 3.1.3使用容器小部件设计页面布局 3.2可移动的小部件微架构 3.2.1自定义小部件的基础知识 3.2.2内容小部件的基类实现 3.2.3可移动的框架小部件 3.2.4测试 3.3集中控制的小部件微架构 3.3.1可集中控制的框架小部件 3.3.2小部件容器 3.3.3测试 3.3.4订阅/发布模式的事件处理机制 3.4使用菜单组织功能 3.4.1菜单容器小部件 3.4.2菜单项小部件 3.4.3菜单小部件 3.4.4测试 第4章地图与图层 4.1图层操作 4.1.1图层类及其之间的继承关系 4.1.2切片地图图层 4.1.3动态地图图层 4.1.4图形图层 4.1.5带地理参考的影像图层 4.1.6 KML图层 4.2自定义图层 4.2.1自定义动态图层——热度图图层 4.2.2自定义切片地图图层——百度地图 4.2.3自定义图层——三维建筑图 4.3地图操作 4.3.1地图窗口操作 4.3.2地图属性获取 4.3.3事件处理 4.4地图参数的基本配置 4.4.1漫游与缩放动画的参数配置 4.4.2比例滚动条的参数配置 4.4.3跨域访问参数配置 4.5图层控制器 4.5.1图层控制器小部件模板 4.5.2图层控制器小部件类 4.5.3图层控制器小部件的使用 第5章空间参考系统与几何对象 5.1空间参考系统 5.1.1空间参考系统类 5.1.2参考系统转换 5.2几何对象 5.2.1几何对象类及其之间的继承关系 5.2.2几何对象的绘制 5.2.3几何对象相关的功能模块 第6章符号与图形 6.1符号 6.1.1标记符号 6.1.2线符号 6.1.3填充符号 6.1.4文本符号 6.2图形 6.2.1图形对象的构成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值