在最近的项目中,客户要求根据所选地图的斑块求取该斑块所跨省份的面积对比,通过具体分析要用到GIS中拓扑的相交来求出相交部分肯定面积web
首先咱们来看下Arcgis For Js Api中是怎么求两个几何要素的交集的api
引用的模块
:"esri/geometry/geometryEngine"数组
具体使用该模块的intersect
方法.服务器
咱们来具体看一下app
Geometry | Geometry[] (返回相交的几何要素/几何要素的数组)函数
由api咱们得知只须要一个geometry和一个geometry或者geometry数组就能够求交集了,那咱们能够用斑块的geometry和 全省份图的geometry来求交集了
spa
具体以下:rest
//获得相交的值
var interPloy = geometryEngine.intersect(geomboj.geom1, geomboj.geom2)
for (let i = 0; i < interPloy.length; i++) {
//由于它会根据参数二的与全部的子集都作交集计算,有的返回数据,没有的返回null
//因此须要作判断
if (!(interPloy[i] === null)) {
//此时的i即是相交项的index
//这里拿到的只是geometry,想要拿到属性或者设置样式,还须要把它变成graphic
//把它变成graphic
let graphic =new Graphic(interPloy[i])
//新建一个GraphicsLayer用来存放graphic
let GraphicsLayer = new GraphicsLayer()
//将graphic放在raphicsLayer
GraphicsLayer.add(graphic)
//将graphic放在map上
map.addLayer(GraphicsLayer)
//接下来,随心所欲吧,添加样式,绑定属性,均可以的
}
复制代码
具体利用GeometryService
中intersect
函数实现code
引用的模块为:"esri/tasks/GeometryService"
regexp
咱们来具体看一下
具体的使用方法和第一个客户端的intersect是差很少的,咱们来看下
//新建一个几何服务类,传入几何服务的地址
let geometryService = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
geometryService.intersect(geomboj.geom1, geomboj.geom2,(res)=>{
//res为相交的元素
})
复制代码