2011-04-15 105 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/

所以,这是很容易提供您的地图的不同来源。