Как отобразить информацию о функции на карте MouseMove событие без каких-либо миганий? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь показать выбранную информацию о функции во всплывающем окне, используя функцию API ShowCalloutAt для события mousemove. используя код ниже:

public class TestMouseMove
{

  public TestMouseMove(MapView mapView)
  {
    mapView.MouseMove+=MouseMove_Event;
  }
  private void MouseMove_Event(object sender, MouseEventArgs e)
  {

    var screenPoint = new MapPoint (e.Location.X, e.Location.Y, 
    EsriMapView.SpatialReference);
    var mapPoint = (MapPoint)GeometryEngine.Project (screenPoint, SpatialReferences.Wgs84);

    Feature selectedFeature=null;
    //I have written logic to Filter and take the single feature of top layer under mouse pointer
    selectedFeature=GetFeatureUnderMousePointer();

    //Now I am calling callout at the selected point using below code           
    CalloutDefinition myCalloutDefinition = new CalloutDefinition("Testing message");
    // Display the callout
    MyMapView.ShowCalloutAt(mapPoint , myCalloutDefinition);
 }
 private GetFeatureUnderMousePointer()
 {
  //Logic to filter and ge feature under mouse pointer
 }
}

Но, если я перемещу указатель мыши внутри многоугольника, всплывающее окно ShowCAllout появляется много раз при перемещении мыши. В результате всплывающее окно выглядит так, как будто оно мигает. Итак, есть ли лучший способ реализовать что-то вроде события mousemovestop?

Или приветствуется любое предложение по решению этой проблемы.

Заранее спасибо.

1 Ответ

1 голос
/ 30 апреля 2019

Во-первых, вы должны быть ОЧЕНЬ осторожны с этим при каждом перемещении мыши. Выполнение хит-теста при каждом движении мыши сильно ударит по процессору, и вы не сможете справиться с очень частыми движениями мыши. Я бы порекомендовал вам не выполнять хит-тест, если он уже находится в процессе, и после его завершения вы выполняете любое последнее событие перемещения мыши (поскольку промежуточные события больше не важны). Вам также следует избегать идентификации, если MapView.IsNavigating имеет значение true (нет необходимости выполнять идентификацию во время перемещения карты). В общем, мы действительно рекомендуем выполнять их только по щелчку, а не по движению мыши (в зависимости от службы это могут быть довольно медленные / длительные операции).

Теперь к вашему конкретному вопросу, если вы действительно хотите сделать это при перемещении мыши, я бы посоветовал вам показывать новую выноску, только если возвращаемая функция - это другая функция (используйте идентификатор объекта, чтобы определить, является ли он тем же самым). или нет). Таким образом, вы только покажете его, когда функция вернется, и закроете выноску, если функция не вернется.

...