OpenLayers使用以米为单位的实际宽度绘制LineString

问题描述

我尝试使用最新的稳定的OpenLayers库绘制宽度为米的polyLine(行车线),但是它没有正确的实际宽度(已在Google Maps图层顶部选中)。 这是对我有用的代码片段:

polyLineFeature.setStyle((feature,resolution) => {
    const linestring = feature.getGeometry();
    const linestyles = [
        new Style({
            stroke: new stroke({
                width:
                    laneWidth /
                    resolution /
                    getPointResolution("epsg:3857",1,linestring.getCoordinateAt(0.5)),lineCap: "square",}),];
    return linestyles;
});

我到处都使用认投影(网络墨卡托)。

但是我不明白为什么我必须将实际宽度(以米为单位)除以当前分辨率以及与实际区域相关的另一个分辨率。 这在任何地方都有解释吗?

解决方法

WebMercator 3857对于距离而言是一个不好的预测。当您离开赤道时,会带来巨大的失真(这就是为什么格陵兰在地图上看起来如此之大,而实际上却是一块很小的土地)的原因。

通过将宽度除以getPointResolution,可以有效地纠正这种失真。

如果您使用的是保留距离的另一个投影(例如UTM),则无需进行此除法(或者,如果这样做,getPointResolution的值将为1)