有沒有人有基於標題計算視圖的緯度和經度角的解決方案?根據視口中的標題計算經度和緯度
我有一個函數可以在標題爲0的情況下計算視圖的LatLng角點。但是我希望找到一種方法來計算基於新標題的角點,例如用戶旋轉地圖。
我現在用代碼= 0來做到這一點的代碼是這樣的。
public GeoboundingBox GetBounds(MapControl map)
{
if(map.Center.Position.Latitude == 0) { return default(GeoboundingBox); }
/*
* resolution m/px = 15653.04 m/px * Cos(LatInRad)/2^zoomLevel
* 111325 m/deg
*/
double latInRad = Math.Cos(map.Center.Position.Latitude * Math.PI/180);
double lngInRad = Math.Cos(map.Center.Position.Longitude * Math.PI/180);
double degreePerPixel = (156543.04 * latInRad * lngInRad)/(111325 * Math.Pow(2, map.ZoomLevel));
double mHalfWidthInDegrees = map.ActualWidth * degreePerPixel/0.89;
double mHalfHeightInDegrees = map.ActualHeight * degreePerPixel/1.65;
double mNorth = map.Center.Position.Latitude + mHalfHeightInDegrees;
double mWest = map.Center.Position.Longitude - mHalfWidthInDegrees;
double mSouth = map.Center.Position.Latitude - mHalfHeightInDegrees;
double mEast = map.Center.Position.Longitude + mHalfWidthInDegrees;
GeoboundingBox mBounds = new GeoboundingBox(
new BasicGeoposition()
{
Latitude = mNorth,
Longitude = mWest
},
new BasicGeoposition()
{
Latitude = mSouth,
Longitude = mEast
});
return mBounds;
}
謝謝。這段代碼看起來效果最好,但是當用戶在地圖畫布的頂部和底部之外導航時,我遇到了一些與此代碼有關的問題。 – Startail
這段代碼解決了用戶導航過度或過低的問題。這就是嘗試/捕獲的目的。如果一個點不在地圖內,它會捕捉到85/-85的緯度限制。實際上它是90/-90,但是由於除以零而計算出錯。 – rbrundritt
我得到的問題是catch代碼拋出GetLocationFromOffset異常。如果Point(x,y)座標無效,則會拋出錯誤,bottomRight或topLeft將爲空。我已經解決了這個問題,將代碼的這些部分放在try {} catch {}語句中。這可能不適合一般用途,因爲如果它們失敗,我什麼也不做。但我不希望我的用戶在畫布的頂部/底部獲取任何數據。這只是爲了防止應用程序崩潰。 – Startail