如何使用Openlayers 3计算圆边界的坐标

时间:2017-02-06 17:40:16

标签: distance openlayers-3 geometry point

我有一个给定半径的点特征 - 比方说1000米。我计算了样式函数内部的半径,如:

function isUnique(string) {
    var charMap = {};
    for (var i= 0; i < string.length; i++) {
        if (charMap[string[i]]) {
            return false;
        } else {
            charMap[string[i]] = 1;
        }
    }
    return true;
}

显示的圆圈看起来没问题 - 我通过测量地图上的半径来检查它。

现在我想在它的中心和边界上加上2个标记。我是这样做的:

        var givenRadius = 1000;
        var coords = feature.getGeometry().getCoordinates();
        var projection = map.view.getProjection();
        var resolutionAtCoords = projection.getPointResolution(resolution, coords);

        var featureStyleRadius = Math.round(radius / resolutionAtCoords);

        style.getImage().setRadius(featureStyleRadius);

中心标记位置正确,但边框标记始终位于圆内(半径的~2 / 3,无论半径大小或地图缩放) - 请参见图片。计算有什么问题?

enter image description here

2 个答案:

答案 0 :(得分:0)

根据代码的外观,您使用givenRadiusresolutionAtCoords计算Circle的半径。但在计算边界点时,您要将硬编码givenRadius添加到center。所以每次增加1000米到中心。 相反,您必须将featureStyleRadius添加到center

 center[0] += featureStyleRadius;

答案 1 :(得分:0)

看起来这个问题与EPSG相关的地图失真有关:3857投影。我通过将中心坐标转换为EPSG来解决了这个问题:4326,计算此投影中的边界点位置并转换回EPSG:3857。这样做可以将点精确地放在边框上。