2

用户可以使用 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 函数进行动态测量?

提前致谢。

4

1 回答 1

0

通过完全绕过几何服务并构建自己的解决方案,我找到了解决此问题的方法。有一个很棒的网站实现了 Vincenty 算法来测量两个坐标之间的距离。这是一个非常精确的近似算法(在文森蒂的地球椭球内 0.5 毫米以内),并且非常有效,因此可以经常使用(例如在鼠标移动之后)。

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

  1. 向地图添加事件侦听器以侦听鼠标单击
  2. 单击鼠标后,将屏幕上单击位置的坐标转换为地图坐标并添加侦听器以监视鼠标移动事件
  3. 当鼠标移动时,抓取鼠标的坐标(如步骤 2)并执行 Vincenty 计算。在地图上创建自定义工具提示并将 Vincenty 结果添加到工具提示文本中。
  4. 双击后,将结果发送到几何服务并从地图中删除工具提示
于 2011-05-19T22:06:47.377 回答