如何在Bing Maps控件中通过鼠标双击提取GeoPosition并传回UWP应用?
实现Bing Maps双击提取GeoPosition并回传至UWP应用
没问题,我刚好做过类似的UWP+Bing Maps需求,给你一步步拆解实现方法,保证你能快速搞定:
1. 先搞定项目基础配置
首先得确保你的UWP项目里正确引入Bing Maps控件:
- 打开NuGet包管理器,搜索并安装
Microsoft.Maps.MapControl.UWP - 在XAML页面里添加Bing Maps的命名空间,然后定义Map控件并绑定双击事件:
<Page x:Class="YourAppNamespace.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:maps="using:Microsoft.Maps.MapControl"> <Grid> <!-- Bing Maps控件,记得替换成你自己的密钥 --> <maps:MapControl x:Name="MyMap" Credentials="你的Bing Maps开发者密钥" DoubleTapped="MyMap_DoubleTapped" Center="47.6097,-122.3331" <!-- 默认显示西雅图位置 --> ZoomLevel="12"/> </Grid> </Page>
提示:你需要去Bing Maps开发者平台申请自己的免费密钥,替换上面的
Credentials值,否则地图无法正常加载。
2. 处理双击事件,提取地理坐标
接下来在后台C#代码里实现双击事件的逻辑,把屏幕点击位置转换成经纬度:
private void MyMap_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { // 获取双击点在Map控件上的相对屏幕位置 var screenPoint = e.GetPosition(MyMap); // 将屏幕坐标转换为地理坐标(WGS84坐标系,通用的经纬度格式) var geoLocation = MyMap.LocationFromOffset(screenPoint); if (geoLocation != null) { double latitude = geoLocation.Latitude; double longitude = geoLocation.Longitude; // 这里拿到的就是你需要的Lat和Lon了,接下来可以回传给应用的其他部分 PassCoordinatesToApp(latitude, longitude); } } // 示例:把坐标回传给应用的方法,你可以根据自己的需求修改 private void PassCoordinatesToApp(double lat, double lon) { // 方式1:直接显示在UI上(比如页面有个TextBlock叫CoordinateText) // CoordinateText.Text = $"选中坐标:Lat {lat:F6}, Lon {lon:F6}"; // 方式2:通过自定义事件传递给其他组件(适合跨页面/模块的场景) CoordinateSelected?.Invoke(this, new CoordinateArgs(lat, lon)); // 方式3:如果用MVVM,也可以绑定到ViewModel的命令,把坐标作为参数传递 } // 自定义事件,供应用其他部分订阅 public event EventHandler<CoordinateArgs> CoordinateSelected; // 自定义事件参数类,用来传递坐标 public class CoordinateArgs : EventArgs { public double Latitude { get; } public double Longitude { get; } public CoordinateArgs(double lat, double lon) { Latitude = lat; Longitude = lon; } }
3. 一些实用提示
- 如果你的项目用MVVM架构,推荐用
Microsoft.Xaml.Behaviors.Uwp.Managed这个NuGet包,把DoubleTapped事件绑定到ViewModel的命令,这样更符合MVVM的设计规范 - 转换后的经纬度是标准的WGS84格式,不需要额外转换就能直接用于大多数地理服务
- 记得处理
geoLocation为null的情况(极端场景下可能出现,比如点击到地图控件之外的区域)
内容的提问来源于stack exchange,提问作者kdun0508
相关产品推荐
相关产品推荐

