2011-09-29 102 views
0

有沒有人有任何洞察到如何在運行芒果的WP7客戶端上的地圖上實現可拖動圖釘?我有一個圖釘綁定到地圖上的地理位置,我希望用戶能夠將其拖動到地圖上並記錄它的新位置。我已經看到了一些資源,但它們是針對非WP7 Bing Maps控件的。任何幫助,將不勝感激。WP7在地圖上拖動圖釘

謝謝!

回答

1

e.GetPosition(元)給出相對於元素的位置傳遞參數。另外,使用ViewportPointToLocation進行轉換的點必須與地圖的位置相關。所以,你必須做到以下幾點:

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

如果有人好奇,這是我想出瞭解決方案:

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給老座標

1

我知道這是一個遲到的反應,但我工作的一個類似的項目,並使用類似的辦法,所以我想我會分享。這是我的第一篇文章與我,但我的方法,我曾經是那麼幹淨:

創建兩個全局雙變量來保存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中刪除我們的舊針(我的是位置),並在新的圖釘在我們新增加的座標:

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

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

希望這有助於

0

你想擁有你的UI元素不是你的手指的起源對?試試這個:

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);