В Google Earth можно ли программно изменять высоту линии String / LinearRing? - PullRequest
1 голос
/ 16 марта 2012

Я использую плагин Google Планета Земля на странице HTML.В этом контексте, скажем, у вас есть строковая строка или многоугольник, как это

// 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

Кто-нибудь знает правильный синтаксис?

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Я нашел ответ.Мое понимание было запросом типа, когда я перемещался по объектам.Смотри ниже

    // 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());
    }
0 голосов
/ 19 марта 2012

Если у вас есть ссылка на LineString (вы можете удержать ее или пройтись по KML DOM и получить ее снова), вы можете изменить высоту всей LineString с помощью

lineString.setAltitudeOffset(offsetFromCurrentAltitude);

Если вы хотите изменить высоту на основе координат, вы можете получить к ним доступ в основном так, как вы ее построили выше. lineString.getCoordinates () возвращает KmlCoordArray , а затем вы можете читать значения по отдельным координатам оттуда. Одним из неудобных моментов в KmlCoordArray является то, что он возвращает копии своих KmlCoord потомков, а не его потомков напрямую. Таким образом, вы можете сделать lineString.getCoordinates (). Get (0) и затем прочитать значения lat / lng / alt из возвращаемого KmlCoord, но если вы установите эти значения для этой координаты, не будет автоматически отражаться в 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 , чтобы узнать о других методах, чтобы узнать, будут ли они более полезны для конкретного случая использования, который вы имеете в виду.

...