我尝试使用最新的稳定 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/