2016-07-05 873 views
0

我要從點擊的點繪製一組圓形的線條。我的代碼工作正常,但它繪製的圓形遠離點擊的點。有人能幫我弄清楚我的錯誤在哪裏嗎?cesium-在選定的點上繪製一組圓形的線條

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

感謝您的幫助

回答

1

如果想畫一個圓圈,簡單與輪廓繪製ellipse geometry。對於圓,將semiMinorAxis設置爲與semiMajorAxis相同的值,其值爲米。

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

親愛的傑森,感謝您的幫助,但實際上我想繪製這些線條並與那些線條形成一個圓圈,問題是當我在北美點擊時它在太平洋中繪製線條似乎有些如何我的代碼以不正確的方式轉換位置,請問您可以幫我嗎? –

+0

你是否在調用Cesium.Cartesian3.fromRadians()作爲職位? – JasonM1

+0

不,我打電話'位置:Cesium.Cartesian3.fromCartographicArray([origin.x,origin.y, direction.x,direction.y]),'其實'fromCartographicArray'這是我的錯誤嗎? –