Cesium+Turf.js计算不规则多边形重心,为行政区划中心添加标签

项目中需要添加行政区划,并在区域中心添加label标注,而使用cesium计算的中心点是最小外接圆圆心。

//cesium方法计算多边形中心
// 得到每块多边形的坐标集合
var polyPositions = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions;
// 根据坐标集合构造BoundingSphere获取中心点坐标
var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;
// 将中心点拉回到地球表面
polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);

在面对凹多边形的时候,中心点往往在图形外,因此需要计算多边形重心来设置label位置。可以利用turf.js提供的空间分析方法进行计算:
turf.js提供的重心计算方法
turf.js在计算重心时是在二维平面上计算,而在加载geojson数据到cesium时,得到的是三维笛卡尔坐标系,因此需要将x,y坐标数据提取出来后再运用turf.js进行计算。cesium添加geojson是通过entity方法,因此先要获取多边形的坐标集合,并将x,y数据信息存储在数组中。而通过entity添加label时是通过Cartesian3坐标系进行定位,因此还需要将高度信息z值提取出来。最后再通过 Cesium.Cartesian3.fromArray(array, startingIndex, result)方法将重心数组转换为Cartesian3坐标。

var value = [];
var center = [];
var a = 0;
var b = 0;
for(var j = 0 ; j <= entity.polygon._hierarchy._value.positions.length-1 ; j++){
	value[j] = [entity.polygon._hierarchy._value.positions[j].x,entity.polygon._hierarchy._value.positions[j].y];
	a = entity.polygon._hierarchy._value.positions[j].z;
	b = b+a;
};
var polygon = turf.polygon([value]);
var centroid = turf.centroid(polygon);
center = [centroid.geometry.coordinates[0],centroid.geometry.coordinates[1],b/entity.polygon._hierarchy._value.positions.length+2000];
var labelpostion = Cesium.Cartesian3.fromArray(center);
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Cesium是一个基于Web技术的地理信息可视化工具,其中包括了强大的绘图工具。Cesium TurfCesium中的一种工具,用于绘制地形等值线。 使用Cesium Turf绘制等值线,需要首先获取地形数据。可以使用刚才提到的另一个Cesium工具TinTerrain,以及其他在线资源(如USGS的高程数据)。获取到数据后,可以使用Cesium Turf提供的函数将数据导入。 接下来,使用Cesium的绘图工具将等值线绘制出来。绘制等值线时,首先需要确定等值线的间隔和范围,然后按照不同的高程值绘制出各个等值线。这里需要注意的是,在绘制等值线时,需要使用Cesium Turf提供的Adaptive Sobel算法,以便更好地处理较大的高度变化。 绘制完成后,可以使用Cesium提供的相关工具进行操作和调整。比如可以添加标签、调整颜色和透明度等等。 总之,使用Cesium Turf绘制等值线可以帮助我们更好地了解地形和地貌的变化,从而更好地理解自然地理背景下的人类活动和社会发展。 ### 回答2: Cesium turf是一个基于Cesium的三维地球可视化平台,可以在浏览器中展示地球的不同方面。等值线是用来展示连续变量分布的一种图像形式。在cesium turf中绘制等值线可以通过以下步骤实现: 1. 数据准备:要想绘制等值线,首先需要有一个数据集。数据集通常包含一个二维矩阵,每个单元格都有一个值。 2. 等值线绘制:等值线的绘制需要使用第三方库,比如d3-contour。该库可以将数据集转换为等值线的GeoJSON格式数据。这些数据可以直接添加Cesium地图中。 3. 符号化处理:需要为等值线添加颜色和样式以使其更容易阅读,同时也需要给每个等值线添加标注,以标识其对应的值。 4. 动态效果:通过CSS动画或者Cesium的动画效果,可以为等值线添加一些动态效果,使其更加生动。 总的来说,在cesium turf中绘制等值线需要进行数据准备、等值线绘制、符号化处理以及添加动态效果等步骤。这些步骤的实现需要综合运用地理信息技术和数据可视化技术,从而实现更生动、更具信息量的地球可视化展示效果。 ### 回答3: Cesium Turf是一款地理信息Web应用程序,具有强大的可视化能力。它可以通过等值线(isoline)来展示地形高度数据。等值线是一种将地形高度信息通过线条展示出来的方法,通常可以用来表示山脉、高原等自然环境的高度。 Cesium Turf可以通过将地形高度数据通过Cesium Terrain Builder处理后添加到场景中进行展示,使用Terrain Contour插件可以将高度数据转换成等值线。用户可以在该插件中设置等值线的间隔距离、绘制颜色等参数,最终生成等值线图。 除了Terrain Contour插件,Cesium Turf还支持使用Turfs插件绘制等值线。Turfs是一款Cesium的插件,它支持使用多种算法(如Hachure, bevel, tint)绘制等值线,并可以通过调整等值线颜色、宽度等属性来实现更加美观和易读的效果。 综上所述,通过Cesium Turf的地形高度数据渲染功能,用户可以方便地绘制出自己所需的等值线图,并通过调整参数和算法来定制化自己的可视化方案,满足用户的需求和视觉效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值