我在HTML网页上使用Google地球插件。在这种情况下,假设你有一个像这样的线串或多边形
// Create the placemark
var lineStringPlacemark = ge.createPlacemark('');
// Create the LineString
var lineString = ge.createLineString('');
lineStringPlacemark.setGeometry(lineString);
// Add LineString points
lineString.getCoordinates().pushLatLngAlt(48.754, -121.835, 0);
lineString.getCoordinates().pushLatLngAlt(48.764, -121.828, 0);
// Add the feature to Earth
ge.getFeatures().appendChild(lineStringPlacemark);
我从https://developers.google.com/earth/documentation/geometries
获得了样本现在,假设你想以编程方式改变高度(高度),在你追加lineString之后,你会怎么做?
我看到你可以通过ge.getFeatures()检索这些功能。但是,无法检查返回的对象,我正在努力改变高度的语法。
我可以移除整个对象并重绘它但是这很黑,用户可以看到重绘。这是要删除的代码
var features = ge.getFeatures();
while (features.getFirstChild())
features.removeChild(features.getFirstChild());
我从https://developers.google.com/earth/documentation/containers
获得了代码有人知道正确的语法吗?
答案 0 :(得分:0)
如果你有LineString的引用(你可以坚持它,或者走KML DOM并再次获取它),你可以通过
改变整个LineString的高度。lineString.setAltitudeOffset(offsetFromCurrentAltitude);
如果要基于每个坐标更改高度,您可以基本上按照上面的构造来访问它们。 lineString.getCoordinates()返回KmlCoordArray,然后您可以从那里读取各个坐标的值。关于KmlCoordArray的一个尴尬的事情是它返回其KmlCoord个孩子的副本,而不是直接返回它的孩子。所以你可以做lineString.getCoordinates()。get(0)然后从它返回的KmlCoord中读取lat / lng / alt值,但是如果你在那个坐标上设置那些值,它就不会自动反映在LineString中。相反,您必须将KmlCoord读取到KmlCoordArray。这有点尴尬,但可用。
所以你可能会做这样的事情,如果你通常一次只改变一个高度:
function setNewAltitude(lineString, coordIndex, altitude) {
var coords = lineString.getCoordinates();
if (coordIndex >= 0 && coordIndex < coords.getLength()) {
var coord = coords.get(coordIndex);
coord.setAltitude(altitude);
coords.set(coordIndex, coord);
}
}
查看KmlCoordArray参考页面了解其他方法,看看它们对您考虑的具体用例是否更有帮助。
答案 1 :(得分:0)
我找到了答案。我的洞察力是在我浏览对象时请求类型。见下文
// read the number of features in GE
var length = ge.getFeatures().getChildNodes().getLength();
// get the first feature
var feature = ge.getFeatures().getFirstChild();
// for debugging get type - expecting KmlPlacemark
var featureType = feature.getType();
console.log(featureType);
// get KmlPlacemark geometry
var geometry = feature.getGeometry();
// for debugging get type - expecting KmlLineString
var geometryType = geometry.getType();
console.log(geometryType);
// get KmlLineString coordinates
var coordinates = geometry.getCoordinates();
// for debugging get type - expecting KmlCoordArray
var coordinatesType = coordinates.getType();
console.log(coordinatesType);
var altitude = Math.random()*10000;
var coordinatesLength = coordinates.getLength();
for(var i=0; i< coordinatesLength; i++){
var coordinate = coordinates.get(i);
console.log(coordinate.getType());
coordinate.setAltitude(altitude);
coordinates.set(i,coordinate)
}
for(var i=0; i< coordinatesLength; i++){
var coordinate = coordinates.get(i);
console.log(coordinate.getAltitude());
}