【问题标题】:OpenLayers draw LineString with real width in metersOpenLayers 以米为单位绘制具有实际宽度的 LineString
【发布时间】:2020-09-02 15:23:07
【问题描述】:

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

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

我在任何地方都使用默认投影(网络墨卡托)。

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

【问题讨论】:

    标签: javascript gis openlayers


    【解决方案1】:

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

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

    如果您使用其他保留距离的投影,例如 UTM,则不必执行此除法(或者,如果您这样做,getPointResolution 的值将为 1)

    【讨论】:

    • 非常感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多