搜狗地图 API 正式发布

  • 崔康

2011 年 6 月 17 日

话题:JavaSOA敏捷.NETRubyWeb框架JavaScript架构AndroidHTML5DevOps语言 & 开发文化 & 方法

最近,搜狗地图 API正式发布,至此,几乎所有主流互联网地图服务商都对外发布了接口,供第三方使用。本文介绍了搜狗地图 API 的基本情况,并盘点了其他主要互联网地图服务商的特点。

搜狗地图 API 是一套由 JavaScript 语言编写的应用程序接口,它支持用户在自己的网站中构建操作简单、功能丰富的地图应用,里面包含构建地图基本功能的各种接口,提供了诸如位置搜索、周边查询、出行路线规划等功能服务。该地图 API 免费提供,适用于各种网站。随着 Web 2.0 的发展,互联网地图的应用越来越广泛,很多商家都喜欢在自己的网站上嵌入一些地图信息,比如:连锁机构网站可以用地图展示遍布各地的分支机构;团购网站可以给商家团购信息中加入地图说明位置,并支持用户能在地图上查找身边的团购信息;房产中介,可以在网站上提供地图找房功能,不管是买房还是租房,用地图方式查找最实用;更多的像旅游、酒店、餐饮等垂直型网站,凡是与地理位置相关的,都可以嵌入地图应用,以更好地服务用户。

搜狗地图 API 简单易用,比如要创建一个 800*600 的地图区域,并显示地图,基本代码如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta http-equiv=X-UA-Compatible content="IE=EmulateIE7" />

<script type="text/javascript" src="http://api.go2map.com/maps/js/api_v1.0.js "></script>

<title>Sogou maps api v1.0</title>

<style type="text/css">

#map{position:absolute;width:800px; height:600px;margin:auto;}

v\:* {behavior:url(#default#VML);}

</style>

<script type="text/javascript">

   <!--

   function initialize()

   {

       // 创建地图对象

       var _m = new sogou.maps.MapClient(document.getElementById("map"));

       // 设置打开地图时默认的显示状态

       _m.coordRecenterTo(12956000,4824875,10);// 设置地图中心点及显示级别

       // 初始化地图

       _m.init();

   }

   //-->

</script>

</head>

<body onload="initialize()">

代码说明

  • 载入地图 API

    <script type="text/javascript" src="http://api.go2map.com/maps/js/api_v1.0.js "></script>

    http://api.go2map.com/maps/js/api_v1.0.js 网址指向 Javascript 文件所在的位置。该文件会载入使用 Sogou Maps API 所需的全部符号和定义。用户的网页必须包含指向该网址的 script 标签。
  • 地图 DOM 元素

    <div id="map"></div>

    要在网页上显示地图,我们必须为其留出一个位置。通常,我们的做法是创建一个名为 div 的元素,然后在浏览器的文档对象模型 (DOM) 中获取此元素的引用。
  • 为地图 DOM 元素设置样式

    <style type="text/css">

    #map{position:absolute;width:800px; height:600px;margin:auto;}

    v\:* {behavior:url(#default#VML);}

    </style>

    用户可以通过样式表自行指定地图 DOM 元素的大小。
  • 其它设置

    <meta http-equiv=X-UA-Compatible content="IE=EmulateIE7" /> 兼容 IE8

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" > 为绘制线面对象指定命名空间

    在 css 中加入 v\:* {behavior:url(#default#VML);} 用于矢量绘图                    
  • 初始化地图

    // 创建地图对象

    var _m = new sogou.maps.MapClient(document.getElementById("map"));

    // 初始化地图

    _m.init();                    

    上面的都加好后,添加创建地图区域并显示初始化的地图的代码。因为所有的操作都是基于地图的,只有地图初始化成功之后,很多类的属性与方法才可以被调用。
  • 事件侦听

    地图客户端的大部分接口是事件驱动的,所以事件侦听在地图客户端中很重要:

    // 创建地图对象

    var _m = new sogou.maps.MapClient(document.getElementById("map"));

    // 添加初始化完毕的事件侦听

    sogou.maps.SEvent.addListener(_m,"inited",function(a)

    {

       alert("初始化完毕触发事件!")

    });

    // 初始化地图

    _m.init();

    // 添加点击地图区的事件侦听

    sogou.maps.SEvent.addListener(_m.map,"click",function(a,b)

    {

     alert("坐标为:["+b.x+","+b.y+"]")

    });

    以上例子是当发生 inited 事件时,弹出一个信息对话框;当点击地图时,弹出坐标信息。 注意:事件侦听是要在该事件发生前绑定,不能等事件已经发生了才绑定侦听。如:inited 事件一定要在 init() 方法调用前侦听。而 _m.map 的 click 事件,由于是在 init 之后才创建 _m.map 对象,所以要放在 init() 方法之后,但还是在点击地图的 click 事件发生之前侦听的。

搜狗地图 API 支持的浏览器包括:

  • IE 6.0+ (Windows) 以及 ie 内核的其他浏览器,如:搜狗高速浏览器、遨游浏览器、360 浏览器、世界之窗浏览器等。
  • Firefox 2.0+ (Windows|Mac|Linux)
  • Safari 3.1+ (Mac|Windows)
  • Chrome 谷歌浏览器 (Windows)
  • Opera 10+ (Windows)

另外,Web 开发人员如果不想使用地图 API,也可以使用搜狗地图名片的功能。目前,搜狗地图规定,使用地图 API 的用户所提供的服务必须是免费的,如果有商业用途,必须获得搜狗地图书面授权。

报道,国内互联网地图服务市场的争夺日趋白热化。据不完全统计,当前我国从事互联网地图服务的网站约 4.2 万个。但随着国家对互联网测绘资质严格管理,互联网地图市场服务逐渐规范。

不过,目前搜狗地图仍然处于不盈利的状态,搜狗地图副总经理庞欣透露:

搜狗地图通过广告等形式有一小部分收入,但不成规模。其中,主要的原因是,地图的展示空间有限,形式有待创新。拥有 100 多人的搜狐地图每年投入上千万元,进行持续开发。

搜狗地图曾经靠“点坐标”(即在地图上标出商家信息)的方式一年能获取两三千万元收入,但搜狐最终将这种盈利模式撤销,这其实挺影响网民使用体验,而且对搜狐来说,也只是较小规模的收入。因此,搜狐就终止这项商业开发。

目前互联网地图的商业还处于初级阶段,LBS 也还停留在概念阶段,没有真正成熟的应用。对于用户来说,LBS 只是一扇门,敲开这扇门后,用户需要看到更加精彩的应用。

​除了搜狗,其他主流互联网地图服务商都对外开放了 API,我们来简要盘点一下​各个地图 API 的特点。

谷歌地图 API

谷歌地图 API包含的种类很多,包括:

  • Google Maps JavaScript API——使用 JavaScript 在网页中嵌入 Google Map,还可以通过多种服务操作地图并添加内容。
  • Google Maps API for Flash——使用此 ActionScript API 在基于 Flash 的网页或应用程序中嵌入 Google Map,还可以通过多种服务在三维模式下操作地图并添加内容。
  • Google Earth API——在网页中嵌入真实的 3D 数字地球仪。访问者无需离开网页便可游览世界,甚至身临其境感受深邃广袤的海洋。
  • Google Static Maps API——在网页或移动网站上嵌入快捷、简单的 Google Maps 图片,而无需使用 JavaScript 或载入任何动态网页。
  • 网络服务——使用网址请求访问客户端应用程序的地址解析、路线、海拔和商家信息,并在 JSON 或 XML 中处理结果。 

Google Maps JavaScript API 为例,其第 3 版专为移动设备设计,速度更快,更适用,而且不再需要申请 API 访问密钥。它同时也适用于传统的桌面浏览器应用程序。​谷歌地图 API 的功能很强大,其中包括:

地理定位

地理定位指通过各种数据收集机制识别用户或计算设备的地理位置。通常而言,大多数地理定位服务使用网络路由地址或内部 GPS 设备来确定该位置。请注意,地理定位是特定于设备的 API。某些浏览器 / 设备支持地理定位,但某些则不支持(或无法支持),因此开发人员不能始终假定网络应用程序具备该功能。

目前,在浏览器中可通过以下几种方式检测用户的位置。这些方法都不属于 Google Maps API,而是公用的行业标准。一些较新版本的浏览器正开始支持 W3C Geolocation 标准。此标准是 HTML5 的一部分,以后很可能会成为真正的标准。所有希望执行地理定位的应用程序都应当支持此标准。某些带 Google Gears 的浏览器可以使用 Google Gears Geolocation API。由于即将实现对 W3C 标准的广泛支持,因此,检查 Gears 不失为一项好的后备方案。某些浏览器使用 IP 地址来检测用户的位置,不过这种方式只能提供很粗略的估计。由于用户的 IP 地址只能提供对用户位置的粗略估计,因此我们不建议使用这种地理定位方法。W3C 是最简单且支持最广泛的方法,应优先采用此方法,然后再考虑其他方法。如果 Web 开发人员决定使用 Google Gears,那么首先应检查浏览器是否支持 W3C 标准。(请注意,如果要使用 Google Gears,则需要载入 Gears 初始化 JavaScript。)

语言本地化

Google Maps API 在显示文本信息(如控件名称、版权声明、行车路线和地图上的标签)时,使用浏览器的首选语言设置。大多数情况下,这是可取的做法,通常开发人员不会想覆盖用户的首选语言设置。不过,如果希望更改 Google Maps API 以忽略浏览器的语言设置,并强制浏览器采用特定语言显示信息,那么可以将可选的 language 参数添加到包含 Maps API JavaScript 代码的 <script> 标记,以指定要使用的语言。

在地图中添加街景视图

Google街景视图提供了从指定道路对整个覆盖范围的 360 度全景视角。街景视图 API 的覆盖范围与 Google Maps 应用程序 (http://maps.google.com/) 的覆盖范围相同。Google Maps JavaScript API 提供街景视图服务,可用于获取及处理在 Google Maps 街景视图中使用的图像。与在 V2 API 中不同,浏览器本身支持 Google Maps JavaScript API V3 的街景视图服务。要在地图中添加街景视图,开发人员只需要添加街景视图控件。要添加此控件,请在地图的 MapOptions 内将 streetViewControl 设置为 true。显示的地图将带有一个街景视图街景小人控件。街景视图街景小人控件可让开发人员直接在地图内查看街景视图全景。点击并按住街景小人时,地图将更新以显示启用街景视图的街道。

样式化地图

通过 StyledMapType,开发人员可以自定义标准 Google 基本地图的显示形式,更改诸如道路、公园和建筑物区域等元素的显示,以体现与默认地图类型中所用样式不同的样式。这些组件称为地图项,开发人员可以通过 StyledMapType 选择这些地图项,并将可视样式应用于地图项的显示(包括隐藏全部地图项)。借助这些更改,可以在地图上强调特定组件或周围页面的补充内容。StyledMapType() 构造函数采用 MapTypeStyles 数组作为参数,每个数组均由选择器和样式器组成。选择器指定应选择以应用样式的地图组件,而样式器指定这些元素的可视修改。

虽然谷歌地图 API 的功能非常强大,但是目前面临关键时期。据易观分析称,2011 年中国手机地图市场谷歌占据近半份额,谷歌地图能否申请到甲级资质成为关键。​  据报道,谷歌中国在华合资公司——北京谷翔信息技术有限公司已经正式提交了关于谷歌地图牌照的相关申请。根据规定 7 月 1 日前拿不到互联网地图服务资质,谷歌地图必须关闭在中国内地的运营。 一直不符合《关于修改〈外国的组织或者个人来华测绘管理暂行办法〉的决定》的谷歌,在今年 6 月 7 日得到转机。国家测绘地理信息局召开发布会,负责人表示,外国的组织或者个人来华从事互联网地图服务活动的,必须依法设立合资企业。只申请互联网地图服务资质的中外合资企业,其外方投资者的出资比例,最终不得超过 50%。  这一规定使得谷歌中国在华的合资公司北京谷翔有资格进行申请。易观分析称,未来手机地图市场的竞争会在客户端和手机地图 API 两个领域展开,谁的基础地图服务数据接口能被更多更庞大的周边软件用户群调用,谁就可以掌握最核心的 LBS 用户资源。各大手机地图厂商高度重视 API 的开放工作,无论是 Check-in、移动 SNS,还是手机微博、手机团购等软件,无一例外地积极引入了手机地图 API 服务。据了解,测绘的资质目前分甲级和乙级,只有甲级证才可以通过 API 将地图数据提供给第三方,如果只申请到乙级资质,只能做自己的应用。谷歌地图能否申请到甲级资质成为了众多第三方开放商共同关心的问题。

百度地图 API

百度地图 API也是 JavaScript 接口,​在今年 5 月底月发布的 1.2 版本中新增了以下功能:

  • 公交路线信息查询
  • 底图渐现效果
  • 驾车、步行结果展示方式配置
  • 支持添加点热区数据

目前百度地图 API 已应用于人人网​、酷讯、安居客、艺龙网等。​

图吧(Mapbar)API

图吧 API提供互联网和移动设备两种接口,​支持 JavaScript 和 Flash 编程,不过需要注册 API 密钥,支持的浏览器有限,包括​Internet Explorer 6.0 或更高版本、Firefox 2.0 或更高版本。同时,图吧对高级用户提供收费服务,主要是搜索 API,比如本地搜索、公交线路查询、公交换乘查询、交站点查询等。移动设备 API 目前仅支持 Android 平台,且无需注册密钥。

我要地图(51ditu)API

我要地图除了提供 JavaScript 和 Flash 接口 API,还增加了以下访问接口:

51ditu 的 API 目前已应用于中国移动、有道、新浪、我爱我家等。

MapABC API

MapABC的互联网 API 提供了 Flash、Javascript、Flex 和 Silverlight 四种接口,移动版 API 支持 Android、Windows Mobile、iOS、Symbian 等平台。MapABC API 访问同样需要申请密钥,网站上还提供了一些构建在该 API 基础之上的应用,包括么卡、RZ 实时交通图分享、GPSTracker、摩天轮等。

国内互联网地图市场还处于成长阶段,​随着搜狗地图 API 正式开放,市场竞争会更加激烈。如果谷歌地图未能按时​取得牌照,其他提供商将争夺其留下的发展空间。一方面,地图服务商需要凸显自己的优势,吸引客户并逐渐实现盈利;另一方面,第三方使用者需要谨慎地选择可靠的地图 API 厂商,以得到稳定的基础设施。​

JavaSOA敏捷.NETRubyWeb框架JavaScript架构AndroidHTML5