2016-07-25 45 views
1

This article描述瞭如何根據實際縮放級別以像素爲單位獲取總地圖大小。MapControl地圖大小(像素)

的公式應該是:

地圖寬度=地圖高度= 256 * 2 ^水平像素

不幸的是這似乎並沒有爲MapControl普遍應用的工作。首先,ZoomLevel屬性的類型是double not integer(根據本文示例中的需要)。但是對於整數數字的縮放級別,即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個的結果如下(縮放級別爲4.0):

面屏(規模1.5):3654px

表面外屏(規模1.0):3274px

無這些結果是4096px像文章中所述。結果是正確的,我可以與此合作。但對我來說,這只是一種解決方法,而且如果ZoomLevel高於大約13,則GetOffsetFromLocation方法爲pE.X和pW.X返回-1(對於-90和90)。對於更接近經度的實際中心而言。看來GetOffsetFromLocation具有最大的距離。所以我需要使用更高的ZoomLevel時使用更接近的經度值。

這一切都不是一個明確的解決方案。所以我的問題是:有沒有一種保存方法來獲取UWP MapControl的精確地圖大小(以像素爲單位)?

謝謝!

馬斯

回答

1

你引用的文章年前寫的,是所有的Bing地圖控件的基礎地圖平鋪系統。但是,這是針對平鋪系統的,並不一定是顯示的地圖。 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