2016-07-25 6 views
1

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

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

マップ幅=マップの高さ= 256 * 2 ^レベル画素

残念ながら、これはユニバーサルアプリのためMapControlのために動作するようには思えません。最初に、ZoomLevelプロパティはdouble型ではありません(記事のサンプルで必要です)。しかし、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; 
    } 

これは、いくつかのピクセルの食い違いで動作しますが、この問題は実際には重要ではありませんが。

は、私は私の表面に乗るプロ3次の結果(ZoomLevelが4.0である):

表面スクリーン(スケール1.5):3654px

表面外部スクリーン(スケール1.0):3274px

なしこれらの結果のうち、記事で説明したように4096ピクセルです。結果は正しいですし、私はそれを使用することができます。しかし、私にとっては単なる回避策であり、ZoomLevelが約13より大きい場合、GetOffsetFromLocationメソッドはpE.XとpW.X(-90と90)に対して-1を返します。実際の中心に近いほど、それは機能します。 GetOffsetFromLocationには最大距離があるようです。だから私は、より高いZoomLevelを持つときに、より近い経度値を使用する必要があります。

これはすべて実際には明らかな解決策ではありません。だから私の質問は:UWP MapControlの正確なマップサイズをピクセル単位で取得する保存方法はありますか?

ありがとうございました!

マース

答えて

1

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

これはあまりにもダブルスで動作します
map width = map height = 256 * 2^zoom; 

。古いBing MapsのSilverlightコントロールでは、倍精度ズームも可能でした。これは、ピクセル計算を行うときにうまくいきました。

+0

私はそれを少し周りに演奏します。ありがとう! いいえ、私の画面のピクセル密度は91です。 Windows.Graphics.Display.DisplayInformation.GetForCurrentView()から: サーフェス画面 - > LogicalDpi:144 | RawDpi:216 |スケール:1.5 外部画面 - > LogicalDpi:96 | RawDpi:91 |スケール:1.0 – Maas

関連する問題