Openlayers 3 - 分辨率作为样式函数参数代表什么?

Openlayers 3 - What does resolution represent as a style function parameter?

我正在尝试使用传递给 StyleFunction 的分辨率来计算图像图标的大小。使用测试,在比例线为 100m 的缩放比例下,报告给样式函数的分辨率为 2.3886。

我截取了比例线的屏幕截图并测量了它的长度(以像素为单位)。 100m 的比例线是 68 个像素,或每个像素 1.4705 米。

1.4705 !== 2.3886,那么分辨率单位是多少? API 文档没有解释它并说它只是一个数字,但是如果没有单位的概念就很难计算出来。

这是为了准确地将图标缩放到真实世界的长度顺便说一句。

使用此 jsfiddle。net/dz9gL0g0/ 我发现 200m 比例线报告 2.38,但 100m returns 更少 (1.19)。我从以前的缩放级别获得的分辨率是什么?如果我使用传入的分辨率或直接调用 getResolution 函数,100m 比例线对我来说总是 returns 2.83,而不是我认为应该的 1.19,尽管 1.19 * 84 大部分是正确的(示例中的比例线比我的大)应用程序,它为我提供了 100m 的 68 像素比例线)。

移动 window 改变分辨率 - 调整 jsfiddle 的大小和分辨率单位改变。我的 100m 比例线仍然适合我用来测试的地理特征,但现在报告 2.38。

据我所知,分辨率是以每像素米为单位的。这是我的应用程序中的一个功能,其样式为 ol.style.Circle,半径为 3 / resolution:

你的刻度线工作正常吗?使用非标准投影我不得不使用 ol.proj.addProjection(...)ol.proj.addCoordinateTransforms(...) 除了通过 proj4.defs(...) 定义投影以使其工作之外。

分辨率是地图单位中 1 个像素的大小。假设您的地图投影是 EPSG:3857,其单位是米。例如当前分辨率为20000m/px,表示1px代表20000m

也许看看这个

在 github (https://github.com/openlayers/ol3/issues/3770) 发布错误请求后,建议使用 ol.proj.Projection.getPointResolution() 收集正确的信息投影的分辨率(我假设它在 运行 时间被传递到样式函数 - 假设,嗯?)。

var view = map.getView();
var coords = view.getCenter();
var resolution = view.getResolution();    
var projection = view.getProjection();
var resolutionAtCoords = projection.getPointResolution(resolution, coords);

这会导致返回更接近 1.50XXXX 的分辨率,具体取决于纬度。我的平铺地图源是否根据投影适当缩放还有待观察,但这意味着我的每米像素现在在误差范围内,正确。