2016-07-05 878 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'这是我的错误吗? –