【问题标题】:yOrdering of features in a vector layer?y矢量图层中的特征排序?
【发布时间】:2021-06-04 16:30:56
【问题描述】:

Openlayers 6.5.0 (https://openlayers.org/en/latest/apidoc/module-ol_layer_Vector-VectorLayer.html) 的文档提到了 Vector Layers 的以下属性:

Name Type Description
renderOrder module:ol/render~OrderFunction Render order. Function to be used when sorting features before rendering. By default features are drawn in the order that they are created. Use null to avoid the sort, but get an undefined draw order.

这很不清楚,据我检查,文档和论坛中都没有示例。该代码似乎表明 sort() 函数适用于这些功能。所以,我尝试了以下方法:

...
renderOrder: function(a, b){
  return {b.getGeometry().getLastCoordinate() - a.getGeometry().getLastCoordinate()};
},
...

我已经尝试了 First/Last 和 a/b 的所有 4 种组合,但它并没有改变任何东西。有人知道我们如何在矢量图层中对特征的渲染进行排序,以便它们是 y 排序的吗? (顶部最低 y/lat)

【问题讨论】:

  • 从另一个数组中减去一个 [x, y] 数组不会返回数字。对于 y 坐标,请尝试 b.getGeometry().getLastCoordinate()[1] - a.getGeometry().getLastCoordinate()[1]
  • 非常感谢@Mike!我真的很难理解文档,并且误解了“Last”坐标的含义。我会相应地发布答案。

标签: javascript gis openlayers openlayers-6


【解决方案1】:

感谢上面评论中的@Mike(并且知道我可以使用 getCoordinates() 而不是 getLastCoordinate()),我已经解决了这个问题。由于以下原因,我设法将 yordering 应用于我的功能:

...
renderOrder: function(a, b){
  return {b.getGeometry().getCoordinates()[1] - a.getGeometry().getCoordinate()[1]};
},
...

在@Mike 的评论之后编辑:该特定层包含点特征,因此 getCoordinates()[1] 工作得很好。对于多种几何类型,使用 getFirstCoordinate()[1] 或 getLastCoordinate()[1] 会更安全。

在地图上看起来好多了。我是唯一一个认为这应该是默认行为的人吗? Mapbox GL JS 就是这种情况。

【讨论】:

  • getCoordinates 仅适用于具有单个坐标对的点要素。如果您有多种几何类型,则线串或多边形环中的第一个或最后一个会更安全(或使用几何范围的中心)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多