javascript - OpenLayers 以米为单位绘制实际宽度的 LineString

标签 javascript gis openlayers

我尝试使用最新的稳定 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;
});
我到处都使用默认投影(web mercator)。
但是我不明白为什么我必须将实际宽度(以米为单位)除以当前分辨率和实际区域内相关的另一个分辨率。
这在任何地方都有解释吗?

最佳答案

Web墨卡托3857是关于距离的不好的投影。当您远离赤道时,它会引入巨大的失真(这就是为什么格陵兰在 map 上看起来如此之大,而实际上它是一块相当小的土地)。
通过将宽度除以 getPointResolution ,您正在有效地纠正这种失真。
如果您使用另一个保留距离的投影,例如 UTM,则不必进行此除法(或者,如果这样做,getPointResolution 的值将为 1)

关于javascript - OpenLayers 以米为单位绘制实际宽度的 LineString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63708645/

相关文章:

javascript - 在文本 block 中查找 URL 的正则表达式 (Javascript)

r - 通过非 sf 列内部连接两个 sf 对象

python - PyQt 5.9 中的 OpenLayers 地理定位

javascript - 动态添加 DIV 但保持容器的宽度和高度固定

javascript - XMLHttpRequest onprogress 不触发异步 = false

javascript - 如何在Openlayers 3中显示ESRI矢量 basemap

检查点(纬度/经度)是否在圆内(中心纬度/经度已知)

javascript - 在 openlayers 2 中强制更新 ScaleLine 控件

javascript - 如何在 OpenLayers 2 中为比例尺插件实现测地线选项?

Javascript 闭包和全局变量