WP7 перетаскивая метку на карте - PullRequest
0 голосов
/ 29 сентября 2011

Кто-нибудь знает, как реализовать перетаскиваемый значок на карте на клиенте WP7 под управлением Mango?У меня есть кнопка, привязанная к географическому местоположению на карте, и я хочу, чтобы пользователь мог перетащить ее на карту и записать новое местоположение.Я видел некоторые ресурсы, но они предназначены для управления картами Bing не из WP7.Любая помощь будет оценена.

Спасибо!

Ответы [ 4 ]

1 голос
/ 07 октября 2011

e.GetPosition (element) дает позицию относительно элемента, переданного параметру. Кроме того, точка для преобразования с использованием ViewportPointToLocation должна быть относительно положения карты. Итак, вы должны сделать следующее:

    Pushpin myPin = sender as Pushpin;
    Point p = e.GetPosition(**Map**);
    g = Map.ViewportPointToLocation(p);
1 голос
/ 07 февраля 2012

Я знаю, что это поздний ответ, но я работал над аналогичным проектом и использовал похожий подход, поэтому я решил поделиться. Это мой первый пост, настолько открытый для меня, но мой подход, который я использовал, был:

Создайте две глобальные двойные переменные для хранения координат X, Y:

double mapLocX;
double mapLocY;

Установите эти глобальные двойники в положение точки вашей метки в событии DragStarted:

Point point = myMap.LocationToViewportPoint(myPin.Location);
mapLocX = point.X;
mapLocY = point.Y;

В вашем событии dragDelta измените эти переменные так же, как и свою метку:

mapLocX += e.HorizontalChange;
mapLocY += e.VerticalChange;

Теперь в DragCompleted создайте новую точку, которая принимает наши отрендеренные глобальные переменные, и сопоставьте их с геокоординатой, и вот кикер; Удалите нашу старую булавку из коллекции ObservableCollection (Mine is Locations) и добавьте новую булавку для нашей новой координаты:

Point point = new Point(mapLocX, mapLocY);
GeoCoordinate geoCoord = new GeoCoordinate();
geoCoord = myMap.ViewportPointToLocation(point);

Locations.Remove(myPin.Location);
Locations.Add(geoCoord);

Надеюсь, это поможет

0 голосов
/ 05 июля 2012

Вы хотите, чтобы источник вашего элемента пользовательского интерфейса был не пальцем, верно? Попробуйте это:

Point pM = e.GetPosition(**Map**);
Point pE = e.GetPosition(**UIElement**);

Point origin = new Point(pM.X - pE.X, pM.Y - pE.Y);
GeoCoordinate g = Map.ViewportPointToLocation(origin);
0 голосов
/ 30 сентября 2011

Если кому-то интересно, вот решение, которое я придумал:

XAML:

<map:Map x:Name="Map" Height="400" HorizontalAlignment="Left" Margin="6,10,0,0" VerticalAlignment="Top" Width="444" ZoomLevel="19" >
     <map:Map.Mode><map:AerialMode /></map:Map.Mode>
     <map:Pushpin x:Name="Pin" Background="Green" IsHitTestVisible="True" IsEnabled="True">
         <toolkit:GestureService.GestureListener>
              <toolkit:GestureListener DragDelta="Pushpin_OnDragDelta" DragStarted="Pushpin_OnDragStarted" DragCompleted="Pushpin_OnDragCompleted">
              </toolkit:GestureListener>
         </toolkit:GestureService.GestureListener>
     <map:Pushpin.RenderTransform>
          <TranslateTransform></TranslateTransform>
     </map:Pushpin.RenderTransform>
     </map:Pushpin>
</map:Map>

.cs:

private void Pushpin_OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
   Pushpin myPin = sender as Pushpin;
   TranslateTransform transform = myPin.RenderTransform as TranslateTransform;
   transform.X += e.HorizontalChange;
   transform.Y += e.VerticalChange;                                  
}

private void Pushpin_OnDragStarted(object sender, DragStartedGestureEventArgs e)
{
   Map.IsEnabled = false; // prevents the map from dragging w/ pushpin
}

private void Pushpin_OnDragCompleted(object sender, DragCompletedGestureEventArgs e)
{
   Map.IsEnabled = true;           
}

Кто-нибудь есть какие-либо идеи о том, как извлечь гео-координаты нового местоположения канцелярской кнопки ??Я попробовал приведенный ниже код в обработчике событий, и он не дает правильных координат:

 Pushpin myPin = sender as Pushpin;
 Point p = e.GetPosition(myPin);
 g = Map.ViewportPointToLocation(p);

myPin.location дает старые координаты

...