从Bing地图切换到Google地图

时间:2011-04-15 19:50:26

标签: silverlight google-maps bing-maps

我正在使用Silverlight上的Bing地图开发一个应用程序。 最近,我被问到需要多长时间才能切换到或支持谷歌地图。

我知道Mapstraction可能是一种方法。但这种迁移有多困难/耗时?我没有找到任何关于此的见证。

还有其他选择吗?理想情况下,应用程序应该支持两个映射。

后来编辑:当然,解决方案应该是跨平台和跨浏览器:)

2 个答案:

答案 0 :(得分:2)

我想说你需要考虑两个主要方面 - 技术和法律。

<强>技术

从技术角度来看,Bing Maps Silverlight控件是基于Silverlight的(显然!),而Google Maps API是基于Javascript的。 Silverlight和Javascript都在客户端的浏览器中执行,但在那之后,这几乎就是相似之处的结束!

  • Silverlight应用程序通常使用Visual Studio等工具以C#编写,并在部署之前进行编译。相反,JavaScript是以纯文本编写的,通常不会编译。
  • 所有现代网络浏览器都支持Javascript,包括智能手机浏览器(iOS,Android,Blackberry),而Silverlight应用程序则要求客户端安装Silverlight插件。
  • Silverlight的主要优势在于它能够提供更好的用户体验,更平滑的缩放和平移,更快的渲染,并且能够在地图上显示更多的数据(例如Google Maps javascript控件通常会变成在几百个图钉之后缓慢,而Bing Maps SL控件在发现减速之前可以显示数千个。)

技术完全不同,因此如果您决定创建Google Maps javascript版本以及Bing Maps SL版本,则必须完全重新编码和维护应用程序的两个单独版本。 Mapstraction无济于事,因为它只处理javascript映射提供程序。 (你当然可以使用Bing Maps v7 Javascript控件,但你也必须重新编码才能使用它。)

<强>法律

至于法律方面,我建议您查阅Google和Bing的使用条款,您可以分别在http://code.google.com/apis/maps/terms.htmlhttp://www.microsoft.com/maps/product/terms.html访问这些条款。 我不是律师,但我会提请你注意以下几节:

来自Google使用条款:

10.1.1。一般限制。 (a)除通过服务外,无法访问Maps API。您不得通过本服务中提供的技术或方式或Google可能指定的其他明确授权方式访问或使用Maps API或任何内容。例如,您不得通过Maps API之外的接口或通道(包括未记录的Google界面)访问地图图块或图像。

- 这似乎明确禁止ColinE建议的那种使用,这涉及直接从Bing Maps SL击中谷歌的磁贴服务器。

10.2a)没有“包装”。除非获得Google的书面同意,否则您不得为本服务创建或提供“包装”。例如,您不得:(i)在您向他人提供的API中使用或提供服务或内容的任何部分(例如地图图像,地理编码,路线,地点或地形数据);或(ii)创建重新实施或复制Google地图的Maps API实施。

- 这对我来说,除非他们获得明确的许可(他们可能已经做过,我不知道),否则Mapstraction库本身违反了Google的使用条款,因为它提供了一个包装器通过Google的API进行分层。

而且,根据Bing的使用条款:

2i。)你可能不会......     将Bing Maps Platform或其任何内容与任何其他映射平台集成;

- 目前尚不清楚“整合”的定义究竟是什么,但我肯定会说任何在同一界面中暴露Google地图和Bing地图元素的应用程序都会被整合,因此违反了Bing的使用条款以及Google的。

因此,如果您真的想要基于Google和Bing的地图,那么您将不得不创建和维护两个单独的版本。

答案 1 :(得分:0)

Silverlight Bing Maps控件支持图层的概念,其中每个图层都由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可用于在Bing Maps控件中呈现GoogleSky地图:

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/

因此,为地图提供差异来源非常容易。