当前位置: 首页 > 知识库问答 >
问题:

值不在GeoboundingBox WinRT的预期范围内

鲁成天
2023-03-14

我试图在WinRT Universal APP的必应地图上拟合2个POI,通常是用户位置和任何其他点,这样用户就可以看到两点之间的地图,我有以下代码:

private void centerMap(Geoposition pos, MapPoi pos2)
    {
        try { 
    #if WINDOWS_APP
            //TODO PC Maps
    #elif WINDOWS_PHONE_APP
        GeoboundingBox geoboundingBox = new Windows.Devices.Geolocation.GeoboundingBox(
        new BasicGeoposition() { Latitude = pos.Coordinate.Latitude, Longitude = pos.Coordinate.Longitude },
        new BasicGeoposition() { Latitude = pos2.lat, Longitude = pos2.lng });
        map1._map.TrySetViewBoundsAsync(geoboundingBox,null,MapAnimationKind.Linear);
    #endif
    }catch(Exception ex)
    {
        Debug.WriteLine(ex.ToString());
    }
    }

首先,我需要了解一些我做得不好的东西,我正在获取GeoboundingBox构造函数上的System.ArgumentException,这里是stack Trace:

A first chance exception of type 'System.ArgumentException' occurred in EspartAPP.WindowsPhone.exe
System.ArgumentException: Value does not fall within the expected range.
   at Windows.Devices.Geolocation.GeoboundingBox..ctor(BasicGeoposition northwestCorner, BasicGeoposition southeastCorner)
   at EspartAPP.Modulos.Modulo_Mapa.centerMap(Geoposition pos, MapPoi pos2)

下面是用于测试的坐标:

pos var: Lat 40.4564664510315 lng -3.65939843190291
pos2 var: Lat 40.4579103 lngs -3.6532357

两个坐标都是正确的,一个是刚刚从gps得到的用户位置,另一个是一个接近的位置。

我不明白什么会变坏,一定有什么我需要知道的。

一定有一些规则我忽略了,也许我要计算哪个坐标应该在西北位置?

编辑:正是这样,工作代码:

 private void centerMap(Geoposition pos, MapPoi pos2)
    {
        try {
            BasicGeoposition nw = new BasicGeoposition();
            nw.Latitude = Math.Max(pos.Coordinate.Latitude, pos2.lat);
            nw.Longitude = Math.Min(pos.Coordinate.Longitude, pos2.lng);
            BasicGeoposition se = new BasicGeoposition();
            se.Latitude = Math.Min(pos.Coordinate.Latitude, pos2.lat);
            se.Longitude = Math.Max(pos.Coordinate.Longitude, pos2.lng);


    #if WINDOWS_APP
            //TODO PC Maps
    #elif WINDOWS_PHONE_APP
        GeoboundingBox geoboundingBox = new Windows.Devices.Geolocation.GeoboundingBox(nw,se);
        map1._map.TrySetViewBoundsAsync(geoboundingBox,null,MapAnimationKind.Bow);
    #endif
    }catch(Exception ex)
    {
        Debug.WriteLine(ex.ToString());
    }
    }

很抱歉我的英语不好和这个必应地图的问题,这是真的很差的文件,我预计,因为它是更新的API,它是一个混乱的找到你需要的API你正在工作。

提前道谢。

共有1个答案

璩正志
2023-03-14

您没有提供正确的坐标。正如您可以在这里读到的,第一个坐标必须是区域的左上角(西北坐标),第二个必须是右下角(东南坐标)。您的POS是左下角,POS2是右上角。

你得到的正确坐标如下所示:

var nw = new BasicGeoposition();
nw.Latitude = Max(pos.Coordinate.Latitude, pos2.lat);
nw.Longitude = Min(pos.Coordinate.Longitude, pos2.lng);
var se = new BasicGeoposition();
se.Latitude = Min(pos.Coordinate.Latitude, pos2.lat);
se.Longitude = Max(pos.Coordinate.Longitude, pos2.lng);
 类似资料:
  • 我的Windows8应用程序有一个持续存在的问题。

  • 我必须用C#做一个MetroApp前端。 我有一个OverviewPage,在那里我得到了一个并预览了详细页。我在下面的线程中用屏幕截图对其进行了更详细的描述:WinRT XamlControl预览图像 如果你需要更多的信息-尽管问。

  • 当使用命名空间windows.services.store中的storeContext.RequestPurchaseAsync()从WPF桌面应用程序执行应用内购买时,我们会得到一个StorePurchaseResult并带有ExtendedError消息“Value doon not fall not wespected range”。 我们的应用程序已发布,可从Windows商店下载。 它是

  • 我已经从MSDN下载了Toast通知的示例应用程序。也没用。我写了自己的示例: 而且它在Windows8.1上也不起作用。但它在Windows10上运行得非常好。 当我尝试显示通知时,会触发失败事件。 args.errorCode如下所示:

  • 问题内容: 我对Angular.js范围有疑问。 首先,我是Angular的新手,我已经阅读了范围文档,并尽我所能来理解它。我觉得我的问题与此类似: ng-show不符合预期的绑定 但是,我的示例本质上更简单,我仍然不明白我所缺少的内容。 我的html非常简单,我有一个包装所有内容的控制器: 在其中,我有几个部分: 如您所见,我打算在将其应用于控制器时显示该部分。 我的应用程序逻辑如下: sect

  • 问题内容: 我有一组电子邮件地址和将这些电子邮件地址添加到表中的日期的数据集。电子邮件地址在不同的日期可以有多个条目。例如,如果我有下面的数据集。我希望获得上述日期和3天前之间不同电子邮件的日期和计数。 如果我们使用3的日期周期,结果集将看起来像这样 我可以使用下面的查询来获得日期范围的不同计数,但希望按天获得一个范围的计数,因此我不必手动更新数百个日期的范围。 感谢您的帮助。 问题答案: 测试用