Openlayers 在开放层中标记等高线3.17.1

Openlayers 在开放层中标记等高线3.17.1,openlayers,kml,openlayers-3,Openlayers,Kml,Openlayers 3,我正在从服务器端提供的KML绘制一些等高线。我要做的是为视口边缘附近的每个轮廓添加一个标签,如下图所示: 我目前的方法是绕着地图的每一条边缘走一圈,然后使用forEachFeatureAtPixel来确定是否在[x,y]处找到轮廓/特征。如果找到轮廓,则相对于当前像素添加标签,并添加特征的“hasLabel”属性(并设置为true),以便每个轮廓/特征仅添加一个标签 如果用户更改视口(通过缩放或平移),将删除标签,并重新运行相同的过程以将标签添加到正确的位置 一些客户抱怨在绘制轮廓和添加标签之

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

我目前的方法是绕着地图的每一条边缘走一圈,然后使用forEachFeatureAtPixel来确定是否在[x,y]处找到轮廓/特征。如果找到轮廓,则相对于当前像素添加标签,并添加特征的“hasLabel”属性(并设置为true),以便每个轮廓/特征仅添加一个标签

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

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

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

补充:

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


对于我提供的解决方案,您需要使用
jsts
库。 为此,只需包含该文件。这是最新的版本,老实说,这是我第一次测试它,看起来表现得很棒

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

您可以使用
jsts
lib来实现这一点。运行当前mbr与轮廓的交点,并在交点处放置标签。当然,这意味着您必须包括jsts库。如果你提供你的代码生成轮廓,我将做一个小提琴演示。非常感谢你的提议!我为两组等高线(绿色和蓝色)添加了指向KML源文件的链接。使用JST对这两个集合进行处理确实非常有用。这正是我所需要的。我刚刚完成在解决方案中的实现,它肯定比我的方法更快。非常感谢!