在开放层中标记轮廓 3.17.1

Labeling contours in open layers 3.17.1

我正在绘制服务器端提供的 KML 中的一些等高线。我想做的是为视口边缘附近的每个轮廓添加一个标签,如下图所示:

我目前的方法是绕过地图的每个边缘并使用 forEachFeatureAtPixel 来确定是否在 [x, y] 处找到 contour/feature。如果找到轮廓,则相对于当前像素添加标签,并添加特征的 "hasLabel" 属性(并设置为 true),因此每个 [= 仅添加一个标签32=].

如果用户更改视口(通过缩放或平移),标签将被删除并重新运行相同的过程以将标签添加到正确的位置。

一些客户抱怨在绘制轮廓和添加标签之间存在明显的延迟(~10 秒)——我在我的开发机器上没有观察到这一点,但它的规格相当高。

我的问题是,有没有更快的方法来计算标签的位置? (一些内置的 OpenLayers 函数可能会列出超出当前视图的所有功能?)

加法:

我已经在以下位置提供了两组等高线的 KML 源:

https://lqsts.blob.core.windows.net/temp/DayContours.kml https://lqsts.blob.core.windows.net/temp/MinuteContours.kml

我提供的解决方案需要使用jsts库。 为此,只需包含 jsts.js 文件。这是最新版本,老实说,这是我第一次测试它,而且似乎表现不错。

这是你的 fiddle 它不是最终的,但大部分工作已经完成,因此您可以测试它是否比您已有的解决方案更快。