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
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? –
Rufen Sie Cäsium.Cartesian3.fromRadians() für die Position? – JasonM1
Nein, ich rufe 'Positionen: Cesium.Cartesian3.fromCartographicArray ([Herkunft.x, Herkunft.y, Richtung.x, Richtung.y]),' tatsächlich 'vonCartographicArray' hier ist mein Fehler? –