【问题标题】:openlayers vector feature get pixel positionopenlayers 矢量特征获取像素位置
【发布时间】:2014-06-13 08:09:41
【问题描述】:

获取 OpenLayers.Feature.Vector 像素坐标的最快方法是什么?我的意思是,我想获取像素(上、左)相对于已绘制特征的地图容器的位置,如果可能的话,由于性能改进而无需计算。

感谢和问候,拉斐尔。

【问题讨论】:

  • 您使用的是版本 2 还是版本 3?
  • 你的意思是边界框的左上角像素坐标吗?
  • 另外,你想如何通过 SelectFeature 控件在 drawend 事件上创建时或其他方式获取它?
  • 我正在使用 OLv2,出于性能考虑,我想访问绘制的 VectorFeature 的 (cx, cy) 像素位置。我正在使用 SVG。

标签: openlayers


【解决方案1】:

在ol3中:

var geometry = feature.getGeometry();
var coordinate = geometry.getCoordinates();
var pixel = map.getPixelFromCoordinate(coordinate);

在OL2中:

var geometry = feature.geometry;
var coordinate = new OpenLayers.LonLat(geometry.x, geometry.y);
var pixel = map.getPixelFromLonLat(coordinate);

一些先决条件:特征必须是点,否则geometry.getCoordinates() 返回一个坐标数组,您需要选择一个。另一个应该很明显,但我还是会提到它:变量 map 分别是 ol.Map 或 OpenLayers.Map 的一个实例

【讨论】:

  • 如果他想得到左上角,你也可以这样做, var bounds=geom.getBounds() 然后从边界对象中得到左上角。
  • 我不知道如何使用 bounds.left 和 bounds.top 因为它在缩放更改时不会改变。在最坏的情况下,我必须抛出一组 3000-5000 个特征。所以我一直在寻找访问 (cx, cy) 的最快方式。
  • 创建或修改多边形时,您始终可以将其存储为多边形的属性,然后查找,而不是重新计算。
  • @JohnBarça 这不是一个坏主意,但您需要考虑访问这些坐标的频率。与仅在需要时计算坐标相比,您的提议可能会导致计算坐标的频率更高。只是说它是特定于用例的。
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多