C# 值不在预期范围GeoboundingBox WinRT内
我尝试在WinRT Universal APP的bing地图上放置2个POI,通常是用户位置和任何其他点,以便用户可以看到两点之间的地图,我有以下代码: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
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);
所以我是对的,我会尝试一下。谢谢你的代码。