在最近的項目中,客戶要求根據所選地圖的斑塊求取該斑塊所跨省份的面積對比,通過具體分析要用到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爲相交的元素
})
複製代碼