この記事では、実際のズーム レベルに応じてマップの合計サイズをピクセル単位で取得する方法について説明します。
式は次のようになります。
マップの幅 = マップの高さ = 256 * 2^level ピクセル
残念ながら、これはユニバーサル アプリのMapControlでは機能しないようです。まず、ZoomLevel プロパティの型は整数ではなく倍精度です (この記事のサンプルで必要とされています)。しかし、ZoomLevel が 4.0 (int --> 4) の整数の場合、式は機能しません。
ここで、MapControl.GetOffsetFromLocation メソッドを使用して、マップ サイズをピクセル単位で取得しようとしました。
private double GetMapSize()
{
Point pW, pE;
myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{ Longitude = -90, Latitude = 0 }), out pW);
myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{ Longitude = 90, Latitude = 0 }), out pE);
return (pE.X - pW.X) * 2;
}
これは一部のピクセルの不一致で機能しますが、この問題は実際には重要ではありません。
Surface Pro 3 で次の結果が得られました (ZoomLevel は 4.0)。
表面画面 (縮尺 1.5): 3654px
Surface 外部画面 (スケール 1.0): 3274px
これらの結果はいずれも、記事で説明されている 4096px ではありません。結果は正しく、それで作業できます。しかし、私にとっては単なる回避策であり、ZoomLevel が約 13 よりも高い場合、GetOffsetFromLocation メソッドは pE.X と pW.X (-90 と 90) に対して -1 を返します。実際の中心に近い経度では機能します。GetOffsetFromLocation には最大距離があるようです。したがって、ZoomLevel が高い場合は、より近い経度値を使用する必要があります。
それはすべて、実際には明確な解決策ではありません。だから私の質問は: UWP MapControl の正確なマップ サイズをピクセル単位で取得するための保存方法はありますか?
ありがとう!
マース