Измерьте длину линии на карте после события MOUSE_MOVE - PullRequest
2 голосов
/ 13 мая 2011

Одно из действий, которые пользователь может выполнить с помощью приложения 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 голосов
/ 20 мая 2011

Я нашел решение этой проблемы, обойдя сервис геометрии и построив собственное решение. Существует отличный сайт , который реализует алгоритм Винсенти для измерения расстояния между двумя координатами. Это очень точный алгоритм аппроксимации (в пределах 0,5 мм от земного эллипсоида Винсенти), и он должен быть очень эффективным, чтобы его можно было часто использовать (например, после движения мыши).

Вот основные шаги для реализации этого:

  1. Добавить на карту прослушиватель событий, который прослушивает щелчок мыши
  2. После щелчка мыши преобразуйте координаты местоположения щелчка на экране, чтобы отобразить координаты, и добавьте слушателя, который будет наблюдать за событием перемещения мыши
  3. Когда мышь движется, возьмите координаты мыши (как в шаге 2) и выполните вычисление Винсенти. Создайте пользовательскую подсказку на карте и добавьте результат Винсенти в текст подсказки.
  4. При двойном щелчке отправьте результат в сервис Geometry и удалите всплывающую подсказку с карты
...