首页 > 解决方案 > OpenLayers 以米为单位绘制具有实际宽度的 LineString

问题描述

我尝试使用最新的稳定 OpenLayers 库绘制宽度以米为单位的折线(道路车道),但它没有正确的实际宽度(在谷歌地图图层顶部检查)。这是对我有用的代码片段:

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;
});

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

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

标签: javascriptgisopenlayers

解决方案


WebMercator3857在距离方面是一个糟糕的投影。当您远离赤道时,它会引入巨大的扭曲(这就是为什么格陵兰在地图上看起来如此之大,而实际上它只是一小块土地)。

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

如果您使用另一个保留距离的投影,例如 UTM,则不必执行此除法(或者,如果您这样做,则值为getPointResolution1)


推荐阅读