geometryEngine中geodesicBuffer()方法分析

创建缓冲区面几何
本文介绍如何使用geodesicBuffer方法根据输入的点几何创建不同类型的缓冲区,并展示了如何处理二维和三维点以确保缓冲区正确显示。

geodesicBuffer(geometry, distance, unit, unionResults),该方法用于给输入的geometry创建一定距离的缓冲区。

该方法返回的缓冲区的面几何,可以是在空中显示,也可以在地面上显示。

比如:在sceneview视图中,如果你输入的几何是point类型的。

1.point是二维的没有Z值,通过这样的几何创建的缓冲区面中的rings属性中的折点数组中也是二维的。

var pt=new Point(
{
longitude:102.74739845358548,
latitude:25.093973851145098,
spatialReference:{wkid:4326}
});

var bufferGeo1=geometryEngine.geodesicBuffer(pt,10,"meters",false);

注意:该图形创建的缓冲区中的折点的维数是由输入几何的维数决定的。

2.point是三维的,有Z值,通过这样的几何创建的缓冲区面中的rings中的点的数组是三维的。但是面中的折点的海拔默认是0,如果你不改变折点的海拔值,那么缓冲区面是显示不出来的,因为海拔为0在地面以下不会显示,通过遍历缓冲区面中的折点数组中的z值与point中的z值保持一致(大于地面的海拔就可以),当你设置折点的海拔,很大的时候,缓冲面的是悬在空中的。

var pt=new Point(
{
longitude:102.74739845358548,
latitude:25.093973851145098,
z:1916.826530947298,
spatialReference:{wkid:4326}
});

var geo2=geometryEngine.geodesicBuffer(pt,10,"meters",false);

注意:如果你输入的几何是二维的坐标,即没有海拔,则直接将缓冲面添加的地图上即可,如果你输入的几何是三维的坐标,即有海拔,那么你要设置缓冲区面中折点的海拔值,如果不设置,默认为0,缓冲面不会显示

效果图:

输入为二维几何:


输入为三维几何,设置了缓冲区面折点的海拔值:


// 创建点状符号图层和结果图层 const graphicsLayer = new GraphicsLayer(); const resultsLayer = new GraphicsLayer(); map.addMany([graphicsLayer, resultsLayer]); // 创建点数组 const pointArray = []; for (let i = 0; i < points.length; i++) { pointArray.push([points[i][0], points[i][1]]); } // 创建多点对象 const multipoint = new Multipoint({ points: pointArray }); // 创建简单点状符号 const simpleMarkerSymbol = { type: "simple-marker", color: [226, 119, 40], outline: { color: [255, 255, 255], width: 1 } }; // 创建点状符号图形 const multipointGraphics = multipoint.points.map((point) => { return new Graphic({ geometry: { type: "point", longitude: point[0], latitude: point[1] }, symbol: simpleMarkerSymbol }); }); graphicsLayer.addMany(multipointGraphics); view.ui.add(document.getElementById("controls"), "down-right"); document.getElementById("earthquake").addEventListener("click", visual); document.getElementById("buffer").addEventListener("click", createBuffers); document.getElementById("reset").addEventListener("click", resetGraphics); document.getElementById("heatmap").addEventListener("click", creatheatmap); document.getElementById("colse").addEventListener("click", closeheatmap); // 用于存储缓冲区图形的数组 let bufferGraphics = []; // 创建缓冲区图形 function createBuffers() { // 如果已经创建了缓冲区,则直接返回 if (bufferGraphics.length > 0) { return; } // 遍历多点图形列表,为每个点创建缓冲区图形 bufferGraphics = multipointGraphics.map((pointGraphic) => { const buffer = geometryEngine.geodesicBuffer( pointGraphic.geometry, 10, "kilometers" ); return new Graphic({ geometry: buffer, symbol: { type: "simple-fill", color: [227, 139, 79, 0.5], outline: { color: [255, 255, 255, 255] }, }, }); }); // 将缓冲区图形添加到结果图层中 resultsLayer.addMany(bufferGraphics); } function resetGraphics() { resultsLayer.removeAll(); bufferGraphics = []; }计算resultLayer缓冲后的面积,写到一个单独的函数里,并把结果输出到textbox里
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值