Cesium 寻找多边形的中心点

741 阅读1分钟

概要

近期项目中提出的需求是在面的中心显示这个面的一些信息,信息很容易拿到,但是面的中心坐标计算得费点心思,因为多边形绘制出来是一个不规则的,在查询Cesium文档后,发现了 BoundingSphere 这个类

实现

  1. 首先要拿到多边形的坐标数组 可以是经纬度的数组,也可以是弧度制的数组
    // 位置数组
    let poArr = [2.034343, 0.697543, 2.031275, 0.696605, 2.031366, 0.696697];
    
  2. 转换成世界坐标
    // 弧度转世界坐标(笛卡尔)
    let res = Cesium.Cartesian3.fromRadiansArray(poArr);
    // 经纬度转世界坐标(笛卡尔)
    let res = Cesium.Cartesian3.fromDegreesArray(poArr);
    
  3. 获取中心点

    Cesium.BoundingSphere获得的是一个具有中心和半径的边界球体,或者叫可视范围圆。 两个属性:

    center: 圆心 radius: 半径

    中心点就是它的圆心

    // 通过fromPoints方法获取中心坐标
    let center = Cesium.BoundingSphere.fromPoints(res).center;
    

总结

后期使用时,可以将它封装成一个工具函数,传入坐标,返回中心坐标和半径。 这样使用会更加灵活