2016-07-05 8 views
0

Ich werde eine Reihe von Linien in Form eines Kreises von einem angeklickten Punkt zeichnen. Mein Code funktioniert gut, aber es zeichnet den Kreis weit weg von angeklickt Punkt. Kann mir jemand helfen herauszufinden, wo mein Fehler ist?Cäsium Zeichnen Sie eine Reihe von Linien in Form eines Kreises auf ausgewählten Punkt

var viewer = new Cesium.Viewer('cesiumContainer'); 
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas); 
handler.setInputAction(function(click) { 
    var alertText = ''; 
    function addToMessage(key, value) { 
     alertText += key + ': ' + value + '\n'; 
    } 

    // var pickedObject = scene.pick(click.position); 

     // addToMessage('target', pickedObject.id.id); 
     var position = viewer.camera.pickEllipsoid(click.position); 
     addToMessage('screenX', click.position.x); 
     addToMessage('screenY', click.position.y); 
     addToMessage('didHitGlobe', Cesium.defined(position)); 
     var cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); 
     addToMessage('longitude', cartographicPosition.longitude); 
     addToMessage('latitude', Cesium.Math.toDegrees(cartographicPosition.latitude)); 
     terrainSamplePositions = [cartographicPosition]; 
     Cesium.sampleTerrain(viewer.terrainProvider, 9, terrainSamplePositions).then(function() { 
      addToMessage('height', terrainSamplePositions[0].height); 
     }).always(function() { 
      // alert(alertText); 
     }); 

    // var x=Cesium.Math.toDegrees(cartographicPosition.latitude); 
    // var y=Cesium.Math.toDegrees(cartographicPosition.longitude); 
    var y=cartographicPosition.latitude; 
    var x=cartographicPosition.longitude; 
    // alert(x);//35 
    // alert(y);//-101 
    var radius=0.01; 
    var segmants=360; 
    var seg=Math.PI*2/segmants; 
    var origin= new Cesium.Cartesian3(x, y, 0); 
    var shape = []; 
    for (i = 0; i <= segmants; i++) { 
     var teta=seg*i; 
     var a =x+Math.cos(teta)*radius; 
     var b =y+Math.sin(teta)*radius; 
     // shape.push(a); 
     // shape.push(b); 
     var origin= new Cesium.Cartesian3(x, y, 0); 
     console.log(["origin is",origin.y,origin.x]); 

     var direction= new Cesium.Cartesian3(a, b, 0); 
     console.log(["direction is",direction.y,direction.x]); 



     viewer.entities.add({ 
      name : 'Red line on the surface', 
      polyline : { 
       positions : Cesium.Cartesian3.fromCartographicArray([origin.x, origin.y, 
        direction.x, direction.y]), 
       width : 5, 
       material : Cesium.Color.RED 
      } 
     }); 






    } 



    viewer.zoomTo(resultPolygon.position); 
}, Cesium.ScreenSpaceEventType.LEFT_CLICK); 

Dank für Ihre Hilfe

Antwort

1

Wenn Sie wollen, einen Kreis zu zeichnen, einfacher, einen ellipse geometry mit einem Umriss zu zeichnen. Setzen Sie für einen Kreis semiMinorAxis mit demselben Wert wie semiMajorAxis, dessen Wert in Metern angegeben ist.

var position = viewer.camera.pickEllipsoid(click.position); 
var cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); 
var y = cartographicPosition.latitude; 
var x = cartographicPosition.longitude; 

var entity = viewer.entities.add({ 
     position: Cesium.Cartesian3.fromRadians(x, y), 
     ellipse : { 
      semiMinorAxis : 10, 
      semiMajorAxis : 10, 
      fill : false,   
      outline: true, 
      material : Cesium.Color.RED, 
      outlineColor : Cesium.Color.RED, 
      outlineWidth : 2 
     } 
}); 
viewer.zoomTo(entity); 
+0

Lieber Jason, Vielen Dank für Ihre Hilfe, aber in der Tat Ich will diese Linien zeichnen und einen Kreis mit jener Linie bilden, wird das Problem, wenn ich in Nordamerika klicken Sie zieht Linien in Pazifischen Ozean scheint es einige, wie Mein Code konvertiert den Standort auf eine falsche Art. Können Sie mir bitte dabei helfen? –

+0

Rufen Sie Cäsium.Cartesian3.fromRadians() für die Position? – JasonM1

+0

Nein, ich rufe 'Positionen: Cesium.Cartesian3.fromCartographicArray ([Herkunft.x, Herkunft.y, Richtung.x, Richtung.y]),' tatsächlich 'vonCartographicArray' hier ist mein Fehler? –

Verwandte Themen