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

时间:2015-05-21 07:05:50

标签: scale resolution 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更大,这给出了100米的68像素刻度线。

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

3 个答案:

答案 0 :(得分:5)

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

也许这也有助于查看此example

答案 1 :(得分:3)

在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分辨率,这取决于纬度。我的平铺地图源是否适当地缩放到投影仍有待观察,但这意味着我的每米像素现在在误差范围内,正确。

答案 2 :(得分:1)

AFAIK分辨率以米为单位。以下是我的应用中的一个功能,其样式为ol.style.Circle,半径为3 / resolution

http://i.stack.imgur.com/Vf6TB.jpg

您的刻度线是否正常工作?使用非标准投影我必须使用ol.proj.addProjection(...)ol.proj.addCoordinateTransforms(...),只需通过proj4.defs(...)定义投影即可使其正常工作。