2012-03-15 1 views
1

HTML 페이지에서 Google 어스 플러그인을 사용하고 있습니다. 이러한 맥락에서, 당신은 내가 지금 https://developers.google.com/earth/documentation/geometriesGoogle 어스에서 프로그래밍 방식으로 lineString/LinearRing에서 고도를 변경할 수 있습니까?

에서 샘플을 가지고이

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

, 당신이를 추가 한 후, 프로그래밍 고도 (높이)를 변화하고 싶은 말을 같은 줄 문자열 또는 다각형이 있다고 lineString, 어떻게 할거 니?

ge.getFeatures()를 통해 기능을 검색 할 수있는 것을 보았습니다. 그러나 반환 된 객체는 검사 할 수 없으며 고도를 변경하는 구문에 어려움을 겪고 있습니다.

전체 개체를 제거하고 다시 그릴 수는 있지만 그 개체는 해키이며 사용자는 다시 그릴 수 있습니다. 이것은 내가

사람이 올바른 구문을 알고 있나요 https://developers.google.com/earth/documentation/containers의 코드를 가지고

var features = ge.getFeatures(); 
while (features.getFirstChild()) 
    features.removeChild(features.getFirstChild()); 

제거 할 수있는 코드? 당신이 LineString에 대한 참조가있는 경우

답변

0

lineString.setAltitudeOffset(offsetFromCurrentAltitude); 

를 통해 전체 유도 선의 고도를 변경할 수 있습니다 (당신은 그것을 붙잡고, 또는 KML DOM을 걸어 다시 얻을 수 있습니다) 당신이 만약 좌표 단위로 고도를 변경하고 싶다면 기본적으로 위에서 작성한대로 액세스 할 수 있습니다. 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 참조 페이지를 볼 수 : 당신은 일반적으로 한 번에 하나 개의 고도를 변경하는 경우

그래서 당신은 같은 것을 할 수 당신이 염두에두고있는 정확한 사용 사례.

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()); 
    }