2012-04-05 12 views
1

Ich habe mit der Google Earth-API gespielt. Ich dachte, es wäre nett, einige Linien zwischen Orten aus einem relativen 3D-Blickwinkel zu zeichnen. Ich habe die GE-Dokumentation durchsucht und auf Google nach Antworten gesucht, aber nichts gefunden, was mich auf den richtigen Weg geführt hat. Daher dachte ich, ich würde etwas Code posten und vielleicht einen Einblick bekommen.Google Earth API - Zeichnen von Linien, die kurven?

Der folgende Code zeichnet zwei Stellen und zeichnet dann eine Linie zwischen diesen Stellen. Leider spleißt die Linie, die gezogen wird, die Erde. Gibt es eine Methode, um es in die Kontur der Erde zu wickeln, wenn es so in 3D gezeichnet wird? Ich habe versucht, die Platzierung der Zeilenhöhe mit unterschiedlichem Erfolg zu variieren, aber auf Kosten der Genauigkeit und der allgemeinen optischen Wirkung, wenn die Linie die Orte nicht zu verbinden scheint.

function init() { 
    google.earth.createInstance('map3d', initCB, failureCB); 
} 

function initCB(instance) { 
    ge = instance; 
    ge.getWindow().setVisibility(true); 


    //---------------------------------PLACES 

    // Create the placemark. 
    var placemark = ge.createPlacemark(''); 
    placemark.setName("Location 1"); 

    // Set the placemark's location. 
    var point = ge.createPoint(''); 
    point.setLatitude(39.96028); 
    point.setLongitude(-82.979736); 
    placemark.setGeometry(point); 

    // Add the placemark to Earth. 
    ge.getFeatures().appendChild(placemark); 


    // Create the placemark. 
    var placemark2 = ge.createPlacemark(''); 
    placemark2.setName("Hop #2"); 

    // Set the placemark's location. 
    var point2 = ge.createPoint(''); 
    point2.setLatitude(25.7615); 
    point2.setLongitude(-80.2939); 
    placemark2.setGeometry(point2); 

    // Add the placemark to Earth. 
    ge.getFeatures().appendChild(placemark2); 

    //---------------------------------FOCUS 

    var lookAt = ge.createLookAt(''); 
    lookAt.setLatitude(39.96028); 
    lookAt.setLongitude(-82.979736); 
    lookAt.setRange(1000000.0); 
    lookAt.setAltitude(0); 
    lookAt.setTilt(45); 
    ge.getView().setAbstractView(lookAt); 


    //---------------------------------LINES 

    // Create the placemark 
    var lineStringPlacemark = ge.createPlacemark(''); 

    // Create the LineString 
    var lineString = ge.createLineString(''); 
    lineStringPlacemark.setGeometry(lineString); 

    // Add LineString points 
    lineString.getCoordinates().pushLatLngAlt(39.96028, -82.979736, 0); 
    lineString.getCoordinates().pushLatLngAlt(25.7615, -80.2939, 0); 
    //lineString.setAltitudeMode(ge.ALTITUDE_CLAMP_TO_GROUND); 
    //lineString.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    lineString.setAltitudeMode(ge.absolute); 

    // Create a style and set width and color of line 
    lineStringPlacemark.setStyleSelector(ge.createStyle('')); 
    var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle(); 
    lineStyle.setWidth(2); 
    lineStyle.getColor().set('9900ffff'); // aabbggrr format 

    // Add the feature to Earth 
    ge.getFeatures().appendChild(lineStringPlacemark); 

} 

function failureCB(errorCode) { 
} 

google.setOnLoadCallback(init); 

Antwort

3

Sie möchten Tesselation setzen und optional extrudieren, auf Ihrer Linienfolge auf True.

Siehe https://developers.google.com/kml/documentation/kmlreference#tessellate und https://developers.google.com/kml/documentation/kmlreference#extrude für Details

Für die API, die Syntax etwas wie

lineStringPlacemark.setTessellate(true); 
lineStringPlacemark.setExtrude(true); 

wäre Es gibt einige zusätzliche API Beispiele hierzu finden Sie unter https://developers.google.com/earth/documentation/geometries

+0

Genial, was ich suchte. Vielen Dank für das Aufzeigen, was ich in der Dokumentation deutlich übersehen habe. – TonyStark