街道视图客户端查询
通过在视觉上检查 GStreetviewOverlay
的方式,来确定道路是否支持街道视图通常不太可行,从用户角度而言也不可取。出于此原因,API 提供了可以程序方式发出请求并检索街道视图数据的一种服务。此服务通过使用 GStreetviewClient
对象得到简化。
执行街道视图查找
GStreetviewClient
对象使用 Google 的街道视图服务执行全景数据查找。由于此种查找为异步进行,所以此类方法需要在接收数据时执行回调函数。所有已给出的回调函数在没有任何值返回的情况下都将传递 null
,因此您应在回调函数中检查这种情况。
GStreetviewClient
方法 getNearestPanoramaLatLng()
检索与一个给定位置 (其本身作为 GLatLng
传递)邻近的全景图像的 GLatLng
。
getNearestPanorama()
和 getPanoramaById()
都替代检索 GStreetviewData
对象,该对象存储关于特定全景对象的元数据。此类数据在下节中介绍。
处理客户端响应
GStreetviewData
对象的结构包括三个属性:location
和 copyright
(包含关于所显示的特定图像的信息),以及 links
(提供关于邻近全景对象的信息)这些属性的结构如下所述:
# The location property uses the GStreetviewLocation object literal
location: {
latlng: GLatLng,
pov: {
yaw: String,
pitch: String,
zoom: String
},
description: String,
panoId: String
}
copyright: String
# The links property uses the GStreetviewLink object literal
links[]: {
yaw: String,
description: String,
panoId: String
}
(关于 GStreetviewLocation
和 GStreetviewLink
object literal 的完整描述 在地图 API 参考中显示。)
注意: 不应将 GStreetviewData.location
属性与 window.location
属性混淆。如果尝试从此对象的 location
属性中抽取数据,请确保您确实接收到了从街道视图服务器传回的响应(见下文)。否则,location
属性将默认为 window.location
,并且将发生意外行为。
如果对 GStreetviewClient
对象的请求成功,它会将 GLatLng
或 GStreetviewData
对象传递给指定的回调函数。原因是检索街道视图数据为异步进行,然而,客户端对象可能不检索这些数据对象,因此您的代码不应依赖于当前显示的对象。相反,您应始终检查确信有返回值的任何请求所返回的 code
值。以下代码片段说明了此概念。
panoClient = new GStreetviewClient();
panoClient.getPanoramaById(panoData.location.panoId, processReturnedData);
function processReturnedData(panoData) {
if (panoData.code != 200) {
GLog.write('showPanoData: Server rejected with code: ' + panoData.code);
return;
}
// Code to actually process the GStreetviewData object is contained here
}
包含 GStreetviewData
样本结构的完整响应如下所示:
{
location: {
latlng: "42.345566, -71.098354"
pov: {
yaw: "370.64659986187695"
pitch: "-20"
zoom: "1"
}
description: "Yawkey Way"
panoId: "-KNGDaZvSQjMqug7ISM_CA"
}
copyright: "© 2008 Google"
links:[ {
yaw: "0"
description: "Yawkey Way"
panoId: "S142iWXa_4Fi7L7d8HKhuQ"
},
{
yaw: "0"
description: "Yawkey Way"
panoId: "2vFI79AjOpHTAYJSCKquFg"
}
]
}
以下样本应用程序将显示初始全景对象,抽取其 ID,然后存储返回的 GStreetviewData
对象中的链接全景对象,并显示与该街道视图对象相关的数据集。用户每次单击“下一步”时,该过程都会重复,允许用户“行进”过一组邻近全景对象。
var map;
var myPano;
var panoClient;
var nextPanoId;
function initialize() {
var fenwayPark = new GLatLng(42.345573,-71.098326);
var fenwayPOV = {yaw:370.64659986187695,pitch:-20};
panoClient = new GStreetviewClient();
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(fenwayPark, 15);
GEvent.addListener(map, "click", function(overlay,latlng) {
panoClient.getNearestPanorama(latlng, showPanoData);
});
myPano = new GStreetviewPanorama(document.getElementById("pano"));
myPano.setLocationAndPOV(fenwayPark, fenwayPOV);
GEvent.addListener(myPano, "error", handleNoFlash);
panoClient.getNearestPanorama(fenwayPark, showPanoData);
}
function showPanoData(panoData) {
if (panoData.code != 200) {
GLog.write('showPanoData: Server rejected with code: ' + panoData.code);
return;
}
nextPanoId = panoData.links[[0[].panoId;
var displayString = [[
"Panorama ID: " + panoData.location.panoId,
"LatLng: " + panoData.location.latlng,
"Copyright: " + panoData.copyright,
"Description: " + panoData.location.description,
"Next Pano ID: " + panoData.links[[0[].panoId
[].join("
");
map.openInfoWindowHtml(panoData.location.latlng, displayString);
GLog.write('Viewer moved to' + panoData.location.latlng);
myPano.setLocationAndPOV(panoData.location.latlng);
}
function next() {
// 取得下一个panoId
// 请注意,这个写法并不准确,当移到最后时就不行了。
panoClient.getPanoramaById(nextPanoId, showPanoData);
}
function handleNoFlash(errorCode) {
if (errorCode == 603) {
alert("错误:您的浏览器似乎不支持 Flash");
return;
}
}
http://code.google.com/intl/zh-CN/apis/maps/documentation/examples/streetview-data.html
分享到:
相关推荐
本程序规定了上海汽车集团股份有限公司乘用车分公司(以下...旨在明确整车开发项目中各相关人员的职责和工作范围,并明确了整车开发过程中各里程碑的关系及各节点所需提交的交付物,以确保整车开发项目正常有序地进行。
发达国家全球人才大数据开发经验借鉴.pdf
【海外市场开发经验交流材料PPT课件】 这份PPT课件详细介绍了大庆油田工程建设公司在海外市场开发方面的实践和经验,主要分为四个部分:项目部简介、海外市场开发的战略、战术创新以及海外市场开发的前景展望。 ...
QCon 2024全球软件开发大会北京站(公开)PPT汇总,共72份。 大模型 AI 训练的数据存储加速 大模型原生应用产品设计的前沿探索 大模型应用开发新范式 大模型技术在快手搜索的应用 大模型数据安全:从测评到实时检测...
全球变暖背景下,风电开发面临着一系列气候服务挑战。随着气候变化加剧,风能作为一种重要的清洁能源,其开发利用变得越来越依赖于气候状况。风能资源的长期变化趋势、气候变化对风能潜力的影响,以及如何在气候环境...
第8章 开发全球市场
JetBrains是一家全球知名的软件开发公司,总部位于捷克共和国的布拉格,并在多个国家设有研发实验室和销售办事处。该公司成立于2000年,由Sergey Dmitriev、Eugene Belyaev及Valentin Kipiatkov共同创办,专注于为...
QCon 内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、开发人员分享技术创新和实践。北京站于5月29日-31日举行。 整理了北京站101份讲师演讲PPT报告,供...
2016QCon全球软件开发大会上海站【20日】PPT
2016QCon全球软件开发大会上海站【21日】PPT
交流中国农业信息化经验 推进全球数字农业发展 “小农 电商 市场:电商与农村价值链开发”线上系列讲座火热开播.pdf
大会中,来自世界各地的PHP专家和开发者们聚集一堂,分享他们的经验和洞察,共同探讨PHP在软件开发领域的最新进展和未来方向。这些分享可能涵盖了以下主题: 1. PHP版本更新:2017年时,PHP 7已经发布并逐渐成为...
自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。 更多其他QCon大会PPT:...
2016QCon全球软件开发大会北京站PPT全集【4月21日-23日】
【QCon上海2016 全球软件开发大会1】是InfoQ主办的一次全球性的技术盛会,致力于推动软件开发领域的创新与实践。自2007年起,QCon已经在多个城市成功举办,吸引了大量高级技术人员参与。这次大会旨在升级参会者的...
SAP系统在全球企业资源规划(ERP)领域有着广泛的应用,而ABAP则是其核心开发语言,使得企业能够根据自身需求定制化SAP系统。 首先,"ABAP开发从入门到精通"这一主题涵盖了学习ABAP的基础到高级概念。对于初学者,...
全球纺织网国际站App的开发实践,不仅仅为纺织行业提供了一个便捷高效的交易平台,更为职业教育和人才培养提供了宝贵的参考与启示。 首先,全球纺织网国际站App通过“多语种、多联动、多组合”的特性,克服了国际...
这些经验对于任何希望在全球软件开发领域保持竞争力的团队和个人来说都是宝贵的财富。通过学习和应用这些经验,我们可以有效地应对挑战,提高软件开发的整体质量和效率,最终实现项目成功和业务增长的目标。