/*
* 缓冲区分析类
* @Author: Wang jianLei
* @Date: 2022-09-29 17:52:21
* @Last Modified by: Wang JianLei
* @Last Modified time: 2022-09-29 17:59:14
*/
import * as turf from "@turf/turf";
const Cesium = window.Cesium;
class BufferAnalysis {
constructor(viewer) {
if (!viewer) throw new Error("no viewer object!");
this.viewer = viewer;
this.bufferCollection = [];
}
/**
* 点缓冲区
* @param {*} position 例:[-75.343, 39.984]
* @param {*} radius 半径km
* @param {*} callback 回调
*/
buffer4Point(position, radius, callback) {
const point = turf.point(position);
this.calculateBuffer(point, radius, callback);
}
/**
* 线缓冲区
* @param {*} positions 例:[[-24, 63], [-23, 60], [-25, 65], [-20, 69]]
* @param {*} radius 半径km
* @param {*} callback 回调
*/
buffer4Polyline(positions, radius, callback) {
const lineString = turf.lineString(positions);
this.calculateBuffer(lineString, radius, callback);
}
/**
* 面缓冲区
* @param {*} positions 例:[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]
* @param {*} radius 半径km
* @param {*} callback 回调
*/
buffer4Polygon(positions, radius, callback) {
positions = [positions];
const polygon = turf.polygon(positions);
this.calculateBuffer(polygon, radius, callback);
}
/**
* 执行buffer计算
* @param {*} data geojson数据
* @param {*} radius 半径
* @param {*} callback 回调
*/
calculateBuffer(data, radius, callback) {
const buffer = turf.buffer(data, radius);
const coordinates = buffer ? buffer.geometry.coordinates[0] : [];
const degreesArray = this.translateDegreesArray(coordinates);
const bufferEntity = this.viewer.entities.add({
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray(degreesArray),
width: 2,
material: Cesium.Color.ORANGE,
},
polygon: {
hierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(degreesArray)
),
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
material: Cesium.Color.ORANGE.withAlpha(0.4),
},
});
const bufferItem = {
type: "PolylineBuffer",
geojson: buffer,
degreesArray: degreesArray,
entity: bufferEntity,
};
this.bufferCollection.push(bufferItem);
if (callback && typeof callback === "function") {
callback(bufferItem);
}
}
translateDegreesArray(arr) {
const result = [];
for (let index = 0; index < arr.length; index++) {
const element = arr[index];
result.push(element[0], element[1]);
}
return result;
}
/**
* 移除所有缓冲区结果
*/
removeAll() {
this.bufferCollection.forEach((element) => {
this.viewer.entities.remove(element.entity);
});
this.bufferCollection = [];
}
}
export default BufferAnalysis;
没有合适的资源?快使用搜索试试~ 我知道了~
基于Cesium实现缓冲区分析功能及其效果展示组件,完整demo和源代码,代码未加密/未压缩,可直接调用运行
共2个文件
vue:1个
js:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 116 浏览量
2023-03-13
10:58:46
上传
评论 2
收藏 3KB ZIP 举报
温馨提示
基于Cesium实现缓冲区分析功能及其效果展示组件,完整demo和源代码,代码未加密/未压缩,可直接调用运行 buffer缓冲区分析主要借助于turf, 安装方式 npm install @turf/turf -S 文章描述:https://blog.csdn.net/qq_34205305/article/details/127150148 代码不易,略收小费,使用过程中如果有任何问题欢迎在文章下进行评论或者私信,百分百回复哦
资源推荐
资源详情
资源评论
收起资源包目录
BufferAnalysis.zip (2个子文件)
BufferAnalysis.vue 5KB
BufferAnalysis.js 3KB
共 2 条
- 1
资源评论
- weixin_431728082023-09-20超级好的资源,很值得参考学习,对我启发很大,支持!
- qq_534579652023-04-27资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。
- congerjiede2023-04-25超赞的资源,感谢资源主分享,大家一起进步!
- 2301_768884392023-07-19资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
总要学点什么
- 粉丝: 842
- 资源: 29
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功