【问题标题】:Windows Phone 8 Map control - how to get map boundsWindows Phone 8 地图控件 - 如何获取地图边界
【发布时间】:2012-11-01 19:46:15
【问题描述】:

我正在使用全新的 Windows Phone 8 地图控件,但遇到了一个问题:我需要获取地图边界的 LocationRectangle,即纬度跨度和经度跨度。

使用 Bing 地图控件,您可以:

 LocationRect bounds = map.Bounds;

...但是,这个新控件中似乎没有相关字段。谁能帮忙,还是我需要对各种缩放级别进行逆向工程并根据中心点、缩放级别和像素高度/宽度来计算?

【问题讨论】:

    标签: c# .net xaml windows-phone-8


    【解决方案1】:

    您可以使用视口转换方法,例如:

    GeoCoordinate topLeft = yourMapInstance.ConvertViewportPointToGeoCoordinate(new Point(0, 0));
    GeoCoordinate bottomRight = 
    yourMapInstance.ConvertViewportPointToGeoCoordinate(new Point(mapSize.Width, mapSize.Height));
    
    return LocationRectangle.CreateBoundingRectangle(new[] { topLeft, bottomRight });
    

    也许您可以直接使用 mapControl 实例的 renderSize,但为了确保运行时尺寸正确,我建议您监听“SizeChanged”事件。并且检查 mapsize 值不为 0 或 Infinite 可能也是一个好主意。

    【讨论】:

    • 谢谢 - 这正是我所需要的。值得指出的是,在您的示例中,如果地图处于 3D 模式,topLeft 可能会返回为 NULL - 根据 API 文档,如果指定的视口点位于“地平线之上”,则情况就是如此。因此,您可能应该在创建 LocationRectangle 之前测试 null。
    • 如果您的地图自动调整到页面大小,请注意您应该使用 ActualHeight 和 ActualWidth,否则它们将只是 NaN
    【解决方案2】:

    需要说明的是,如果您已经为 WP7 创建了大型应用程序,您仍然可以在 WP8 中使用原始 Bing 地图(尽管它们已被弃用)。
    您可以在此处找到带有 WP8 的 Bing 地图的库:

    C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Libraries

    这对您来说是一个可行的解决方案,还是您仍想切换到新地图?

    【讨论】:

    • 感谢您指出这一点。我想使用较新的 Map 控件,因为往前走,使用已弃用的控件可能是不明智的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多