微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法单击多边形顶部的矢量平铺点

如何解决无法单击多边形顶部的矢量平铺点

我制作了自己的矢量切片 .pbf 数据,由多边形、线和点组成。

.pbf 数据的来源来自 Geoserver 中的一组 shapefile,其中每个 shapefile 都已排序,因此点位于顶部:

geoserver layer order

使用 OpenLayers,我对矢量切片进行了样式设置,并遵循了“Vector Tile Info”的示例。不同的是我的是通过单击切换。

问题是我无法点击任何点,即使是精灵图像,如果它完全在多边形内。 可以单击完全位于多边形内的线。 尝试选择一个点时,下面的多边形被选为特征 [0]。

Points Rendered Under Polygons

这个渲染顺序的原因可能是什么?一个点只有一个像素? 可能的补救措施是什么? 我对 JavaScript 和 OpenLayers 很陌生,所以我希望它是天真的东西。 当点被多边形包围时,我需要能够对其进行优先级排序。

解决方法

map.getFeaturesAtPixel() 返回的特征顺序似乎是随机的,与渲染顺序无关。要么检查返回的所有特征,而不仅仅是条目 [0],或者对数组进行排序,使点/多点在排序顺序中低于带有多边形的 LineStrings/MultiLineStrings 最后

function rank(feature) {
  var type = feature.getType();
  if (type.indexOf('Point') > -1) {
    return 1;
  } else if (type.indexOf('LineString') > -1) {
    return 2;
  } else {
    return 3;
  }
}

map.getFeaturesAtPixel(event.pixel).sort(function(a,b) {
  return rank(a) - rank(b);
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?