【发布时间】:2016-07-26 16:28:14
【问题描述】:
我正在从服务器端提供的 KML 中绘制一些轮廓。我想做的是为靠近视口边缘的每个轮廓添加一个标签,如下图所示:
我目前的方法是绕过地图的每个边缘并使用 forEachFeatureAtPixel 来确定是否在 [x, y] 处找到轮廓/特征。如果找到轮廓,则相对于当前像素添加标签,并添加特征的“hasLabel”属性(并设置为 true),以便每个轮廓/特征仅添加一个标签。
如果用户更改视口(通过缩放或平移),标签将被移除并重新运行相同的过程以将标签添加到正确的位置。
一些客户抱怨在绘制轮廓和添加标签之间存在明显延迟(约 10 秒) - 我在我的开发机器上没有观察到这一点,但它的规格相当高。
我的问题是,有没有更快的方法来计算标签的位置? (一些内置的 OpenLayers 函数可能会列出超出当前视图的所有功能?)
加法:
我已经在以下位置提供了两组轮廓的 KML 源:
https://lqsts.blob.core.windows.net/temp/DayContours.kml https://lqsts.blob.core.windows.net/temp/MinuteContours.kml
【问题讨论】:
-
您可以使用
jstslib 执行此操作。运行当前 mbr 与轮廓的交集,并在交点处放置标签。当然,这意味着您必须包含 jsts 库。如果您提供生成轮廓的代码,我将制作一个小提琴来演示。 -
非常感谢您的提议!我为两组轮廓(绿色和蓝色)添加了指向 KML 源文件的链接。使用 JSTS 对任一组的小提琴确实非常有帮助。
标签: openlayers kml openlayers-3