问题描述
我尝试使用最新的稳定的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)