javascript - 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;
});
我到处使用默认投影(网络墨卡托)。
但是我不明白为什么我必须将实际宽度(以米为单位)除以当前分辨率和另一个与实际区域相关的分辨率。这在任何地方都有解释吗?
解决方案
WebMercator3857
在距离方面是一个糟糕的投影。当您远离赤道时,它会引入巨大的扭曲(这就是为什么格陵兰在地图上看起来如此之大,而实际上它只是一小块土地)。
通过将宽度除以getPointResolution
,您可以有效地纠正这种失真。
如果您使用另一个保留距离的投影,例如 UTM,则不必执行此除法(或者,如果您这样做,则值为getPointResolution
1)
推荐阅读
- python - 无法连接到 Jupyter Notebook
- android - android分页如何刷新数据?
- c++ - 将向量元素复制到向量对
- python - 尝试用 Python 构建 Web 服务器和客户端程序
- sql - 您如何将 OrderID 添加到此?我无法在所有 OrderID 部分都出现错误的情况下显示它
- android - 在浏览器中打开外部 WebView 链接
- database - 将 flink 流写入关系数据库
- node.js - 什么是 .clientrc 文件?
- scala - event.getCode() 上的 ScalaFX 类型不匹配
- html - 如何在一个页面上添加多个视频?