Arcgis For JavaScript——求兩個幾何要素的相交值

在最近的項目中,客戶要求根據所選地圖的斑塊求取該斑塊所跨省份的面積對比,通過具體分析要用到GIS中拓撲的相交來求出相交部分肯定面積web

首先咱們來看下Arcgis For Js Api中是怎麼求兩個幾何要素的交集的api

方式一:`客戶端的geometryEngine`

引用的模塊"esri/geometry/geometryEngine"數組

具體使用該模塊的intersect方法.服務器

咱們來具體看一下app

方法名:`intersect`

參數:

  • geometry (數據類型爲單個geometry或者geometry數組,此參數爲進行交集的幾何元素)
  • intersector (數據類型爲單個geometry,此元素爲目標元素)

返回值

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幾何服務`

具體利用GeometryServiceintersect函數實現code

引用的模塊爲:"esri/tasks/GeometryService"regexp

咱們來具體看一下

方法名:`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爲相交的元素

            })
複製代碼
相關文章
相關標籤/搜索