Arcgis For JavaScript——求两个几何要素的相交值

1,812 阅读3分钟

在最近的项目中,客户要求根据所选地图的斑块求取该斑块所跨省份的面积对比,经过具体分析要用到GIS中拓扑的相交来求出相交部分确定面积

首先我们来看下Arcgis For Js Api中是怎么求两个几何要素的交集的

方式一:`客户端的geometryEngine`

引用的模块"esri/geometry/geometryEngine"

具体使用该模块的intersect方法.

我们来具体看一下

方法名:`intersect`

参数:

  • geometry (数据类型为单个geometry或者geometry数组,此参数为进行交集的几何元素)
  • intersector (数据类型为单个geometry,此元素为目标元素)

返回值

Geometry | Geometry[] (返回相交的几何要素/几何要素的数组)

由api我们得知只需要一个geometry和一个geometry或者geometry数组就可以求交集了,那我们可以用斑块的geometry和 全省份图的geometry来求交集了

具体如下:

 //得到相交的值
            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几何服务`

具体利用GeometryServiceintersect函数实现

引用的模块为:"esri/tasks/GeometryService"

我们来具体看一下

方法名:`intersect`

参数:

  • geometries (数据类型为Geometry[],此参数为进行交集的几何元素)
  • geometry (数据类型为Geometry,此元素为目标元素)
  • callback(成功的回调函数)
  • error(失败的回调函数)

具体的使用方法和第一个客户端的intersect是差不多的,我们来看下

          //新建一个几何服务类,传入几何服务的地址
            let geometryService = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
            geometryService.intersect(geomboj.geom1, geomboj.geom2,(res)=>{
                //res为相交的元素

            })