You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:33:55