谷歌地图定位

谷歌地图定位
谷歌地图定位

您可以通过GClientGeocoder对象访问Google Maps API 地址解析服务,还可以使

用GClientGeocoder.getLatLng()将字符串地址转换成GLatLng。该方法采用了待转换的字符串地址和要在检索地址时执行的回调函数作为参数。该回调函数是必需的,因为地址解析需要向Google 的服务器发送请求,这可能需要一段时间才能完成。

在此示例中,我们会对某个地址进行地址解析,并在该点上添加标记,然后打开显示该地址的信息窗口。请注意,回调函数是作为函数常量进行传递的。

如果您希望访问关于某个地址的结构化信息,则可使用GClientGeocoder提供的getLocations()方法,该方法会返回一个包含以下信息的JSON 对象:

?Status

?

o request - 请求类型。在此情况下,它始终为geocode。

o code - 响应代码(与HTTP 状态代码类似),用于表明地址解析请求是否成功。请参见状态代码的完整列表。

?Placemark - 如果地址解析器查找到多个匹配项,则会返回多个地标。

?

o address - 格式恰当且大小写正确的地址。

o AddressDetails -- 使用xAL 格式的地址,或称为可扩展地址语言(eXtensible Address Language)(一种设置地址格式的国际标准)。

o

?Accuracy - 表示指定地址的地址解析所能达到的精确度的属性。请参见可能值的列表。

o Point - 3D 空间中的一个点。

o

?coordinates - 该地址的经度、纬度和海拔。在此情况下,海拔始终设为0。

以下显示了地址解析器针对Google 总部地址所返回的JSON 对象:

Google 也提供直接通过HTTP 执行的地址解析网络服务。这种地址解析服务与JavaScript Google Maps API 不同。对于动态的地址解析请求或实时的检索地址解析请求,我们不建议使用地址解析网络服务;您可以改为使用本章中介绍的JavaScript 客户端地址解析器。但是,如果您要填充静态数据组、需要进行调试或JavaScript GClientGeocoder对象不可用,则建议使用HTTP 地址解析器。

有关详情,请参见地址解析网络服务。

使用Street View 对象

使用Street View 全景图对象要求客户端浏览器支持Flash 插件。

Google Street View 提供了从指定道路遍及Google Maps 覆盖范围的360 度全景视图。Street View 示例图片如下所示。

Google 街道视图使用Flash? 插件来显示这些交互图像,大部分浏览器都支持该插件。Google Maps API 提供了Street View 服务,用于获取和处理Google Maps Street View 中使用的图像。

新功能!Street View 服务现可提供来自支持的图片存储区(如Panaramio 和Picasa)的用户照片。请参见下方的在Street View 中显示用户照片。

GStreetviewPanorama对象

通过使用GStreetviewPanorama对象可支持街道视图图像,该对象提供街道视图Flash? 查看器的API 接口。要将街道视图合并到地图API 的应用程序中,您需要遵循以下较为简单的步骤:

1.创建一个容器(通常是

元素),用于存放街道视图Flash? 查看器。

2.创建GStreetviewPanorama对象,并将其放置在容器内。

3.初始化Street View 对象,以便引用特定的位置,并显示初始的“视点”(POV)。

4.通过检查603错误值来处理不支持的浏览器。

GStreetviewPanorama对象要求其构造函数内包含一个容器元素,它还可让您使

用GStreetviewPanoramaOptions参数设置其地址(可选)。您可以在构建后在该对象上调用

setLocationAndPOV(),以更改其位置和POV。

注意:尽管街道视图功能专门用来与地图结合使用,但这并非强制性要求。您也可以在不使用地图的情况下单独使用街道视图对象。

有关容器和设置位置及视点的详细信息,将在下文中介绍。

Street View 容器

Street View Flash 查看器需要一个容器DOM 节点,以便在其中显示其内容(通常为

元素)。为了实现全景图像的最佳显示结果,我们建议其最低尺寸应为200x200 像素。我们同样不建议使用大型查看器,因为这样可能导致Flash 查看器消耗过多内存,从而对浏览器的性能产生负面影响。

GStreetviewPanorama构造函数需要一个container参数,用于识别在其中显示Street View Flash 查看器的初始容器元素。您可以hide()GStreetviewPanorama对象,以暂时将其隐藏起来;也可以show()该对象,以重新显示查看器。

如果您希望更改Street View Flash 查看器的容器,可随时向其发送setContainer()方法,并传递它应当附加到的新元素。如果该容器的大小经过了重新调整,那么您可以向GStreetviewPanorama对象发送checkResize()方法,可强制重新调整该对象的大小,以使其适应新的尺寸。

如果您希望从DOM 中彻底删除Street View Flash 查看器并释放其内存,请向该对象传递remove()方法。从DOM 中删除街道视图对象的容器元素之前,请务必调用该方法,否则将导致内存泄漏和/或客户端浏览器上发生Javascript 错误。

街道视图位置

Street View 图片由位置(对应于GLatLng)和特定方向(GPov) 组成,这两项共同标识了图片显示的视图。您可以在构建Street View 对象时,使用可选的GStreetviewPanoramaOptions参数来指定这两项参数。

要了解Street View 当前支持的城市列表,请查看Google Maps 帮助中心。要确定某个地点是否支持Street View 数据,有三种基本方法:

?对于已知有效的Street View 位置,您可以存储其GLatLng。

?您可以检查GStreetviewOverlay的图块叠加层并直接检查道路网络。支持Street View 的道路会在叠加层上以蓝色突出显示。然后,您就可以使用点击事件或地址解析逻辑

向GStreetviewPanorama对象传递支持的地点了(请参见街道视图叠加层。)

?您可以使用GStreetviewClient对象,对指定了传递GLatLng的街道视图对象执行查询。

GStreetviewClient对象支持使用大量查询来查找全景数据。(请参见Street View 客户查询)。

请注意,最后两种方法并不精确:在这些情况下,Street View 服务不要求提供(一般也不接收)精确的纬度和经度,而是搜索指定的GLatLng“附近”是否存在全景图数据。

以下示例使用了GStreetviewPanoramaOptions来指定Street View 所使用的初始纬度和经度。POV 项已留空,表明默认视图朝向北方。

var fenwayPark =new GLatLng(42.345573,-71.098326);

panoramaOptions ={ latlng:fenwayPark };

var myPano =new GStreetviewPanorama(document.getElementById("pano"), panoramaOptions);

查看示例(streetview-simple.html)

街道视图错误处理

由于街道视图要求支持Flash? 插件,因此,您需要编写代码来测试用户浏览器是否支持该插件。您也可以通过注册一个对GStreetviewPanorama对象上的error事件进行侦听的事件侦听器,在您的应用程序中进行这项检查。error事件将会传递一个错误代码,您可以根据其进行判断。

下面的示例代码针对是否支持Flash 插件执行快速检查,如果不支持Flash 则显示一个警告对话框。

和POV。在以下示例中,我们会创建GStreetviewPanorama对象,然后将其位置和POV 设置为特

GStreetviewPanorama对象不仅支持Street View 图像,还可显示来自热门的照片存储区(如Picasa 和Panaramio)的用户照片。下方显示了包含用户照片的Street View 示例:

当导航到包含附近用户照片的位置时,Street View 会显示一个标有“用户照片”的小窗口,点击该窗口会显示一组用户照片。

启用用户照片

默认情况下,Street View 内的用户照片处于启用状态。要停用Street View 内的用户照片功能,请将GStreetviewPanoramaOptions的features参数内的userPhotos设置为false。此外,您可在该选项的userPhotoOptions字段中指定您要启用的特定照片存储区。

目前,我们支持以下GStreetviewUserPhotoOptions:

?"panoramio"

?"picasa"

?"flickr"

如果您不指定自己感兴趣的特定存储区,则系统会启用所有的照片存储区。

以下示例显示了波士顿的地图,其中同时启用了Picasa 和Panoramio 的用户照片:

从用户的角度而言,通过直接检查GStreetviewOverlay来确定道路是否支持Street View 的方式通常不可行,或者不理想。因此,API 提供了通过编程的方式请求并检索Street View 数据的服务。使

用GStreetviewClient对象可使该服务更加便捷。

执行街道视图查找

GStreetviewClient对象会使用Google 的Street View 服务来查找全景图数据。由于该查找操作是异步进行的,因此,此类的方法需要回调函数,以便在收到数据时执行。所有指定的回调在没有返回值时会传递null,因此,您应当在自己的回调函数内检查是否存在这种情况。

GStreetviewClient方法getNearestPanoramaLatLng()会通过指定的位置检索附近全景图像

的GLatLng(其自身作为GLatLng进行传递)。

getNearestPanorama()和getPanoramaById()都会改为检索GStreetviewData对象,它们会存储关于特定全景图对象的元数据。以下部分对这些数据进行了说明。

处理客户端响应

GStreetviewData对象的结构由三个属性构成:location、copyright(包含当前显示的特定图片的相关信息)和links(提供相邻全景图对象的相关信息)。以下说明了这些属性的结构:

要使用GoogleBar,您必须先使用传递给GMap2构造函数的GGoogleBarOptions对象指定GoogleBar 的行为。地图构建完成后,可通过调用GMap2.enableGoogleBar()启用GoogleBar。GoogleBar 已进行更新,具有全新的外观,并能够向地图API 的网站添加广告收益流。

注意:GoogleBar 提供了一款针对Google AJAX 搜索API的小巧封装器,这是一个独立产品,拥有自己的使用条款。

经过重新设计的GoogleBar 在行为上与之前的版本不同,因此,我们以“可选”设置的形式提供新的用户界面。要启用新的GoogleBar,请在GGoogleBarOptions对象中将style属性设置为“new”。在不久的将来,我们会将此行为设置为默认行为。

下面的示例设置了具有新外观的GoogleBar:

?使用GoogleBar在本地商户搜索结果旁显示广告

?使用地图广告单元,根据地图视口显示广告

要通过这种广告获取收益,您可以分别将这些AdSense for Maps 对象链接到AdSense 帐户,该帐户必须已启用AdSense for Search 或AdSense for Content。

这些广告方法存在根本区别,因而需要使用不同的Google AdSense 产品。要根据用户直接进行的搜索在GoogleBar中显示广告,需要启用您的AdSense 帐户,这样才能使用AdSense for Search。要根据查看者视口在地图上的面板中显示广告,需要启用您的AdSense 帐户,这样才能使用AdSense for Content。

如果您还没有AdSense 帐户,请注册帐户。注册帐户之后(或者如果您已经拥有帐户),请确保您的帐户已启用AdSense for Search和/或AdSense for Content。

拥有Adsense for Search 或AdSense for Content 帐户之后,您将收到AdSense for Search (AFS) 或AdSense for Content (AFC) 发布商ID。您可以在代码中使用该发布商ID,将显示的任意广告链接到您的AdSense 帐户。

在GoogleBar中投放广告

要使用GoogleBar从用户搜索获取广告收益,请在构建地图时,在GGoogleBarAdsOptions对象的client属性中指定发布商ID。这样,只要用户点击了您API 应用程序中的本地结果,您便可以从这次点击中获取广告收益。如果设置了AdSense for Search channel,则您还可以选择指定该属性。(有关广告渠道的详细信息,请参见此处。)

此外,您还可以指定要与广告关联的adsafe(广告安全级别),以及显示结果时要使用的language。

下面的示例显示可获取广告收益的GoogleBar 设置。请注意,在您的应用程序中,您应当使用自己的发布商ID。

相关主题