2011-04-15 140 views
-1

我正在開發一個在Silverlight上使用Bing地圖的應用程序。 最近,我被問到我需要多少時間切換到或支持Google地圖。從Bing地圖切換到Google地圖

我知道Mapstraction可能是一種方法。但是這種遷移有多困難/耗時?我沒有找到任何這方面的證言。

有什麼選擇?理想情況下,應用程序應該支持這兩個地圖。

稍後編輯:當然,該解決方案應該是跨平臺和跨瀏覽器:)

+0

這可能取決於您使用的Bing地圖版本。我發現版本6.3(AJAX)與Google的API非常相似,但版本7.0似乎有很大不同。 – 2011-04-15 19:52:18

+0

我從來沒有聽說過Mapstraction直到現在,但它看起來很有希望用於獨立於實現的地圖。 – 2011-04-15 19:55:44

+0

@Matt是的,看起來很有希望,所以這就是爲什麼我想知道是否有人用這個工具完成了一個項目。或其他工具。基本上抽象你正在使用的地圖是一個好主意。但我需要知道危險,缺點,爲什麼不... ... – Adi 2011-04-15 20:04:16

回答

0

Silverlight的Bing地圖控件支持層,其中每一層由TileSource描述的概念:

<map:Map Name="map" 
    CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" ScaleVisibility="Collapsed" 
    ZoomLevel="2" 
    CredentialsProvider="-- YOUR API KEY GOES HERE!!! ---"> 
    <map:Map.Mode> 
     <mapCore:MercatorMode/> 
    </map:Map.Mode> 
    <map:MapTileLayer> 
     <map:MapTileLayer.TileSources> 
      <local:GoogleTile/> 
     </map:MapTileLayer.TileSources> 
    </map:MapTileLayer> 
</map:Map> 

TileSource是一個簡單的類,它詳細說明了源圖像的URL格式。例如,可以使用以下TileSource呈現Google星空地圖在Bing地圖控制:

public class GoogleTile : Microsoft.Phone.Controls.Maps.TileSource 
{ 
    public GoogleTile() 
    { 
     UriFormat = @"http://mw1.google.com/mw-planetary/sky/skytiles_v1/{0}_{1}_{2}.jpg"; 
    } 

    public override Uri GetUri(int x, int y, int zoomLevel) 
    { 
     if (zoomLevel > 0) 
     { 
      var Url = string.Format(UriFormat, x, y, zoomLevel); 
      return new Uri(Url); 
     } 
     return null; 
    } 
} 

請參見下面的博客文章:

http://www.scottlogic.co.uk/blog/colin/2011/02/google-sky-on-windows-phone-7/

所以,這是很容易提供您的地圖的不同來源。