1

この記事では、実際のズーム レベルに応じてマップの合計サイズをピクセル単位で取得する方法について説明します。

式は次のようになります。

マップの幅 = マップの高さ = 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 の正確なマップ サイズをピクセル単位で取得するための保存方法はありますか?

ありがとう!

マース

4

1 に答える 1

1

参照している記事は何年も前に書かれたもので、すべての Bing Maps コントロールのマップ タイル システムの基礎となっています。ただし、これはタイリング システム用であり、必ずしも表示されるマップではありません。UWP コントロールは、画面のピクセル密度に合わせてレンダリング方法を変更し、見栄えがよくなるようにします。これが、GetOffsetFromLocation を使用したときに、予想されるマップ ピクセル サイズの間に不一致が見られる理由です。計算に使用される UWP コントロールの基本ピクセル密度は 128 だと思います。Surface Pro 3 のピクセル密度は 216.33 です。したがって、少し計算して 1.5 のスケーリングを考慮すると、(128*1.5)/216.33*4096 = 3635 であることがわかります。これは、この方法を使用して計算している値に非常に近い値です。これを念頭に置いて、外部スクリーンのピクセル密度は 4096/3274*128 = 160 であると推定します。

はどうかと言うと:

map width = map height = 256 * 2^zoom;

これはダブルスでも機能します。古い Bing Maps Silverlight コントロールでは、2 倍のズーム レベルも可能で、これはピクセル計算を行うときに問題なく機能しました。

于 2016-07-25T17:32:02.073 に答える