Quick and dirty temp solution if anyone needs it
A Sandbox example using it is postered here
the code assumes that ‘scene’ and ‘ellipsoid’ are already defined along with terrainProvider
var interpolateCartographicLine = function (start, end, maxDistanceBetweenPoints) {
var geodesic = new Cesium.EllipsoidGeodesic(start, end, ellipsoid),
distance = geodesic.surfaceDistance,
points = [start],
stepCount,
stepPercent,
i ;
if (distance> maxDistanceBetweenPoints && maxDistanceBetweenPoints > 0) {
stepCount = Math.pow(2, Math.ceil(Math.log2(distance / maxDistanceBetweenPoints)));
stepPercent = 1.0 / stepCount;
for (i = 1; i < stepCount; i++) {
points.push(geodesic.interpolateUsingFraction(i * stepPercent));
}
}
points.push(end);
return {points: points, distance: distance, stepCount: stepCount};
};
var clampToGroundBillboard = function (options) {
var billboard = options.billboard,
callBack = options.callBack || (function () { }),
cartographic = ellipsoid.cartesianToCartographic(billboard.position);
Cesium.when(Cesium.sampleTerrain(scene.terrainProvider, 14, [cartographic]),
function (_billboard, _cartographic, _callBack) {
return function () {
_cartographic.height = _cartographic.height + 1;
_billboard.position = ellipsoid.cartographicToCartesian(_cartographic);
if (_callBack) {
_callBack(_billboard, _cartographic);
}
};
}(billboard, cartographic, callBack)
);
};
var clampToGroundPolyLine = function (options) {
var polyLine = options.polyLine,
callBack = options.callBack || (function () {}),
org = ellipsoid.cartesianArrayToCartographicArray(polyLine.geometry._positions),
loopCount = org.length - 1,
cartos = [],
newPoints,
i ;
for (i = 0; i < loopCount ; i++) {
cartos.slice[0, -1];
cartos = cartos.concat(interpolateCartographicLine(org[i], org[i + 1], 10).points);
}
Cesium.when(Cesium.sampleTerrain(scene.terrainProvider, 12, cartos),
function (_polyLine, _cartographics, _callBack) {
return function () {
_polyLine.geometry._positions = ellipsoid.cartographicArrayToCartesianArray(_cartographics);
if (_callBack) {
_callBack(_polyLine, _cartographics);
}
};
}(polyLine, cartos, callBack)
);
};