Openlayers 3 - 分辨率表示为样式函数参数?

4 resolution scale openlayers-3

我试图使用传递到StyleFunction的分辨率来计算我的图像图标的大小.使用测试,在缩放线为100米的缩放处,报告给样式函数的分辨率为2.3886.

我已经截取了刻度线的截图并测量了它的长度(以像素为单位).100米刻度线是68像素,或每像素1.4705米.

1.4705!== 2.3886,那么什么是分辨率单位?API文档没有解释它,并说它只是一个数字,但是如果不了解单位,就很难解决.

这是为了准确地将图标缩放到实际世界长度BTW.

使用这个jsfiddle.net/dz9gL0g0/我发现200米的scaleline报告2.38,但是100m的报告更少(1.19).我从先前的缩放级别获得的分辨率是多少?如果我使用传入的分辨率或直接调用getResolution函数,100m scaleline对我来说总是返回2.83,而不是1.19我觉得它应该是,虽然1.19*84大部分是正确的(比例线在示例中比我的app更大,这给出了我是一个68像素的刻度线,100米).

移动窗口会改变分辨率 - 调整jsfiddle的大小并更改分辨率单位.我的100米刻度线仍然适合我用来测试的地理特征,但现在报告2.38.

tsa*_*ein 6

分辨率是地图单位中1像素的大小.假设你的地图投影EPSG:3857的单位是米.例如,如果当前分辨率为20000 m/px,则表示1 px表示20000 m.

也许这也有助于看一下这个例子.


小智 6

在 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);
Run Code Online (Sandbox Code Playgroud)

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