Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 值不在预期范围GeoboundingBox WinRT内_C#_Windows Runtime_Windows Phone_Bing Maps - Fatal编程技术网

C# 值不在预期范围GeoboundingBox WinRT内

C# 值不在预期范围GeoboundingBox WinRT内,c#,windows-runtime,windows-phone,bing-maps,C#,Windows Runtime,Windows Phone,Bing Maps,我尝试在WinRT Universal APP的bing地图上放置2个POI,通常是用户位置和任何其他点,以便用户可以看到两点之间的地图,我有以下代码: private void centerMap(Geoposition pos, MapPoi pos2) { try { #if WINDOWS_APP //TODO PC Maps #elif WINDOWS_PHONE_APP GeoboundingBox g

我尝试在WinRT Universal APP的bing地图上放置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,这里是堆栈跟踪:

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获得的用户位置,另一个是近距离位置

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

我发布的代码只是抛出了这个异常,但是,如果我只对pos纬度执行+1,它就会工作,而且似乎做得很好

如果我先添加pos2(作为northwestCorner),它不会抛出异常,它会缩小到最大值,这样我几乎可以看到整个地图(这显然是错误的)

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

EDIT:正是这样,工作代码:

 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());
    }
    }
很抱歉我的英语不好,还有这个bing地图的问题,我想这是一个很糟糕的文档,因为它是更新的API,很难找到你需要的API


提前感谢。

您没有提供正确的坐标。正如您所看到的,第一个坐标必须是区域的左上角(西北坐标),第二个坐标必须是右下角(东南坐标)。您的
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);

所以我是对的,我会尝试一下。谢谢你的代码。