在MOUSE_MOVE事件后测量地图上的线条长度

时间:2011-05-12 22:07:59

标签: flex api actionscript mouseevent esri

用户可以使用ESRI Flex Viewer应用程序执行的操作之一是在地图上绘制形状(例如一条线)。用户完成绘制线后,双击鼠标即可触发DrawEvent.DRAW_END事件。触发此操作时,将使用对API函数geometryService.project([geometryObject], spatialReference);的调用来测量该行。

我希望能够在MouseEvent.MOUSE_MOVE事件之后调用此函数,以便动态测量行,而不是仅在DRAW_END事件之后。不幸的是,调度的唯一两个DrawEvent是DrawEvent.DRAW_START和DrawEvent.DRAW_END。这些ESRI类是编译类,因此我无法对它们进行任何更改。

有没有办法将一个eventListener添加到一个MOUSE_MOVE事件中,该事件可以获取正在绘制的行的当前几何图形并调用我的API函数来动态测量?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我通过完全绕开几何服务并构建自己的解决方案找到了解决这个问题的方法。有great site实现Vincenty算法来测量两个坐标之间的距离。这是一种非常精确的近似算法(在Vincenty的地球椭球上的.5mm范围内),并且非常有效,因此可以经常使用(例如在鼠标移动后)。

以下是实现此目的的基本步骤:

  1. 向侦听鼠标单击的地图添加事件侦听器
  2. 点击鼠标后,将屏幕上点击位置的坐标转换为地图坐标并添加监听器以观察鼠标移动事件
  3. 当鼠标移动时,抓住鼠标的坐标(如步骤2所示)并执行Vincenty计算。在地图上创建自定义工具提示,并将Vincenty结果添加到工具提示文本。
  4. 双击后,将结果发送到Geometry服务并从地图中删除工具提示