Openlayers 3画的圆比直线小

Openlayers 3 drawn circle is smaller than the line

我正在画一个圆,里面有一条线显示它的半径,我使用相同的线坐标,但结果我得到一个更小的圆,有什么帮助吗???

 function DrawLine() {
        var lineCoordinates = [[3210202.3139208322, 5944966.311907868], [3075978.8922520624, 6055647.128864803]];
        var line = new ol.geom.LineString(lineCoordinates);
        var feature = new ol.Feature(line);

        var id = guid();
        feature.featureID = id;
        feature.setProperties({
            'id': id,
            'name': typeSelect.value,
            'description': 'Some values'
        })
        source.addFeature(feature);
    };

    function DrawCircle() {
        var sourceProj = map.getView().getProjection();
        var wgs84Sphere = new ol.Sphere(6378137);
        var c1 = ol.proj.transform([3210202.3139208322, 5944966.311907868], sourceProj, 'EPSG:4326');
        var c2 = ol.proj.transform([3075978.8922520624, 6055647.128864803], sourceProj, 'EPSG:4326');
        var distance = wgs84Sphere.haversineDistance(c1, c2);

        var point = new ol.geom.Circle([3210202.3139208322, 5944966.311907868],distance,'XY');
        var feature = new ol.Feature(point);
        console.log(distance);
        var id = guid();
        feature.featureID = id;
        feature.setProperties({
            'id': id,
            'name': typeSelect.value,
            'description': 'Some values'
        })
        source.addFeature(feature);
    };

您将圆的半径设置为两点之间的实际距离,而不是投影距离。由于 ol3 在投影平面上工作,因此许多投影可能不同。

我在 中更深入地介绍了 ol3 中投影半径和实际半径之间的差异。

您的代码看起来很复杂。如果半径只是为了看起来,为什么不沿着这条线做一些简单的事情:

function drawRadius(circle_, direction_){
    context.moveTo(circle_.center_x, circle_.center_y);
    context.lineTo(circle_.center_x + Math.cos(direction_) * circle_.radius, circle_.center_y + Math.sin(direction_) * circle_.radius);
    context.stroke();
}

其中方向可能是圆的旋转弧度:0 到 2*PI, 上下文是 canvasRenderingContext2D.

您的圆生成器可能如下所示:

function getCircleFromPoints(point_a_, point_b_){
    var distance_x=point_b_.x-point_a_.x;
    var distance_y=point_b_.y-point_a_.y;

    var circle={
        center_x:point_a_.x;
        center_y:point_a_.y;
        radius:Math.sqrt(distance_x*distance_x+distance_y*distance_y);
    };

    return circle;
}

这将使您的圆心位于 point_a_,边缘位于 point_b_。它的半径将等于两点之间的距离。

我意识到这很简单JavaScript,但概念保持不变。使用距离公式得到圆的半径等于两点之间的距离,并将圆的中心设置为其中一个点。