使用geometryEngine中intersect和planarArea计算相交部分面积
geometryEngine是一个客户端图形引擎,里面有很多实用的方法,包括intersect(geometry, intersector)、planarArea(geometry, unit)计算相交图形以及计算面积等功能。
我们先从官网中看一下这两个方法:

通过两个几何之间的交集创建新的几何
参数构成:
Parameters:输入几何体,被相交的几何体
两个参数都是Geometry,并且都是必选参数 ,返回的是一个Geometry.

第一个参数是一个Geometry,第二个参数是一个String/Number的unit单位,两个都是必选参数 ,返回的是一个Number类型
使用起来只需要像寻常方法一样就可以,非常方便
计算出相交图形
var intergeo = geometryEngine.intersect(geometry, geometry)
var area = Number(geometryEngine.planarArea(intergeo, "square-meters").toFixed(3))
附上完整代码
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" /> <title>Simple Map</title> <link rel="stylesheet" href="https://js.arcgis.com/3.25/esri/css/esri.css"> <style> html, body, #map { height: 100%; margin: 0; padding: 0; } input{ position:absolute; top:20px; z-index:999; height:30px; width:80px; cursor:pointer } #drawbtn { left:60px; } #stopbtn { left:150px; } </style> <script src="https://js.arcgis.com/3.25/"></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script> var map; var geo; require(["esri/map", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/toolbars/draw", "esri/tasks/IdentifyTask", "esri/tasks/IdentifyParameters", "esri/geometry/geometryEngine", "dojo/domReady!"], function (Map, ArcGISDynamicMapServiceLayer, Draw, IdentifyTask, IdentifyParameters, geometryEngine) { map = new Map("map", { basemap: "osm", center: [118.8, 32], zoom: 8 }); var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/test/MyNewService/MyServer"); map.addLayer(layer); var toolbar = new Draw(map); //画图开启 $("#drawbtn").click(function () { toolbar.activate(Draw.EXTENT); }); //画图关闭 $("#stopbtn").click(function () { toolbar.deactivate(); }) //关闭后调用的方法 toolbar.on("draw-complete", drawGeo); //将画的geometry传入IdentifyTask空间查询中 function drawGeo(evt) { geo = evt.geometry; identifyQuery(geo); } function identifyQuery(geometry) { var identify = new IdentifyTask("http://localhost:6080/arcgis/rest/services/test/MyNewService/MyServer"); var params = new IdentifyParameters();//查询参数 params.geometry = geometry; params.returnGeometry = true;//记住一定要true,否则不会返回查询出的geometry params.layerIds = [0]; params.mapExtent = map.extent; params.tolerance = 3; identify.execute(params, function (res) { //将查询结果(包含geometry)与自己画出的geometry一并传入intersectres中 intersectres(res, geometry); }); } function intersectres(res, geometry) { if (res.length>0) { for (var i = 0; i < res.length; i++) { var intergeo = geometryEngine.intersect(res[i].feature.geometry, geometry); var area = Number(geometryEngine.planarArea(intergeo, "square-meters").toFixed(3)) console.log("与" + res[i].feature.attributes["行政区名称"] + "相交面积是:" + area + "平方米"); console.log("================================================================================"); } } else { console.log("无相交") } } }); </script> </head> <body> <div id="map"> <input id="drawbtn" type="button" value="画图"/> <input id="stopbtn" type="button" value="停止" /> </div> </body> </html>
版权声明:
作者:广州前端开发
链接:https://www.develophm.com/index.php/%e4%bd%bf%e7%94%a8geometryengine%e4%b8%adintersect%e5%92%8cplanararea%e8%ae%a1%e7%ae%97%e7%9b%b8%e4%ba%a4%e9%83%a8%e5%88%86%e9%9d%a2%e7%a7%af/1236/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论