tokenpockettokenpocket钱包官网|google街景
Explore Street View and add your own 360 images to Google Maps.
Explore Street View and add your own 360 images to Google Maps.
Jump to Content
Maps
Street View
Go to Street View
Upload 360 imagery
Maps
Street View
How it works
Contribute
Businesses
Show your business
Hire a trusted professional
Case Studies
Policy
Google-Contributed
Trusted photographers contributed
Fraud prevention
Go to Street View
Upload 360 imagery
Bringing your map to life, one image at a time
Street View stitches together billions of panoramic images to provide a virtual representation of our surroundings on Google Maps. Street View's content comes from two sources - Google and contributors. Through our collective efforts, we enable people everywhere to virtually explore the world.
Watch the film
Link to Youtube Video
(visible only when JS is disabled)
A visual way to travel
360 imagery helps you know where to go and what to expect when traveling. Explore world-famous landmarks, galleries, and museums right from your device, or turn the clock back with Street View historical imagery to see how a location has changed over time.
How to use Street View
Find images from other dates
Where Google is collecting Street View next
Discover where were headed next with the Street View car or the Street View Trekker.
All
All
View districts
Explore iconic Street View locations
Abu Dhabi
Take in the majestic Sheikh Zayed Grand Mosque
With an area of more than 30 acres (12 hectares) this mosque accommodates more than 40,000 worshippers.
Explore on Street View
Peru
Explore the ancient temples of Machu Picchu
The world's most famous Inca citadel. It was built in the 5th century and has a 7,970 ft (2,430-meter) mountain ridge.
Explore on Street View
United States
Scale Yosemite's El Capitan with a pro climber
Watch a pro climber facing this vertical rock formation of 3,000 feet (914-meter) from base to summit.
Explore on Street View
France
Enjoy the beautiful Paris skyline atop the Eiffel Tower
Built to mark the centennial of the French Revolution, this is France's most famous tourist attraction.
Explore on Street View
Greenland
Drift along with an Icefjord
Located 250 km north of the Arctic Circle, it was declared a UNESCO World Heritage Site in 2004.
Explore on Street View
New Zealand
Meet the world's only flightless parrot
With only around 250 living individuals left, the kākāpō is one of the world's rarest and most protected birds.
Explore on Street View
Explore your world or create your own imagery
Go to Street View
Create your imagery
Developers
Image Acceptance & Policy
Help Center
About Google
Google Products
Privacy
Terms
Help
Afrikaans
English
አማርኛ
العربية
azərbaycan
български
বাংলা
bosanski
català
čeština
dansk
Deutsch
Deutsch (Schweiz)
Ελληνικά
English (Switzerland)
English (United Kingdom)
español (Latinoamérica)
español
eesti
euskara
فارسی
Filipino
français
français (Canada)
français (Suisse)
galego
ગુજરાતી
हिन्दी
hrvatski
magyar
հայերեն
Indonesia
íslenska
italiano
italiano (Svizzera)
עברית (ישראל)
日本語
ქართული
ខ្មែរ
ಕನ್ನಡ
한국어
ລາວ
lietuvių
latviešu
മലയാളം
монгол
मराठी
Melayu
नेपाली
Nederlands
norsk bokmål (Norge)
polski
português (Brasil)
português (Portugal)
română
русский
සිංහල
slovenčina
slovenščina
српски
svenska
Kiswahili
தமிழ்
తెలుగు
ไทย
Türkçe
українська
اردو
Tiếng Việt
中文 (简体)
中文
中文 (繁體)
isiZulu
街景地图-实景地图-全景地图-地球在线
街景地图-实景地图-全景地图-地球在线
选择城市:
请选择
北京
上海
三亚
西安
拉萨
厦门
广州
深圳
重庆
查看更多城市
街景地图-360°全景实景视觉体验
>>分享当前街景地图 >>城市列表
街景地图操作指南
1.首先选择您要浏览的城市,可以通过页面右上角的城市列表快速进入。
2.主页面由街景实景视图和电子地图视图构成,分别占据左右两个区域,其中电子地图视图中的图标所指示的位置就是当前街景图像所处的地理位置。
3.在街景视图画面中,您可以用鼠标拖拽来随意调整角度或视野,通过点击来进行移动,通过鼠标滚轮或加减号按钮来缩放。
4.用鼠标拖动电子地图中的图标,即可查看任意位置的街景地图(蓝色路径表示当前街路的街景图像可用)。
站点链接:地图大全 卫星地图 打车查询 地铁图 地图迷 IP查询-IPv6测试 经纬度查询 手机定位 实时路况 资讯迷 旱烟百科 TourBrowser VSearch 极简天气 推文搜索 洛阳河洛古城 栾川竹海野生动物园 洛阳未来城科幻乐园 宜昌市城市规划展览馆 湖北金刚山景区 宜昌世界和平公园 长沙县开物中学 青岛第六十六中学 釜山大学 江苏泰兴公园 兴化市森林公园 新四军黄桥战役纪念馆 泰州古光孝寺 隋炀帝陵遗址公园 俞源太极星象村 金华人民广场 灵江源森林公园 嵩溪古村风景区 中国木雕博物馆 北京柳浪家园北里 冬格措纳湖 那拉提旅游风景区 庙尔沟瀑布风景区 新疆天赐圣泉度假酒店
Designed by 地球在线-街景地图
街景照片有两个来源:Google 和我们的贡献者。
街景照片有两个来源:Google 和我们的贡献者。
跳到内容
地图
街景
首页
探索
商家
完善您的商家信息
聘请可信专业人员
支持 360 度全景照片的工具
街景故事
案例研究
政策
Google 提供的内容
“可信”摄影师贡献的内容
防范欺诈
15 周年
地图
街景
首页
探索
商家
完善您的商家信息
聘请可信专业人员
支持 360 度全景照片的工具
街景故事
案例研究
政策
Google 提供的内容
“可信”摄影师贡献的内容
防范欺诈
15 周年
关闭抽屉式导航栏
图像来源
街景照片有两个来源:Google 和我们的贡献者。
我们的内容
Google 自有的内容会标注“街景”或“Google 地图”字样。我们会自动对图像中的人脸和车牌号进行模糊处理。
政策详情
来自其他贡献者的内容
用户提供的内容会附上可点击/可点按的帐号名称,有时还会附上个人资料照片。
政策详情
Google 如何把街景带给您
为了共享街景图像,我们的工程小组一直在幕后辛勤地工作。下面简要介绍 Google 街景视图工程小组目前是如何开展工作的。
第 1 步
采集图像
首先,我们需要驾车前往要在街景中呈现的地点并实地拍摄。我们会密切关注多种因素,包括各个区域的天气和人口密度,以便确定能够采集到最佳图像的时机和地点。
第 2 步
校准图像
为了让每张图像都能与其在地图上的位置一一对应,我们会综合车中多个传感器的信号,包括测量 GPS、速度和方向的传感器。这有助于我们再现汽车的确切路线,甚至可以根据需要倾斜并重新调整图像。
第 3 步
将照片转换成 360 度全景照片
为避免 360 度全景照片中出现间隙,相邻摄像机所拍摄的照片都会留一点重叠区,后期我们再将照片“拼接”在一起,制作成 360 度的图像。随后,我们会采用特殊的图像处理算法,以减少“接缝”并实现平滑过渡。
第 4 步
准确呈现图像
根据街景汽车发出的三条激光束从物体表面反射回来的延时,我们可以计算出建筑物或物体与我们之间的距离,并据此构建出 3D 模型。当用户移到远处的区域时,此 3D 模型就可确定要在该位置为用户呈现的最佳全景图。
第 1 步
采集图像
首先,我们需要驾车前往要在街景中呈现的地点并实地拍摄。我们会密切关注多种因素,包括各个区域的天气和人口密度,以便确定能够采集到最佳图像的时机和地点。
第 2 步
校准图像
为了让每张图像都能与其在地图上的位置一一对应,我们会综合车中多个传感器的信号,包括测量 GPS、速度和方向的传感器。这有助于我们再现汽车的确切路线,甚至可以根据需要倾斜并重新调整图像。
第 3 步
将照片转换成 360 度全景照片
为避免 360 度全景照片中出现间隙,相邻摄像机所拍摄的照片都会留一点重叠区,后期我们再将照片“拼接”在一起,制作成 360 度的图像。随后,我们会采用特殊的图像处理算法,以减少“接缝”并实现平滑过渡。
第 4 步
准确呈现图像
根据街景汽车发出的三条激光束从物体表面反射回来的延时,我们可以计算出建筑物或物体与我们之间的距离,并据此构建出 3D 模型。当用户移到远处的区域时,此 3D 模型就可确定要在该位置为用户呈现的最佳全景图。
全方位探索周围世界。
查看图库
我们前往的地方
我们将驾驶街景汽车穿越许多国家/地区,为您带来增强体验和帮助您探索周围世界的图像。查看我们接下来要开展拍摄工作(驾驶街景汽车或徒步拍摄)的国家/地区列表。
国家/地区
{[country]}
区域
区
时间
{[value.region]}
{[value.districts]}
{[value.datestart| date:'MM/yyyy']} - {[value.dateend| date:'MM/yyyy']}
受到无法掌控的因素(天气、道路封闭等)的影响,我们的街景拍摄车很有可能停止拍摄,或是出现略微调整。同时请注意,列表上注明的城市实际可能包括街景汽车行驶范围内的各个小城镇。
我们去过的地方
地图上的蓝色区域显示的是有街景图像的地区。您可以放大并查看细节,或是使用我们的网站和应用浏览这些内容。
Google 自己的街景车队
浏览我们的街景车队。
街景汽车
自 2007 年街景项目在美国启动以来,我们取得了巨大进展,如今我们的 360 度全景照片已覆盖全球七大洲。
街景肩背式摄像机
肩背式摄像机可以去到街景汽车、街景三轮车、街景手推车或街景雪地车到不了的地方,因而可以将街景采集范围扩大到世界上的更多地方。它采用可穿戴背包设计,在背包顶部装有摄像系统。由于携带极其方便,因此即使是狭窄难行的空间或只有步行才能穿行的地方,我们也可以通过它边走边采集图像。我们用这项摄像技术采集的第一组图集就是沿着亚利桑那州大峡谷崎岖的岩石地形取景的。
街景手推车
一群热爱艺术的 Google 员工希望能将街景技术应用到世界各地的博物馆,于是想到开发一种能够轻松通过博物馆门廊和围绕雕塑品采集图像的系统。初次尝试室内拍摄时,我们将所有必需的设备都安装到了一个更小的机柜中:在手推车上安装摄像系统,组装成手推拍摄车。它不但采集了博物馆内的景观,还将白宫和体育场馆等其他室内场所的景观也都一一记录下来。
街景雪地车
还有一个可携带街景摄像机去探索的好地方,那就是滑雪斜坡。我们用了几个周末的时间成功将街景设备组装到了雪地车上,期间使用了一些 2x4s 板材和胶带,多出的硬盘则包裹在滑雪衫中,以抵御寒冷的环境。现在,滑雪者、单板滑雪爱好者和雪地徒步爱好者可以尽情探索惠斯勒黑梳山以及周边旅游胜地起伏不平的雪场地形了。
街景三轮车
在窄巷遍布的城市,我们需要考虑使用有足够承载力的车辆来运载街景肩背式摄像机。我们团队发现,印度尼西亚的 Selis Robin 摩托车非常适合用来深入到一些狭窄巷道进行拍摄。于是便推出了这款街景三轮车。我们专门为这款车加装了柱杆,使街景肩背式摄像机更加稳固。
开发者
图像收录与隐私权政策
帮助中心
隐私权政策
条款
简介
Google 产品
帮助
更改语言或地区
Afrikaans
English
አማርኛ
العربية
azərbaycan
български
বাংলা
bosanski
català
čeština
dansk
Deutsch
Deutsch (Schweiz)
Ελληνικά
English (Switzerland)
English (United Kingdom)
español (Latinoamérica)
español
eesti
euskara
فارسی
Filipino
français
français (Canada)
français (Suisse)
galego
ગુજરાતી
हिन्दी
hrvatski
magyar
հայերեն
Indonesia
íslenska
italiano
italiano (Svizzera)
עברית (ישראל)
日本語
ქართული
ខ្មែរ
ಕನ್ನಡ
한국어
ລາວ
lietuvių
latviešu
മലയാളം
монгол
मराठी
Melayu
नेपाली
Nederlands
norsk bokmål (Norge)
polski
português (Brasil)
português (Portugal)
română
русский
සිංහල
slovenčina
slovenščina
српски
svenska
Kiswahili
தமிழ்
తెలుగు
ไทย
Türkçe
українська
اردو
Tiếng Việt
中文 (简体)
中文
中文 (繁體)
isiZulu
关于 - Google 地图
关于 - Google 地图
地图
跳到内容
更改语言或地区
CatalàDanskDeutschEestiEnglishEnglish (India)English (United Kingdom)EspañolEspañol (Latinoamérica)EuskaraFilipinoFrançaisFrançais (Canada)GalegoHrvatskiIndonesiaItalianoLatviešuLietuviųMagyarMelayuNederlandsNorsk Bokmål (Norge)PolskiPortuguêsPortuguês (Brasil)Português (Portugal)RomânăSlovenčinaSlovenščinaSuomiSvenskaTiếng ViệtTürkçeÍslenskaČeštinaΕλληνικάБългарскиРусскийСрпскиУкраїнськаעברית (ישראל)العربيةفارسیहिन्दीไทย中文 (简体)中文 (繁體)日本語한국어
立即试用
更改语言或地区
CatalàDanskDeutschEestiEnglishEnglish (India)English (United Kingdom)EspañolEspañol (Latinoamérica)EuskaraFilipinoFrançaisFrançais (Canada)GalegoHrvatskiIndonesiaItalianoLatviešuLietuviųMagyarMelayuNederlandsNorsk Bokmål (Norge)PolskiPortuguêsPortuguês (Brasil)Português (Portugal)RomânăSlovenčinaSlovenščinaSuomiSvenskaTiếng ViệtTürkçeÍslenskaČeštinaΕλληνικάБългарскиРусскийСрпскиУкраїнськаעברית (ישראל)العربيةفارسیहिन्दीไทย中文 (简体)中文 (繁體)日本語한국어
探索周边的世界
在世界各地或附近探索新体验
探索周边世界
借助焕然一新的“探索”标签页,探寻您周边或旅行目的地的美食和推荐活动
专为您推荐
查看系统根据您的兴趣为您推荐的新地点和热门地点
创建列表
轻松创建您想去的地点列表,以及为您保存的地点添加备注。您可以将这些列表设为“不公开”,也可以将其分享给好友,亦或公开共享这些列表。此外,您还可以浏览发布商、本地向导或 Google 创建的列表
1
2
3
与您感兴趣的地点建立联系,将计划付诸实践
关注您喜爱的商家
关注您喜爱的商家后,即可随时掌握他们提供的优惠、最新动态等内容
提前预订
只需点按几下即可预订、预约或购票
了解详情
快速获取答案
直接在 Google 地图上给商家发消息,了解相关信息
1
2
3
探索周边世界
获取实时路况更新
掌握交通拥堵、交通事故、封路情况和移动测速装置的实时动态,找出最佳驾车路线。您也可以自行报告交通事故,让其他司机及时掌握最新情况
无需动手即可通过 Google 助理获取帮助
Google 助理现已与 Google 地图集成,因此您可以在驾车时发消息、打电话、听音乐,无需动手即可获取帮助。只需说“Ok Google”即可开始使用
获取公共交通的实时动态更新
获取公交车和火车的最新动态(例如发车时间和公交车的拥挤程度)。您还可以在地图上查看所乘公交车的位置,这样您就知道是否需要加快步伐赶往公交站
放心地探索新地点
开启 Google 地图中的实景功能,虚拟的箭头和方向标将与现实世界叠加,帮助您认清前进路线。大大减少犹疑和错过转向的次数
1
2
3
4
在世界各地或附近探索新体验
探索周边世界
借助焕然一新的“探索”标签页,探寻您周边或旅行目的地的美食和推荐活动
专为您推荐
查看系统根据您的兴趣为您推荐的新地点和热门地点
创建列表
轻松创建您想去的地点列表,以及为您保存的地点添加备注。您可以将这些列表设为“不公开”,也可以将其分享给好友,亦或公开共享这些列表。此外,您还可以浏览发布商、本地向导或 Google 创建的列表
与您感兴趣的地点建立联系,将计划付诸实践
关注您喜爱的商家
关注您喜爱的商家后,即可随时掌握他们提供的优惠、最新动态等内容
提前预订
只需点按几下即可预订、预约或购票
了解详情
快速获取答案
直接在 Google 地图上给商家发消息,了解相关信息
探索周边世界
获取实时路况更新
掌握交通拥堵、交通事故、封路情况和移动测速装置的实时动态,找出最佳驾车路线。您也可以自行报告交通事故,让其他司机及时掌握最新情况
无需动手即可通过 Google 助理获取帮助
Google 助理现已与 Google 地图集成,因此您可以在驾车时发消息、打电话、听音乐,无需动手即可获取帮助。只需说“Ok Google”即可开始使用
获取公共交通的实时动态更新
获取公交车和火车的最新动态(例如发车时间和公交车的拥挤程度)。您还可以在地图上查看所乘公交车的位置,这样您就知道是否需要加快步伐赶往公交站
放心地探索新地点
开启 Google 地图中的实景功能,虚拟的箭头和方向标将与现实世界叠加,帮助您认清前进路线。大大减少犹疑和错过转向的次数
了解人们如何使用 Google 地图来探索周边世界,在地图上展现他们的社区和帮助他人
我们为什么要绘制世界地图
地图制作是一项古老的人类活动,也是令我们这些努力打造 Google 地图的人倍感荣幸、愿意继续追求的事业
加利福尼亚州山景城
更多故事
澳大利亚墨尔本
Mums who Map
Mums who Map 本地向导团体由妈妈们组成,致力于帮助家长在澳大利亚墨尔本寻找适合带儿童一起游玩的地点。
本地向导故事
汤加努库阿洛法
为汤加制作地图
Tania Wolfgramm 和 Wikuki Kingi 打算将汤加风貌添加到街景中,让世界各地的用户都能领略到汤加之美。
加拿大德文岛
美国国家航空航天局营地
Google 地图与火星研究所和美国国家航空航天局携手合作,记录了在德文岛上进行的研究,该岛是地球上与火星最为相似的地方。
意大利诺尔恰
为意大利灾后恢复工作绘制地图
一位本地向导记录了地震为意大利带来的影响,向全世界表明,他们仍需要各界伸出援手,帮助灾后恢复工作。
本地向导故事
印度喀拉拉邦
喀拉拉邦洪灾救援
Bobby Kurian 利用 Google 地图在喀拉拉邦洪灾救援中标记她父母的位置,使他们最终获救。
尼日利亚
支持女性的权利
在本地向导和 Google 地图的帮助下,Princess Ilonze 在地图上找到了医院和警察局,挽救了生命。
本地向导故事
印度
印度的儿童
印度扫盲项目与 Google 展开合作,通过本地向导上传的照片帮助学生探索世界。
本地向导故事
蒙大拿州博兹曼
向全世界展示博兹曼
一位本地向导受到启发,以独一无二的方式赞美并展示她的家乡。
本地向导故事
巴西圣保罗
制作献血站地图
巴西的本地向导 Adriano Anjos 在 Google 地图上标记了圣保罗的各个献血中心。
本地向导故事
英国伦敦
无障碍路线
Google 地图上的无障碍路线让 Meridtyh、Omari、Adam 和 Lucy 的出行变得更加轻松。
印度加尔各答
Plus 代码
Plus 代码可用于创建地理坐标,让那些之前没有具体地址的地点拥有了地址。
大峡谷国家公园
退伍军人划皮划艇穿越大峡谷
五位盲人(退伍军人)划皮划艇穿越大峡谷,并在街景上记录了他们的这次冒险。
Google 地图博客
阅读文章、访谈内容等,了解 Google 地图的新变化
Want the best prices for your trip? Google can help.
Take off to your next destination with Google Maps
Hip-hop dancers show Paris in a new light on Street View
了解详情
我们可以在更多方面助您一臂之力
欢迎查看以下这些相关产品
街景
通过 Google 地图中的街景功能,探索全球著名地标,发现自然奇观,并身临其境地参观各个地点
了解详情
Google 地球
借助 Google 地球,通过卫星图像、3D 建筑图像与 3D 地形图像,探索全球数百个城市
开始探索
本地向导
成为一名本地向导,帮助世界各地的用户寻找所有值得一看的地方和值得去体验的事。
注册
Google 我的商家
免费设置您的商家资料,让在 Google 上进行搜索的用户一眼就能看到您的商家,并更好地与客户沟通交流
开始使用
获取 Google 地图
可在电脑上使用
其他资源
Google 公交合作伙伴
Google Maps Platform
隐私权与安全
隐私权
条款
Google 大全
Google 产品
帮助
现在还有哪些可以看世界街景地图的网站? - 知乎
现在还有哪些可以看世界街景地图的网站? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册地图地图应用街景地图现在还有哪些可以看世界街景地图的网站?年初还能通过sosyes这个域名看谷歌的街景地图,后来发现不能用了,提示development use only.求推荐一个可以拖小人看世界街景地图的…显示全部 关注者70被浏览1,138,453关注问题写回答邀请回答好问题 19添加评论分享8 个回答默认排序无线潜水的 关注来吧,给你个可以访问的无需下载APP,点击谷歌地图菜单,拖动小黄人到地图就搞定!来吧,日月潭!来吧,埃菲尔铁塔!日月潭埃菲尔铁塔美国科罗拉多大峡谷,最深落差近2000米,感叹大自然鬼斧神工:地中海的希腊小岛伊亚,诗一样的白色房子,看日落的好地方:意大利北部Val di Funes美丽山村旅游小镇:远眺日本富士山:通过会员系统登录,小黄人直接拖到地图即可,而且新系统支持包括北京故宫,美国白宫等全球绝大部分景区街景的访问!!包括对个人发布在谷歌地图的360全景照片的访问!北京故宫(The Palace Museum)景点:编辑于 2022-02-24 15:44赞同 18355 条评论分享收藏喜欢收起粟粒米 关注 和大家分享一个可以看世界街景地图的软件, 名字叫做《谷歌地球》,因为最近不能发图,所以和大家口述吧,我尽量描述详细一些,不喜勿喷。安装:打开网页搜索《谷歌地球》,找到(Google地球),然后下载安装然后还需要下载另一个插件(ourplay),安卓的找到Ourplay(原谷歌空间)下载并安装,苹果的就搜索萍果版 使用:首先打开ourplay,在界面里倒入谷歌地球,然后在ourplay里打开就好了不用到抖音上去和别人买哦,别当一颗小韭菜感觉对你有帮助的话,点个赞吧,亲发布于 2020-08-22 11:46赞同 183 条评论分享收藏喜欢
Google 地球
Google 地球
Google 地球
概览
Google 地球版本
资源
关于 Google 地球的更多内容
Earth Engine
Earth Studio
Google 地球虚拟实境
Earth Outreach
启动 Google 地球
概览
Google 地球版本
资源
关于 Google 地球的更多内容
Earth Engine
Earth Studio
Google 地球虚拟实境
Earth Outreach
在 Apple App Store 中下载 Google 地球
在 Google Play 商店中下载 Google 地球
世界上最详尽的地球仪
攀登最高的山峰。探索世界各地的城市。探秘世界上最深的峡谷。
启动 Google 地球
在 Apple App Store 中下载 Google 地球
在 Google Play 商店中下载 Google 地球
启动 Google 地球
keyboard_arrow_down
制作故事和地图
With creation tools, you can draw on the map, add your photos and videos, customize your view, and share and collaborate with others.
在 Google 地球上制作您自己的地图或故事
在地图上绘制
添加地标以突显项目中的关键地点,或直接在地图上绘制线条和形状。
添加照片和视频
在您的地图上显示图片和视频,增添丰富的背景信息。
定制您的视图
倾斜地图以获得完美的 3D 景观,或深入探索街景以享受 360 度全方位体验,您尽可将 Google 地球用作一个巨细无遗的地球仪。
与全世界分享您的故事
您可以与他人协作,就像在 Google 文档中协作一样简单,也可以以演示文稿的形式分享您的故事。
Adding placemarks and lines to Google Earth.
Adding a photo to a place.
Adding Street View and a 3D view to a Google Earth project.
Viewing your story as a presentation and sharing it with a collaborator.
寻找您喜欢的地方
通过卫星图像、3D 建筑图像与 3D 地形图像,探索全球数百个城市。您可以缩放到您的房屋或任何其他地方,然后利用街景功能,进行 360° 全方位的深入探索。
利用“探索者”功能选择自己的冒险之旅
全球一流讲故事能手、科学家和非营利组织带您游览全球。深入体验全新文化,检验自己对世界的认知。
抓到神偷卡门
世界上最厉害的神偷重出江湖!请根据线索找到她!
在 Google 地球中启动
地球视图
探索 Google 地球中那些最神秘、最引人注目的风景。
在 Google 地球中启动
这就是我们的家
在街景中参观世界各地的传统住宅,了解“家”之定义中哪些要素在变化,哪些要素永恒不变。
在 Google 地球中启动
圣诞岛上的螃蟹迁徙
全程跟踪红蟹迁徙,看它们从圣诞岛森林中爬出,浩浩荡荡前往海滩产卵。
在 Google 地球中启动
从太空阅读字母表
利用美国国家航空航天局卫星图像与航拍照片中的地球表面图像,拼出英文字母表。
在 Google 地球中启动
抓到神偷卡门
世界上最厉害的神偷重出江湖!请根据线索找到她!
在 Google 地球中启动
地球视图
探索 Google 地球中那些最神秘、最引人注目的风景。
在 Google 地球中启动
这就是我们的家
在街景中参观世界各地的传统住宅,了解“家”之定义中哪些要素在变化,哪些要素永恒不变。
在 Google 地球中启动
圣诞岛上的螃蟹迁徙
全程跟踪红蟹迁徙,看它们从圣诞岛森林中爬出,浩浩荡荡前往海滩产卵。
在 Google 地球中启动
从太空阅读字母表
利用美国国家航空航天局卫星图像与航拍照片中的地球表面图像,拼出英文字母表。
在 Google 地球中启动
在任何设备上体验 Google 地球
查看所有 Google 地球版本
Google 地球(网页版)
支持 Chrome(更多浏览器版本即将推出)。
Google 地球(移动版)
轻轻滑动指尖即可探索地球。支持 Android 和 iOS 设备。
Google 地球专业版(桌面版)
借助先进的工具在 PC、Mac 或 Linux 上制作地图。
使用 Google 地球讲述您的故事
看看这三位如何使用 Google 地球保护河流、激励学生并重游其出生的国度。
玩游戏
Google 地球的实际运用
印度扫盲项目与 Google 地球合作,带领孩子们在印度开展虚拟实地考察,认识自己身边的世界。
玩游戏
3D 图像背后的故事
Google 地球为我们居住的星球提供最逼真的数字实景图像。这些图像源于何处?如何组合在一起?多久更新一次?观看此视频,了解图像像素、图像平面,以及 Google 地球 3D 图像的制作者。
玩游戏
Geo for Good
2018 年,公益地图与技术专家齐聚加利福尼亚,共同探讨 Google 绘图工具,挥洒对造福地球的热忱。
玩游戏
Google 地球使用入门
Google 地球(移动版)使用入门
这里不仅有所有您喜爱的 Google 地球元素,更有探索、学习和分享的全新方式。放大来看看有什么冒险正等待着您。
启动 Google 地球
在 Apple App Store 中下载 Google 地球
在 Google Play 商店中下载 Google 地球
启动 Google 地球
Google 地球
Google 地球版本
资源
帮助和支持
Earth Studio
Earth Engine
Google 地球虚拟实境
Earth Outreach
YouTube
Blog
简介
隐私权和条款
العربية
Български
Català
Čeština
Dansk
Deutsch
Ελληνικά
English
English (United Kingdom)
English (India)
Español
Español (Latinoamérica)
فارسی
Suomi
Filipino
Français
עברית
हिन्दी
Hrvatski
Magyar
Indonesia
Italiano
日本語
한국어
Lietuvių
Latviešu
Melayu
Nederlands
Norsk bokmål
Polski
Português (Brasil)
Português (Portugal)
Română
Русский
Slovenčina
Slovenščina
Српски
Svenska
ไทย
Türkçe
Українська
Tiếng Việt
中文 (简体, 中国)
中文 (繁體,香港)
中文 (繁體, 台灣)
Select your language
街景服务 | Maps JavaScript API | Google for Developers
街景服务 | Maps JavaScript API | Google for Developers
Maps Platform
概览
产品
定价
文档
开始使用
开始使用 Google Maps Platform
API 选择工具
结算与定价
报告与监控
地图 ID
常见问题解答
支持和资源
客户服务
突发事件管理
地图
Maps JavaScript API
Maps SDK for Android
Maps SDK for iOS
Maps Static API
Street View Static API
Maps Embed API
地图网址
Maps Elevation API
路线
Routes API
Roads API
Directions API
Distance Matrix API
解决方案
行业解决方案
Mobility 服务
地点
Places API
Places SDK for Android
Places SDK for iOS
Maps JavaScript API 地点库
Geocoding API
Geolocation API
Address Validation API
Time Zone API
其他资源
API 安全性最佳实践
地图覆盖范围详情
优化指南
移动操作系统和软件支持
发布阶段
弃用
资产跟踪方案
网址编码
WordPress 用户
博客
社区
Stack Overflow
GitHub
YouTube
Discord
问题跟踪器
English
Deutsch
Español
Español – América Latina
Français
Indonesia
Italiano
Polski
Português – Brasil
Tiếng Việt
Türkçe
Русский
עברית
العربيّة
فارسی
हिंदी
বাংলা
ภาษาไทย
中文 – 简体
中文 – 繁體
日本語
한국어
Web
Maps JavaScript API
开始使用
联系销售团队
指南
参考信息
示例
支持
Maps Platform
概览
产品
定价
文档
更多
指南
参考信息
示例
支持
博客
社区
更多
Maps JavaScript API
概览
设置您的 Google Cloud 项目
使用 API 密钥
加载 Maps JavaScript API
教程
所有教程
向网站添加带标记的 Google 地图
为标记划分聚类
实时协作绘制地图
显示当前位置
在地图中使用数据
显示 KML导入 JSON 数据直观呈现 JSON 数据合并 JSON 数据
概念
所有概念
地图类型
地图和图块坐标
将地图本地化
版本控制
最佳实践
使用 TypeScript
promise
管理标记标签冲突
自定义地图
使用云端地图样式设置进行自定义
概览地图样式编辑器演示管理地图样式使用缩放级别自定义地图注点行为自定义建筑物样式样式设置示例设计核对清单
使用 JSON 样式设置进行自定义
JSON 样式设置概览JSON 样式参考
自定义图例
与地图互动
控件
事件
控制缩放和平移
在地图上绘制
概览
高级标记(预览版)
概览开始使用创建默认的高级标记自定义基本标记创建带有图形的标记使用自定义 HTML 创建标记控制冲突行为和标记的可见性使标记可点击且可访问
标记
自定义标记
信息窗口
形状
符号
WebGL 功能
概览支持矢量地图倾斜与旋转WebGL 叠加层视图
Deck.gl 数据可视化
地面叠加层
自定义叠加层
显示数据
概览
数据驱动型样式(预览版)
概览开始使用设置边界多边形的样式制作分级着色地图处理点击事件使用 Region Lookup API将 Region Find API 与 Google 表格搭配使用使用 Geocoding API 和 Places API 来设置数据驱动型样式Google 边界覆盖范围
数据图层
热图
KML 和 GeoRSS
路况图层、公交图层和骑行图层
服务
路线
距离矩阵
海拔
地理编码
图像最大缩放级别
街景
库
概览
绘图库
几何图形库
Local Context Library(Beta 版)
概览使用入门设置 Local Context 选项和地图选项处理事件和用户互动刷新搜索属性设置 LocalContextMapView 的样式支持的地点类型将地图迁移到 LocalContextMapView
地点库
地点类(预览版)地点搜索和详情地点自动补全(新)(实验阶段)地点自动补全
可视化库
开源库
更多指南
内容安全政策指南
Google 加载器迁移指南
地点字段迁移(open_now、utc_offset)
地点数据字段
地点图标
地点 ID
地点类型
从 v2 升级到 v3
政策和条款
使用量和结算
报告与监控
服务条款
其他 API
Maps Static API
Street View Static API
Maps Embed API
地图网址
开始使用
开始使用 Google Maps Platform
API 选择工具
结算与定价
报告与监控
地图 ID
常见问题解答
支持和资源
客户服务
突发事件管理
地图
Maps JavaScript API
Maps SDK for Android
Maps SDK for iOS
Maps Static API
Street View Static API
Maps Embed API
地图网址
Maps Elevation API
路线
Routes API
Roads API
Directions API
Distance Matrix API
解决方案
行业解决方案
Mobility 服务
地点
Places API
Places SDK for Android
Places SDK for iOS
Maps JavaScript API 地点库
Geocoding API
Geolocation API
Address Validation API
Time Zone API
其他资源
API 安全性最佳实践
地图覆盖范围详情
优化指南
移动操作系统和软件支持
发布阶段
弃用
资产跟踪方案
网址编码
WordPress 用户
Stack Overflow
GitHub
YouTube
Discord
问题跟踪器
首页
产品
Google Maps Platform
文档
Web
Maps JavaScript API
街景服务
概览
选择平台:
Android
iOS
JavaScript
另请参阅 Maps JavaScript API 参考文档:渲染、服务
Google 街景提供整个覆盖区域内以指定道路为中心的 360 度全景视图。街景的 API 覆盖范围与 Google 地图应用 (https://maps.google.com/) 的覆盖范围相同。要获取街景当前支持的城市列表,请访问 Google 地图网站。
注意:街景图像有两个来源:Google(开发者控制的非公开图像)和公众(公开的用户生成的内容,简称 UGC)。请注意,无法只使用其中一个街景图像来源。详细了解我们的街景图像隐私权政策。
以下显示了一个示例街景图像。
Maps JavaScript API 提供了街景服务,用于获取和处理 Google 地图街景中使用的图像。浏览器原生支持该街景服务。
街景地图使用
尽管街景可在独立 DOM 元素内使用,但其在表示地图上的位置时最有用。地图上会默认启用街景,并且街景小人控件会集成到导航(缩放和平移)控件中。您可以在地图的 MapOptions 中将 streetViewControl 设置为 false,以便隐藏该控件。您还可以通过将 Map 的 streetViewControlOptions.position 属性设置为新的 ControlPosition 来更改街景控件的默认位置。
借助街景小人控件,您可以直接在地图内查看街景全景图片。当用户点击并按住街景小人时,地图会进行更新,在支持街景的街道周围显示蓝色轮廓,从而带来与 Google 地图应用类似的用户体验。
用户在街道上放置街景小人标记时,地图也会进行更新,以显示所指示位置的街景全景图片。
街景全景图片
注意:我们仅针对使用 StreetViewPanorama 对象生成的街景全景图片收费。基于街景小人控件和 StreetViewService 获得的内置街景体验不会产生费用。如需了解详情,请参阅定价。
通过使用 StreetViewPanorama 对象可支持街景图像,该对象提供了街景“查看器”的 API 接口。每张地图均包含一幅默认的街景全景图片,您可以通过调用地图的 getStreetView() 方法对其进行检索。当您通过将地图的 streetViewControl 选项设置为 true 在地图上添加街景控件时,会自动将街景小人控件与此默认街景全景图片相关联。
您也可以创建自己的 StreetViewPanorama 对象,然后将地图的 streetView 属性显式设置为该构造对象,从而将地图设置为使用该对象而非默认的街景全景图片。如果您想修改默认行为,例如在地图和全景图片之间自动共享叠加层,则可能希望覆盖默认全景图片。(请参阅下文的街景内的叠加层)。
街景容器
您也可能希望在单独的 DOM 元素(通常为
注意:尽管街景功能设计为与地图结合使用,但这并非强制性要求。您也可以在不使用地图的情况下独立使用街景对象。
街景位置和视角 (POV)
StreetViewPanorama 构造函数还可让您使用 StreetViewOptions 参数设置街景位置和视角。您可以在构造完成后对该对象调用
setPosition() 和 setPov() 来更改其位置和 POV。
街景位置会定义图像的相机焦点位置,但不会定义该图像的相机朝向。为此,StreetViewPov 对象会定义以下两个属性:
heading(默认值为 0),以相对于正北方的度数定义以相机所在地为中心的旋转角度。方位按顺时针进行测量(90 度表示正东)。
pitch(默认值为 0),定义与相机初始默认倾斜度的“向上”或“向下”角度差值。相机的初始默认倾斜度通常(但并不总是)为水平。(例如,在山上拍摄的图像可能会呈现出非水平的默认倾斜度。)当相机仰视时,测量出的倾斜角度为正值(最大 +90 度,表示垂直向上,与默认倾斜度正交);当相机俯视时,测量出的倾斜角度为负值(最大 -90 度,表示垂直向下,与默认间距正交)。
StreetViewPov 对象最常用于确定街景相机的视角。您还可通过 StreetViewPanorama.getPhotographerPov() 方法确定拍摄者的视角,该视角通常是汽车或街景三轮车所面向的方向。
以下代码将显示一张初始视角为芬威球场的波士顿地图。选择街景小人并将其拖放到地图上某个支持的位置可更改街景全景图片:
TypeScript
function initialize() {
const fenway = { lat: 42.345573, lng: -71.098326 };
const map = new google.maps.Map(
document.getElementById("map") as HTMLElement,
{
center: fenway,
zoom: 14,
}
);
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano") as HTMLElement,
{
position: fenway,
pov: {
heading: 34,
pitch: 10,
},
}
);
map.setStreetView(panorama);
}
declare global {
interface Window {
initialize: () => void;
}
}
window.initialize = initialize;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
function initialize() {
const fenway = { lat: 42.345573, lng: -71.098326 };
const map = new google.maps.Map(document.getElementById("map"), {
center: fenway,
zoom: 14,
});
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano"),
{
position: fenway,
pov: {
heading: 34,
pitch: 10,
},
}
);
map.setStreetView(panorama);
}
window.initialize = initialize;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#map,
#pano {
float: left;
height: 100%;
width: 50%;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
移动设备上的动作跟踪功能
在支持设备屏幕方向事件的设备上,用户可以通过 API 随设备的移动改变街景视角。用户可通过移动设备环视四周。这叫做动作跟踪或设备旋转跟踪。
作为应用开发者,您可以按照以下方式更改默认行为:
启用或停用动作跟踪功能。默认情况下,在任何支持动作跟踪的设备上,该功能都处于启用状态。以下示例将停用动作跟踪,但仍使动作跟踪控件保持可见状态。(请注意,用户可通过点按动作跟踪控件启用该功能。)
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'), {
position: {lat: 37.869260, lng: -122.254811},
pov: {heading: 165, pitch: 0},
motionTracking: false
});
隐藏或显示动作跟踪控件。默认情况下,支持动作跟踪的设备上会显示该控件。用户可以点按该控件来开启或关闭动作跟踪功能。请注意,如果设备不支持动作跟踪,无论 motionTrackingControl 的值是什么,该控件都不会显示。
以下示例将同时停用动作跟踪功能和动作跟踪控件。在此情况下,用户无法开启动作跟踪功能:
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'), {
position: {lat: 37.869260, lng: -122.254811},
pov: {heading: 165, pitch: 0},
motionTracking: false,
motionTrackingControl: false
});
更改动作跟踪控件的默认位置。默认情况下,该控件会显示在靠近全景图片右下角(位置 RIGHT_BOTTOM)的位置。以下示例会将控件的位置设置成左下角:
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'), {
position: {lat: 37.869260, lng: -122.254811},
pov: {heading: 165, pitch: 0},
motionTrackingControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
}
});
要了解动作跟踪的实用效果,请在移动设备(或任何支持设备屏幕方向事件的设备)上查看以下示例:
查看示例
街景内的叠加层
默认的 StreetViewPanorama 对象支持在本地显示地图叠加层。叠加层通常在“街道级别”显示,并锚定在 LatLng 位置。(例如,显示标记时,其尾部会锚定于街景全景图片内相应位置的水平面。)
目前,街景全景图片支持的叠加层类型仅限于 Marker、InfoWindow 和自定义 OverlayView。您在地图上显示的叠加层可显示在街景全景图片上,方法是将全景图片视为 Map 对象的替代项,调用 setMap(),并以参数形式传递 StreetViewPanorama(而非地图)。同样,通过调用 open(),然后传递 StreetViewPanorama() 而不是地图,也可以在街景全景图片中打开信息窗口。
此外,在创建使用默认 StreetViewPanorama 的地图时,只要与地图关联的街景全景图片可见,则在地图上创建的任何标记都会自动与其共享。要检索默认街景全景图片,请对 Map 对象调用 getStreetView()。请注意,如果您将地图的 streetView 属性显式设置为您自己构造的 StreetViewPanorama,则会覆盖默认全景图片。
以下示例将显示一些标记,用于表示纽约市阿斯特广场周围的不同位置。将显示画面切换到街景可显示 StreetViewPanorama 内显示的共享标记。
TypeScript
let panorama: google.maps.StreetViewPanorama;
function initMap(): void {
const astorPlace = { lat: 40.729884, lng: -73.990988 };
// Set up the map
const map = new google.maps.Map(
document.getElementById("map") as HTMLElement,
{
center: astorPlace,
zoom: 18,
streetViewControl: false,
}
);
document
.getElementById("toggle")!
.addEventListener("click", toggleStreetView);
// Set up the markers on the map
const cafeMarker = new google.maps.Marker({
position: { lat: 40.730031, lng: -73.991428 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=cafe|FFFF00",
title: "Cafe",
});
const bankMarker = new google.maps.Marker({
position: { lat: 40.729681, lng: -73.991138 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=dollar|FFFF00",
title: "Bank",
});
const busMarker = new google.maps.Marker({
position: { lat: 40.729559, lng: -73.990741 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=bus|FFFF00",
title: "Bus Stop",
});
// We get the map's default panorama and set up some defaults.
// Note that we don't yet set it visible.
panorama = map.getStreetView()!; // TODO fix type
panorama.setPosition(astorPlace);
panorama.setPov(
/** @type {google.maps.StreetViewPov} */ {
heading: 265,
pitch: 0,
}
);
}
function toggleStreetView(): void {
const toggle = panorama.getVisible();
if (toggle == false) {
panorama.setVisible(true);
} else {
panorama.setVisible(false);
}
}
declare global {
interface Window {
initMap: () => void;
}
}
window.initMap = initMap;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
let panorama;
function initMap() {
const astorPlace = { lat: 40.729884, lng: -73.990988 };
// Set up the map
const map = new google.maps.Map(document.getElementById("map"), {
center: astorPlace,
zoom: 18,
streetViewControl: false,
});
document.getElementById("toggle").addEventListener("click", toggleStreetView);
// Set up the markers on the map
const cafeMarker = new google.maps.Marker({
position: { lat: 40.730031, lng: -73.991428 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=cafe|FFFF00",
title: "Cafe",
});
const bankMarker = new google.maps.Marker({
position: { lat: 40.729681, lng: -73.991138 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=dollar|FFFF00",
title: "Bank",
});
const busMarker = new google.maps.Marker({
position: { lat: 40.729559, lng: -73.990741 },
map,
icon: "https://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=bus|FFFF00",
title: "Bus Stop",
});
// We get the map's default panorama and set up some defaults.
// Note that we don't yet set it visible.
panorama = map.getStreetView(); // TODO fix type
panorama.setPosition(astorPlace);
panorama.setPov(
/** @type {google.maps.StreetViewPov} */ {
heading: 265,
pitch: 0,
}
);
}
function toggleStreetView() {
const toggle = panorama.getVisible();
if (toggle == false) {
panorama.setVisible(true);
} else {
panorama.setVisible(false);
}
}
window.initMap = initMap;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#floating-panel {
position: absolute;
top: 10px;
left: 25%;
z-index: 5;
background-color: #fff;
padding: 5px;
border: 1px solid #999;
text-align: center;
font-family: "Roboto", "sans-serif";
line-height: 30px;
padding-left: 10px;
}
#floating-panel {
margin-left: -100px;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
街景事件
在街景之间导航或操纵其朝向时,您可能希望监控指示 StreetViewPanorama 状态变化的若干事件:
pano_changed,在单个全景图片 ID 发生改变时触发。此事件不能保证触发此事件时全景图片内的任何关联数据(如链接)也发生了改变;此事件仅表示全景图片 ID 发生了改变。请注意,全景图片 ID(可用于引用相应全景图片)只在当前浏览器会话内保持稳定。
position_changed,在全景图片的底层 (LatLng) 位置发生改变时触发。旋转全景图片不会触发此事件。请注意,您可以在不改变关联全景图片 ID 的情况下改变全景图片的底层位置,因为 API 会自动将距离最近的全景图片 ID 与全景图片的位置关联。
pov_changed,在街景的 StreetViewPov 发生改变时触发。请注意,此事件可能会在位置和全景图片 ID 均保持稳定的情况下触发。
links_changed,在街景的链接发生改变时触发。请注意,此事件可能会在 pano_changed 指示全景图片 ID 发生改变后异步触发。
visible_changed,在街景的可见性发生改变时触发。请注意,此事件可能会在 pano_changed 指示全景图片 ID 发生改变后异步触发。
以下代码展示了如何处理这些事件以收集关于底层 StreetViewPanorama 的数据:
TypeScript
function initPano() {
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano") as HTMLElement,
{
position: { lat: 37.869, lng: -122.255 },
pov: {
heading: 270,
pitch: 0,
},
visible: true,
}
);
panorama.addListener("pano_changed", () => {
const panoCell = document.getElementById("pano-cell") as HTMLElement;
panoCell.innerHTML = panorama.getPano();
});
panorama.addListener("links_changed", () => {
const linksTable = document.getElementById("links_table") as HTMLElement;
while (linksTable.hasChildNodes()) {
linksTable.removeChild(linksTable.lastChild as ChildNode);
}
const links = panorama.getLinks();
for (const i in links) {
const row = document.createElement("tr");
linksTable.appendChild(row);
const labelCell = document.createElement("td");
labelCell.innerHTML = "Link: " + i + "";
const valueCell = document.createElement("td");
valueCell.innerHTML = links[i].description as string;
linksTable.appendChild(labelCell);
linksTable.appendChild(valueCell);
}
});
panorama.addListener("position_changed", () => {
const positionCell = document.getElementById(
"position-cell"
) as HTMLElement;
(positionCell.firstChild as HTMLElement).nodeValue =
panorama.getPosition() + "";
});
panorama.addListener("pov_changed", () => {
const headingCell = document.getElementById("heading-cell") as HTMLElement;
const pitchCell = document.getElementById("pitch-cell") as HTMLElement;
(headingCell.firstChild as HTMLElement).nodeValue =
panorama.getPov().heading + "";
(pitchCell.firstChild as HTMLElement).nodeValue =
panorama.getPov().pitch + "";
});
}
declare global {
interface Window {
initPano: () => void;
}
}
window.initPano = initPano;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
function initPano() {
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano"),
{
position: { lat: 37.869, lng: -122.255 },
pov: {
heading: 270,
pitch: 0,
},
visible: true,
}
);
panorama.addListener("pano_changed", () => {
const panoCell = document.getElementById("pano-cell");
panoCell.innerHTML = panorama.getPano();
});
panorama.addListener("links_changed", () => {
const linksTable = document.getElementById("links_table");
while (linksTable.hasChildNodes()) {
linksTable.removeChild(linksTable.lastChild);
}
const links = panorama.getLinks();
for (const i in links) {
const row = document.createElement("tr");
linksTable.appendChild(row);
const labelCell = document.createElement("td");
labelCell.innerHTML = "Link: " + i + "";
const valueCell = document.createElement("td");
valueCell.innerHTML = links[i].description;
linksTable.appendChild(labelCell);
linksTable.appendChild(valueCell);
}
});
panorama.addListener("position_changed", () => {
const positionCell = document.getElementById("position-cell");
positionCell.firstChild.nodeValue = panorama.getPosition() + "";
});
panorama.addListener("pov_changed", () => {
const headingCell = document.getElementById("heading-cell");
const pitchCell = document.getElementById("pitch-cell");
headingCell.firstChild.nodeValue = panorama.getPov().heading + "";
pitchCell.firstChild.nodeValue = panorama.getPov().pitch + "";
});
}
window.initPano = initPano;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#floating-panel {
position: absolute;
top: 10px;
left: 25%;
z-index: 5;
background-color: #fff;
padding: 5px;
border: 1px solid #999;
text-align: center;
font-family: "Roboto", "sans-serif";
line-height: 30px;
padding-left: 10px;
}
#pano {
width: 50%;
height: 100%;
float: left;
}
#floating-panel {
width: 45%;
height: 100%;
float: right;
text-align: left;
overflow: auto;
position: static;
border: 0px solid #999;
}
style.css
HTML
Position | |
POV Heading | 270 |
POV Pitch | 0.0 |
Pano ID |
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
街景控件
当显示 StreetViewPanorama 时,全景图片上会默认显示各种控件。您可以通过将 StreetViewPanoramaOptions 中的相应字段设置为 true 或 false 来启用或停用这些控件:
panControl,可用于旋转全景图片。默认情况下,此控件显示为标准集成式罗盘和平移控件。您可以通过在 panControlOptions 字段内提供 PanControlOptions 来更改该控件的位置。
zoomControl,可用于在图像内进行缩放。默认情况下,此控件显示在靠近全景图片右下角的位置。您可以通过在 zoomControlOptions 字段内提供 ZoomControlOptions 来更改该控件的外观。
addressControl,可提供表示关联位置地址的文本叠加层,并提供在 Google 地图中打开该位置的链接。您可以通过在 addressControlOptions 字段内提供 StreetViewAddressControlOptions 来更改该控件的外观。
fullscreenControl,可提供以全屏模式打开街景的选项。您可以通过在 fullscreenControlOptions 字段内提供 FullscreenControlOptions 来更改该控件的外观。
motionTrackingControl,可提供用于在移动设备上启用或停用动作跟踪的选项。该控件只会出现在支持设备屏幕方向事件的设备上。默认情况下,该控件显示在靠近全景图片右下角的位置。您可以通过提供 MotionTrackingControlOptions 来更改该控件的位置。如需了解详情,请参阅有关动作跟踪的部分。
linksControl,可在图像上提供用于切换到相邻全景图像的指示箭头。
Close 控件,允许用户关闭街景查看器。您可以通过将 enableCloseButton 设置为 true 或 false 来启用或停用 Close 控件。
以下示例将更改关联街景内显示的控件并移除该视图的链接:
TypeScript
function initPano() {
// Note: constructed panorama objects have visible: true
// set by default.
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("map") as HTMLElement,
{
position: { lat: 42.345573, lng: -71.098326 },
addressControlOptions: {
position: google.maps.ControlPosition.BOTTOM_CENTER,
},
linksControl: false,
panControl: false,
enableCloseButton: false,
}
);
}
declare global {
interface Window {
initPano: () => void;
}
}
window.initPano = initPano;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
function initPano() {
// Note: constructed panorama objects have visible: true
// set by default.
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("map"),
{
position: { lat: 42.345573, lng: -71.098326 },
addressControlOptions: {
position: google.maps.ControlPosition.BOTTOM_CENTER,
},
linksControl: false,
panControl: false,
enableCloseButton: false,
}
);
}
window.initPano = initPano;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
直接访问街景数据
您可能希望以编程方式确定街景数据的可用性,或返回有关特定全景图片的信息,而无需直接处理地图/全景图片。您可以使用 StreetViewService 对象来实现此目的,该对象提供了一个连接 Google 街景服务内所存储数据的接口。
街景服务请求
由于 Google Maps API 需要调用外部服务器,因此对街景服务的访问是异步进行的。因此,您需要传递一个回调方法,以便在请求完成时执行。该回调方法会对结果进行处理。
您可以使用 StreetViewPanoRequest 或 StreetViewLocationRequest 向 StreetViewService 发出请求。
如果指定了可唯一标识全景图片的参考 ID,使用 StreetViewPanoRequest 的请求会返回相应的全景图片数据。请注意,这些参考 ID 仅在该全景图像的生命周期内保持稳定。
使用 StreetViewLocationRequest 的请求会使用以下参数在指定位置搜索全景图片数据:
location,用于指定搜索全景图片的位置(纬度和经度)。
preference,用于设置偏好设置,确定应在半径范围内查找怎样的全景图片:离指定位置最近的全景图片,还是半径范围内最好的全景图片。
radius,用于设置半径,以米为单位,以指定的纬度和经度为中心按该半径搜索全景图片。如果未提供该参数,则默认为 50。
source,用于指定要搜索的全景图片来源。有效值为:
default,使用默认街景来源;搜索不限于特定来源。
outdoor,仅搜索室外全景图片。请注意,指定位置可能不存在室外全景图片。
街景服务响应
函数 getPanorama() 需要一个在通过街景服务检索到结果后执行的回调函数。此回调函数会按照先数据后代码的顺序返回 StreetViewPanoramaData 对象内的一组全景图片数据,以及一个表示请求状态的 StreetViewStatus 代码。
StreetViewPanoramaData 对象规范包含关于街景全景图片的元数据,具体形式如下:
{
"location": {
"latLng": LatLng,
"description": string,
"pano": string
},
"copyright": string,
"links": [{
"heading": number,
"description": string,
"pano": string,
"roadColor": string,
"roadOpacity": number
}],
"tiles": {
"worldSize": Size,
"tileSize": Size,
"centerHeading": number
}
}
请注意,此数据对象本身并不是 StreetViewPanorama 对象。要使用此数据创建一个街景对象,您需要创建一个 StreetViewPanorama 并调用 setPano(),然后向其传递返回的 location.pano 字段中注明的 ID。
status 代码可能会返回以下某个值:
OK,表示服务找到了匹配的全景图片。
ZERO_RESULTS,表示服务无法找到与传递的标准相匹配的全景图片。
UNKNOWN_ERROR,表示无法处理街景请求,但具体原因未知。
以下代码将创建一个 StreetViewService,它通过创建标记来响应用户在地图上的点击。用户点击该标记时,系统会显示该位置的 StreetViewPanorama。该代码会使用从服务返回的 StreetViewPanoramaData 的内容。
TypeScript
/*
* Click the map to set a new location for the Street View camera.
*/
let map: google.maps.Map;
let panorama: google.maps.StreetViewPanorama;
function initMap(): void {
const berkeley = { lat: 37.869085, lng: -122.254775 };
const sv = new google.maps.StreetViewService();
panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano") as HTMLElement
);
// Set up the map.
map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
center: berkeley,
zoom: 16,
streetViewControl: false,
});
// Set the initial Street View camera to the center of the map
sv.getPanorama({ location: berkeley, radius: 50 }).then(processSVData);
// Look for a nearby Street View panorama when the map is clicked.
// getPanorama will return the nearest pano when the given
// radius is 50 meters or less.
map.addListener("click", (event) => {
sv.getPanorama({ location: event.latLng, radius: 50 })
.then(processSVData)
.catch((e) =>
console.error("Street View data not found for this location.")
);
});
}
function processSVData({ data }: google.maps.StreetViewResponse) {
const location = data.location!;
const marker = new google.maps.Marker({
position: location.latLng,
map,
title: location.description,
});
panorama.setPano(location.pano as string);
panorama.setPov({
heading: 270,
pitch: 0,
});
panorama.setVisible(true);
marker.addListener("click", () => {
const markerPanoID = location.pano;
// Set the Pano to use the passed panoID.
panorama.setPano(markerPanoID as string);
panorama.setPov({
heading: 270,
pitch: 0,
});
panorama.setVisible(true);
});
}
declare global {
interface Window {
initMap: () => void;
}
}
window.initMap = initMap;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
/*
* Click the map to set a new location for the Street View camera.
*/
let map;
let panorama;
function initMap() {
const berkeley = { lat: 37.869085, lng: -122.254775 };
const sv = new google.maps.StreetViewService();
panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano")
);
// Set up the map.
map = new google.maps.Map(document.getElementById("map"), {
center: berkeley,
zoom: 16,
streetViewControl: false,
});
// Set the initial Street View camera to the center of the map
sv.getPanorama({ location: berkeley, radius: 50 }).then(processSVData);
// Look for a nearby Street View panorama when the map is clicked.
// getPanorama will return the nearest pano when the given
// radius is 50 meters or less.
map.addListener("click", (event) => {
sv.getPanorama({ location: event.latLng, radius: 50 })
.then(processSVData)
.catch((e) =>
console.error("Street View data not found for this location.")
);
});
}
function processSVData({ data }) {
const location = data.location;
const marker = new google.maps.Marker({
position: location.latLng,
map,
title: location.description,
});
panorama.setPano(location.pano);
panorama.setPov({
heading: 270,
pitch: 0,
});
panorama.setVisible(true);
marker.addListener("click", () => {
const markerPanoID = location.pano;
// Set the Pano to use the passed panoID.
panorama.setPano(markerPanoID);
panorama.setPov({
heading: 270,
pitch: 0,
});
panorama.setVisible(true);
});
}
window.initMap = initMap;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
提供自定义街景全景图片
Maps JavaScript API 支持在 StreetViewPanorama 对象内显示自定义全景图片。您可以利用自定义全景图片显示建筑内部、景点视图或任何您想像的内容。您甚至可以将这些自定义全景图片与 Google 的现有街景全景图片链接起来。
设置一组自定义全景图像涉及下列步骤:
为每幅自定义全景图片创建一幅基础全景图像。此基础图像使用的分辨率应为您想提供的放大图像的最高分辨率。
(可选但并非建议步骤)根据基础图像创建一组不同缩放级别下的全景图片图块。
创建自定义全景图片之间的链接。
(可选)在 Google 现有的街景图像内指定“入口”全景图片,并自定义自定义组与标准组之间的双向链接。
在 StreetViewPanoramaData 对象内定义每幅全景图像的元数据。
实现用于确定自定义全景图片数据和图像的方法,并在 StreetViewPanorama 对象内将该方法指定为自定义处理程序。
下文对此过程做了说明。
创建自定义全景图片
每幅街景全景图片都是一幅或一组图像,提供以单个位置为中心的 360 度全景视图。StreetViewPanorama 对象使用遵照等距柱状 (Plate Carrée) 投影的图像。此类投影包含 360 度水平视图(完整环绕一周)和 180 度垂直视图(从直上至直下)。这样的视野会导致图像的宽高比为 2:1。下方显示了一幅完整环绕一周的全景图片。
一般来说,要制作全景图像,您需要在一个位置拍摄多张照片,然后使用全景图片软件将这些照片拼接到一起。(如需了解详情,请参阅维基百科的照片拼接应用比较)。此类图像的“相机”位置(即拍摄每一幅全景图像的位置)应该相同。这样,生成的 360 度全景图片便可定义一个球面投影,其图像环绕在球面的二维表面上。
将全景图片视为采用直线坐标系的球面投影有助于将图像分解成直线图块,以及根据计算的图块坐标提供图像。
创建自定义全景图片图块
街景还支持利用缩放控件实现不同的图像详细程度,该控件允许您基于默认视图进行缩放。街景一般可为任何给定全景图像提供五种级别的缩放分辨率。如果您所有的缩放级别都采用一幅全景图像,那么该图像要么过大,这样会显著降低您应用的速度;要么在较高缩放级别下分辨率不佳,只能提供低像素图像。但幸运的是,我们可以在不同缩放级别下使用与提供 Google 地图图块时所用相似的设计模式,为各缩放级别下的全景图片提供分辨率适当的图像。
当 StreetViewPanorama 首次加载时,其默认显示的图像包括缩放级别为 1 的全景图片水平宽度的 25%(90 度圆弧)。此视野大致与人的正常视野一致。在此默认视野基础上“缩小”实质上是将圆弧变大,而放大则会将视野缩窄为更小的圆弧。StreetViewPanorama 会自动计算与所选缩放级别相适的视野,然后通过选择与水平视野尺寸大致相同的图块集,选择最适合该分辨率的图像。以下是视野与街景缩放级别的对应关系:
街景缩放级别
视野(度)
0
180
1(默认值)
90
2
45
3
22.5
4
11.25
请注意,街景内显示的图像尺寸完全取决于街景容器的屏幕尺寸(宽度)。如果您提供的容器较宽,服务仍会为任何给定缩放级别提供相同的视野,但可能会改为选择更适合该分辨率的图块。
由于每一幅全景图片都包括一个等距柱状投影,因此创建全景图片图块相对容易。由于投影提供的图像宽高比为 2:1,因此具有 2:1 宽高比的图块更便于使用,但方形图块可以在方形地图上带来更好的效果(因为视野将是方形的)。
对于宽高比为 2:1 的图块,一幅囊括整个全景图片的图像代表了缩放级别为 0 的整个全景图片“世界”(基础图像),缩放级别每提高一级,zoomLevel 图块就增加 4 个。(例如,当缩放级别为 2 时,整个全景图片包括 16 个图块。)注意:街景图块处理所使用的缩放级别并不直接对应于使用街景控件时提供的缩放级别;相反,街景控件缩放级别会选择一个视野 (FoV),然后系统再根据该视野选择合适的图块。
通常,您需要为图像图块命名,以便以编程方式选择它们。有关此类命名方案的介绍,请参阅下面的处理自定义全景图片请求。
处理自定义全景图片请求
要使用自定义全景图片,请调用 StreetViewPanorama.registerPanoProvider(),并指定自定义全景图片提供程序方法的名称。全景图片提供程序方法必须返回一个 StreetViewPanoramaData 对象,并具有以下签名:
Function(pano):StreetViewPanoramaData
StreetViewPanoramaData 对象的形式如下:
{
copyright: string,
location: {
description: string,
latLng: google.maps.LatLng,
pano: string
},
tiles: {
tileSize: google.maps.Size,
worldSize: google.maps.Size,
heading: number,
getTileUrl: Function
},
links: [
description: string,
heading: number,
pano: string,
roadColor: string,
roadOpacity: number
]
}
按如下所示显示自定义全景图片:
将 StreetViewPanoramaOptions.pano 属性设置为自定义值。
调用 StreetViewPanorama.registerPanoProvider(),以提供自定义全景图片提供程序函数。
实现自定义全景图片提供程序函数,以便处理指定的 pano 值。
构造一个 StreetViewPanoramaData 对象。
将 StreetViewTileData.getTileUrl 属性设置为您提供的自定义图块提供程序函数的名称。例如 getCustomPanoramaTileUrl。
实现您的自定义图块提供程序函数,如以下示例所示。
返回 StreetViewPanoramaData 对象。
注意:如果您希望显示自定义全景图片,请不要直接在 StreetViewPanorama 上设置 position,因为此类位置将会指示街景服务请求靠近该位置的默认街景图像。请改为在自定义 StreetViewPanoramaData 对象的 location.latLng 字段中设置此位置。
以下示例将显示 Google 悉尼分公司的自定义全景图片。请注意,此示例未使用地图或默认街景图像:
TypeScript
function initPano() {
// Set up Street View and initially set it visible. Register the
// custom panorama provider function. Set the StreetView to display
// the custom panorama 'reception' which we check for below.
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("map") as HTMLElement,
{ pano: "reception", visible: true }
);
panorama.registerPanoProvider(getCustomPanorama);
}
// Return a pano image given the panoID.
function getCustomPanoramaTileUrl(
pano: string,
zoom: number,
tileX: number,
tileY: number
): string {
return (
"https://developers.google.com/maps/documentation/javascript/examples/full/images/" +
"panoReception1024-" +
zoom +
"-" +
tileX +
"-" +
tileY +
".jpg"
);
}
// Construct the appropriate StreetViewPanoramaData given
// the passed pano IDs.
function getCustomPanorama(pano: string): google.maps.StreetViewPanoramaData {
if (pano === "reception") {
return {
location: {
pano: "reception",
description: "Google Sydney - Reception",
},
links: [],
// The text for the copyright control.
copyright: "Imagery (c) 2010 Google",
// The definition of the tiles for this panorama.
tiles: {
tileSize: new google.maps.Size(1024, 512),
worldSize: new google.maps.Size(2048, 1024),
// The heading in degrees at the origin of the panorama
// tile set.
centerHeading: 105,
getTileUrl: getCustomPanoramaTileUrl,
},
};
}
// @ts-ignore TODO fix typings
return null;
}
declare global {
interface Window {
initPano: () => void;
}
}
window.initPano = initPano;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
function initPano() {
// Set up Street View and initially set it visible. Register the
// custom panorama provider function. Set the StreetView to display
// the custom panorama 'reception' which we check for below.
const panorama = new google.maps.StreetViewPanorama(
document.getElementById("map"),
{ pano: "reception", visible: true }
);
panorama.registerPanoProvider(getCustomPanorama);
}
// Return a pano image given the panoID.
function getCustomPanoramaTileUrl(pano, zoom, tileX, tileY) {
return (
"https://developers.google.com/maps/documentation/javascript/examples/full/images/" +
"panoReception1024-" +
zoom +
"-" +
tileX +
"-" +
tileY +
".jpg"
);
}
// Construct the appropriate StreetViewPanoramaData given
// the passed pano IDs.
function getCustomPanorama(pano) {
if (pano === "reception") {
return {
location: {
pano: "reception",
description: "Google Sydney - Reception",
},
links: [],
// The text for the copyright control.
copyright: "Imagery (c) 2010 Google",
// The definition of the tiles for this panorama.
tiles: {
tileSize: new google.maps.Size(1024, 512),
worldSize: new google.maps.Size(2048, 1024),
// The heading in degrees at the origin of the panorama
// tile set.
centerHeading: 105,
getTileUrl: getCustomPanoramaTileUrl,
},
};
}
// @ts-ignore TODO fix typings
return null;
}
window.initPano = initPano;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
自定义全景图片提供程序会根据所传递的全景图片 ID、缩放级别和全景图片图块坐标返回合适的图块。由于图像选择取决于这些传递的值,因此根据这些传递的值对可以编程方式选择的图像命名(如 pano_zoom_tileX_tileY.png)很有帮助。
除默认街景导航箭头外,以下示例将为图像额外添加一个箭头,该箭头指向 Google 悉尼分公司并链接到自定义图像:
TypeScript
let panorama: google.maps.StreetViewPanorama;
// StreetViewPanoramaData of a panorama just outside the Google Sydney office.
let outsideGoogle: google.maps.StreetViewPanoramaData;
// StreetViewPanoramaData for a custom panorama: the Google Sydney reception.
function getReceptionPanoramaData(): google.maps.StreetViewPanoramaData {
return {
location: {
pano: "reception", // The ID for this custom panorama.
description: "Google Sydney - Reception",
latLng: new google.maps.LatLng(-33.86684, 151.19583),
},
links: [
{
heading: 195,
description: "Exit",
pano: (outsideGoogle.location as google.maps.StreetViewLocation).pano,
},
],
copyright: "Imagery (c) 2010 Google",
tiles: {
tileSize: new google.maps.Size(1024, 512),
worldSize: new google.maps.Size(2048, 1024),
centerHeading: 105,
getTileUrl: function (
pano: string,
zoom: number,
tileX: number,
tileY: number
): string {
return (
"https://developers.google.com/maps/documentation/javascript/examples/full/images/" +
"panoReception1024-" +
zoom +
"-" +
tileX +
"-" +
tileY +
".jpg"
);
},
},
};
}
function initPanorama() {
panorama = new google.maps.StreetViewPanorama(
document.getElementById("street-view") as HTMLElement,
{ pano: (outsideGoogle.location as google.maps.StreetViewLocation).pano }
);
// Register a provider for the custom panorama.
panorama.registerPanoProvider(
(pano: string): google.maps.StreetViewPanoramaData => {
if (pano === "reception") {
return getReceptionPanoramaData();
}
// @ts-ignore TODO fix typings
return null;
}
);
// Add a link to our custom panorama from outside the Google Sydney office.
panorama.addListener("links_changed", () => {
if (
panorama.getPano() ===
(outsideGoogle.location as google.maps.StreetViewLocation).pano
) {
panorama.getLinks().push({
description: "Google Sydney",
heading: 25,
pano: "reception",
});
}
});
}
function initMap(): void {
// Use the Street View service to find a pano ID on Pirrama Rd, outside the
// Google office.
new google.maps.StreetViewService()
.getPanorama({ location: { lat: -33.867386, lng: 151.195767 } })
.then(({ data }: google.maps.StreetViewResponse) => {
outsideGoogle = data;
initPanorama();
});
}
declare global {
interface Window {
initMap: () => void;
}
}
window.initMap = initMap;index.ts
注意:请参阅 TypeScript 和 Google 地图的使用方法指南。
JavaScript
let panorama;
// StreetViewPanoramaData of a panorama just outside the Google Sydney office.
let outsideGoogle;
// StreetViewPanoramaData for a custom panorama: the Google Sydney reception.
function getReceptionPanoramaData() {
return {
location: {
pano: "reception",
description: "Google Sydney - Reception",
latLng: new google.maps.LatLng(-33.86684, 151.19583),
},
links: [
{
heading: 195,
description: "Exit",
pano: outsideGoogle.location.pano,
},
],
copyright: "Imagery (c) 2010 Google",
tiles: {
tileSize: new google.maps.Size(1024, 512),
worldSize: new google.maps.Size(2048, 1024),
centerHeading: 105,
getTileUrl: function (pano, zoom, tileX, tileY) {
return (
"https://developers.google.com/maps/documentation/javascript/examples/full/images/" +
"panoReception1024-" +
zoom +
"-" +
tileX +
"-" +
tileY +
".jpg"
);
},
},
};
}
function initPanorama() {
panorama = new google.maps.StreetViewPanorama(
document.getElementById("street-view"),
{ pano: outsideGoogle.location.pano }
);
// Register a provider for the custom panorama.
panorama.registerPanoProvider((pano) => {
if (pano === "reception") {
return getReceptionPanoramaData();
}
// @ts-ignore TODO fix typings
return null;
});
// Add a link to our custom panorama from outside the Google Sydney office.
panorama.addListener("links_changed", () => {
if (panorama.getPano() === outsideGoogle.location.pano) {
panorama.getLinks().push({
description: "Google Sydney",
heading: 25,
pano: "reception",
});
}
});
}
function initMap() {
// Use the Street View service to find a pano ID on Pirrama Rd, outside the
// Google office.
new google.maps.StreetViewService()
.getPanorama({ location: { lat: -33.867386, lng: 151.195767 } })
.then(({ data }) => {
outsideGoogle = data;
initPanorama();
});
}
window.initMap = initMap;index.js
注意:所示 JavaScript 代码是从 TypeScript 代码段编译而来的。
CSS
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#street-view {
height: 100%;
}
style.css
HTML
index.html
查看示例
试用示例
Stackblitz.com
CodeSandbox.io
JSFiddle.net
GitPod.io
Google Cloud Shell
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2023-06-26。
Stack Overflow
在 google-maps 标签下提问。
GitHub
观摩我们的示例并自己动手练习。
Discord
与其他开发者讨论 Google Maps Platform。
问题跟踪器
出错了?立即向我们发送 bug 报告!
了解详情
常见问题解答
API 选择器
教程
平台
Android
iOS
Web
网络服务
产品信息
定价和方案
联系销售人员
支持
服务条款
Android
Chrome
Firebase
Google Cloud Platform
All products
条款
隐私权政策
ICP证合字B2-20070004号
Manage cookies
Sign up for the Google Developers newsletter
Subscribe
English
Deutsch
Español
Español – América Latina
Français
Indonesia
Italiano
Polski
Português – Brasil
Tiếng Việt
Türkçe
Русский
עברית
العربيّة
فارسی
हिंदी
বাংলা
ภาษาไทย
中文 – 简体
中文 – 繁體
日本語
한국어
“街景” | Google for Developers
“街景” | Google for Developers
“街景”
English
Deutsch
Español
Español – América Latina
Français
Indonesia
Italiano
Polski
Português – Brasil
Tiếng Việt
Türkçe
Русский
עברית
العربيّة
فارسی
हिंदी
বাংলা
ภาษาไทย
中文 – 简体
中文 – 繁體
日本語
한국어
通过街景带您的应用用户遍历世界各地。
首页
指南
“街景”
首页
指南
首页
产品
“街景”
带您的用户亲近世界
利用您的应用探索
为您的 Android、iOS 或 Web 应用添加街景功能,让您的用户探索周遭的世界。
连接球形摄像机和应用
硬件制造商和应用开发者可以利用 Open Spherical Camera API 规范创造可协同工作的球形摄像机和应用。
创建 360° 全景图像
将开放的 Photo Sphere XMP Metadata 嵌入您现有的照片球和全景图像内,以供在支持 360° 全景图像的应用中使用。
其他 Street View API
Street View API for Mobile 通过 Android 和 iOS 上的街景带人们游历新地点。
Maps JavaScript API 中的街景功能 在 Web 上使用以 JavaScript 库 形式集成到 Google Maps JavaScript API 中的 Google Maps API。
其他 Maps API 中的街景功能 通过 Embed API 嵌入交互式照片球,或者直接通过 Street View Image API 添加静态图像。
Programs
Women Techmakers
Google Developer Groups
Google Developer Experts
Accelerators
Google Developer Student Clubs
Developer consoles
Google API Console
Google Cloud Platform Console
Google Play 管理中心
Firebase Console
Actions on Google Console
Cast SDK Developer Console
Chrome Web Store Dashboard
Android
Chrome
Firebase
Google Cloud Platform
All products
条款
隐私权政策
ICP证合字B2-20070004号
Manage cookies
Sign up for the Google Developers newsletter
Subscribe
English
Deutsch
Español
Español – América Latina
Français
Indonesia
Italiano
Polski
Português – Brasil
Tiếng Việt
Türkçe
Русский
עברית
العربيّة
فارسی
हिंदी
বাংলা
ภาษาไทย
中文 – 简体
中文 – 繁體
日本語
한국어
Google地图街景( StreetView)——全景摄影的在场景漫游中的应用 - 知乎
Google地图街景( StreetView)——全景摄影的在场景漫游中的应用 - 知乎切换模式写文章登录/注册Google地图街景( StreetView)——全景摄影的在场景漫游中的应用pano360本人爱好旅游、VR全景,互联网3D图形,元宇宙,慢跑,国际等本文作者 刘运增Google于2007年推出了Google地图和Google地球街景漫游功能,即 StreetView,这是以地图为背景,在街道的中心线拍摄的一系列全景照片以显示街道两边的景物的一种动态的全景技术。street View是Google Maps和Google地球的新特色,它允许你观看和漫游街道级的360度城市街道景观。在街景模式下,人们可以以360度视角漫游在虚拟的城市街道上,可以观赏街头景象,就如同在走在真实环境的大街上一样。Google StreetView拍摄的大量的全景照片覆盖北美、欧洲大陆和英国、澳大利亚和新西兰、日本等等。拍摄全景的车队,每辆汽车上都有9个360度视角的定向摄像头、用于定位的GPS单元、3个SICK制造的激光测距扫描仪,用于测量车辆前方180°处长达50米的距离。扫描仪和用于定位的GPS单元、Wi-Fi天线,Wi-Fi天线热点等,车队沿街道的中心线前进,汽车在街上行进时每隔一段距离就拍摄一张360全景,沿着街道的中心线把360度视野的景观全部记录到360度全景之中。 StreetView拍摄汽车 StreetView拍摄车队出现在荷兰首都阿姆斯特丹的Google Maps Street View拍摄车队,汽车顶部的一支支大炮(拍摄器材,全景照相机)颇为壮观。这些大炮正走出美 洲,"侵入"欧洲及大洋洲。光在欧洲, Google Maps Street View车队就在以下地点出现过: 意大利罗马、意大利都灵、法国巴黎、法国尼斯、英国伦敦、荷兰阿姆斯特丹,相信Google的Street View很快便会正式支持欧洲。很明显,这些激光扫描仪将可用于全面立体化Google拍摄汽车所经过的每个角落,尤其是高层建筑物。再将拍摄到的平面相片整合进去,这样一来我们就可得到一个更真实、更立体的虚拟世界。当人们在Google地图中进入了“街景”时,他们就会看到车队所拍摄的360度全景,随着在街道上向前推进,连续地播放每个拍摄点上的全景,当拍摄全景的距离足够小时,人们看到的就是行进中的连续的动态景物,随着计算机的性能和网络速度的提高,可以减小两个拍摄点的距离,观察者在他的眼中所看到的就像开着汽车在街道上行走时所看到的景象。但是这与一般的视频不一样,因为这时你可以任意转动观看四面八方的景物,全景的播放与地图中的3D场景的环境是完全吻合的,即全景把人们带入了真实而又虚拟的3D世界,这种在行进中的观景方式,有一点像人们在VR虚拟现实中自由漫步的场景漫游。这正如Google地图服务产品经理Chau在题为“感觉就像行走在街道上”的博客文章中写道:“使用Street View,用户可通过360度全景查看街道景观,虚拟化地探索城市的各个层面。”这正像VR虚拟现实技术一样实现了虚拟场景漫游,人们沉浸在场景之中了。Google已经在它的Google地球已经建立大量的3D建筑物,形成了街道、街区、至于建立了整个城市,它的地形地貌也是全3D的,地图是作为一种材质贴图,贴在3D地面上的,有一定的真实性,浏览者已经可以在街道上虚拟漫游或在天空上飞翔观看地面上景物。为什么Google还要推出街景漫游功能?原因就在于基于建模的街景漫游不够真实,这是基于模型的虚拟现实技术,模型的贴图是人造的,缺点是不够真实,有人工的痕迹,但是优点则是真正的3D。严格地讲Google StreetView现在推出的“街景虚拟漫游”功能,不能算是IBR技术,(IBR)是基于图像的虚拟现实技术,即在3D场景中拍摄一组有代表性的照片,作为采样点,根据这些已有的照片建立3D场景中任意位置的渲染的2D图像,从而实现在3D场景中漫游。这种技术叫做基于图像的渲染技术,其缩写就是IBR。Google StreetView只能算是全景摄影在虚拟场景漫游中的应用,但这是一种简化了的技术,这种漫游不是完全自由的,只能限于街道的中心线,而且在目前的图像处理速度情况下,由于要处理数据量大,只能跟着地面上标注箭头前进,所以只能是断断续续地前进,这是街景的缺点。这也是与基于建模的3D虚拟漫游的不同之处。当然随着计算机的性能和网络速度的提高,可以减小两个拍摄点的距离,观察者在他的眼中所看到的就像开着汽车在街道上行走时所看到的景象。但是这与一般的视频不一样,因为这时你可以任意转动观看四面八方的景物,全景的播放与地图中的3D场景的环境是完全吻合的,即全景把人们带入了真实而又虚拟的3D世界。可以说:“街景”是全景摄影的最新的应用,必然会推动全景的普及和应用,当然,由于计算机的性能和网络速度的限制,实际效果并没有达到理想的程度。谷歌街景是谷歌地图和谷歌地球中的一项技术,它提供世界上许多街道上的位置的交互式全景图。它于2007年在美国的几个城市推出,此后已扩展到全球城市和农村地区。编辑于 2023-02-14 10:38・IP 属地湖北VR全景Google 街景地图Google Earth赞同 3添加评论分享喜欢收藏申请