2

ユーザーが ESRI Flex Viewer アプリケーションを使用して実行できる操作の 1 つは、マップ上に形状 (線など) を描画することです。ユーザーが線の描画を終了すると、マウスをダブルクリックして DrawEvent.DRAW_END イベントを発生させます。これが起動されると、ラインは API 関数の呼び出しを使用して測定されますgeometryService.project([geometryObject], spatialReference);

DRAW_END イベントの後だけでなく、その場で線を測定するために、MouseEvent.MOUSE_MOVE イベントの後にこの関数を呼び出せるようにしたいと考えています。残念ながら、ディスパッチされる DrawEvent は、DrawEvent.DRAW_START と DrawEvent.DRAW_END の 2 つだけです。これらの ESRI クラスはコンパイル済みクラスであるため、変更を加えることはできません。

MOUSE_MOVE イベントに eventListener を追加して、描画されている線の現在のジオメトリを取得し、API 関数を呼び出してその場で測定する方法はありますか?

前もって感謝します。

4

1 に答える 1

0

ジオメトリ サービスを完全に回避し、独自のソリューションを構築することで、この問題の解決策を見つけました。2 つの座標間の距離を測定するための Vincenty アルゴリズムを実装している優れたサイトがあります。これは非常に正確な近似アルゴリズム (Vincenty の地球の楕円体で 0.5 mm 以内) であり、頻繁に使用できるように (マウスが動いた後など)、非常に効率的であることを意図しています。

これを実装するための基本的な手順は次のとおりです。

  1. マウス クリックをリッスンするイベント リスナーをマップに追加します。
  2. マウスがクリックされたら、画面上のクリック位置の座標をマップ座標に変換し、マウス移動イベントを監視するリスナーを追加します
  3. マウスが動いたら、マウスの座標を取得し (手順 2 と同様)、Vincenty 計算を実行します。マップ上にカスタム ツールチップを作成し、Vincenty の結果をツールチップ テキストに追加します。
  4. ダブルクリックすると、結果が Geometry サービスに送信され、マップからツールチップが削除されます
于 2011-05-19T22:06:47.377 に答える