我有一个给定半径的点特征 - 比方说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,无论半径大小或地图缩放) - 请参见图片。计算有什么问题?
答案 0 :(得分:0)
根据代码的外观,您使用givenRadius
和resolutionAtCoords
计算Circle的半径。但在计算边界点时,您要将硬编码givenRadius
添加到center
。所以每次增加1000米到中心。
相反,您必须将featureStyleRadius
添加到center
。
center[0] += featureStyleRadius;
答案 1 :(得分:0)
看起来这个问题与EPSG相关的地图失真有关:3857投影。我通过将中心坐标转换为EPSG来解决了这个问题:4326,计算此投影中的边界点位置并转换回EPSG:3857。这样做可以将点精确地放在边框上。