有没有人了解如何在运行Mango的WP7客户端上的地图上实现可拖动的图钉?我有一个图钉绑定到地图上的地理位置,我希望用户能够将其拖动到地图上并记录其新位置。我见过一些资源,但它们用于非WP7 Bing Maps控件。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
e.GetPosition(element)给出相对于参数传递的元素的位置。此外,使用ViewportPointToLocation转换的点必须相对于地图的位置。因此,您必须执行以下操作:
Pushpin myPin = sender as Pushpin;
Point p = e.GetPosition(**Map**);
g = Map.ViewportPointToLocation(p);
答案 1 :(得分: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(Mine is Locations)中删除我们的旧引脚,并在我们的新坐标处添加一个新图钉:
Point point = new Point(mapLocX, mapLocY);
GeoCoordinate geoCoord = new GeoCoordinate();
geoCoord = myMap.ViewportPointToLocation(point);
Locations.Remove(myPin.Location);
Locations.Add(geoCoord);
希望这有帮助
答案 2 :(得分: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提供旧坐标
答案 3 :(得分: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);