見出しに基づいてビューの緯度と経線のコーナーを計算するソリューションはありますか?ビューポートの見出しに基づいて緯度と経度を計算する
見出しが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;
}
ありがとう同等
ViewportPointToLocation
方法があります。このコードはうまくいくようですが、ユーザーがマップキャンバスの上部と下部を移動するときにこのコードの問題が発生しました。 – Startailこのコードは、ユーザがあまりにも遠くに、または遠くにナビゲートしたときの問題を解決します。それがtry/catchのためのものです。地点が地図内にない場合は、85/-85の緯度の限界にスナップします。実際には90/-90ですが、ゼロ除算のため計算がエラーになります。 – rbrundritt
私が得る問題は、catchコードがGetLocationFromOffsetで例外をスローすることです。 Point(x、y)座標が無効な場合はエラーをスローし、bottomRightまたはtopLeftはnullになります。私はtry {} catch {}文の中にこれらのコードの部分を入れてこれを解決しました。これが失敗しても何もしないので、一般的な使用には適していない可能性があります。しかし、私は、ユーザーがキャンバスの上/下のデータを取得するとは思わない。これは、アプリケーションがクラッシュするのを防ぐためです。 – Startail