城市规划现状调研往往需要进行现场踏勘,对外地项目来说,事前就制作项目所在地的现状图集将有助于我们更好地现状调研。但是,如何事前获取项目所在地相关图片信息却是个问题。我们知道,街景已经成为了各在线电子地图的三大标配之一(地图、卫星、街景),并且街景已经覆盖了全球大部分城市(这里包括谷歌街景)。因此,利用街景来制作现状图集也有了现实可能性。对于街景图片,我想大家更多的是利用截屏手动制作。这不仅费时费力,而且也容易出现错误。
前段时间看过一篇基于GIS平台的自动、批量实现城市规划现状图集制作的教程,不过该方法需要设计者不仅能熟练掌握GIS平台的基本使用方法,还得对基于GIS平台的Python开发具有一定的了解,且需要掌握Python语言,那我们有没有不学习编程的办法来解决这个问题呢?答案当然有,下面就让我们开始这个教程!
实验流程简介
百度地图或者其他地图的街景数据,我们一般访问是通过地图的街景查看功能,但是这样的方法我们看到的街景一般是这样的:
直接截图的话,我们会把南北指北针和一些多余的信息给截取进去,而且截取下来的图片也不会特别清楚,那么我们要怎么获取一张干净且较为清楚的街景图呢?
这里我们将使用到百度地图开放平台提供的全景静态图API接口来获取这些街景,看到这里,你可能会开始疑惑不解,不过不要着急,接下来,我们一定不会涉及编程!
我们的实验流程就是通过百度提供的接口然后设置参数,通过自己编辑的URL来保存图片。
百度地图API注册与介绍
百度地图全景静态图API与静态图API类似,可轻松实现将全景地图以图片形式嵌入到您的应用中。您只需要设置图片尺寸、经纬度坐标等参数,发送HTTP请求访问百度地图全景静态图服务,便可在您的PC浏览器、手机浏览器、移动APP或者车机显示屏中以图片形式显示您的全景图。——来自百度开放平台官方
简单说就是你编辑一下URL,即可得到下面的图!只有百度的基础logo,图片尺寸可自定。
那么,我们该怎么申请到这个API接口密钥呢?
(1)创建百度地图应用
访问百度地图API需要一个信令(AK),打开百度地图开放平台(http://lbsyun.baidu.com/),点击右上角“API控制台”,即进入了百度地图的开发界面。
(2)获取API密钥AK
选择“创建应用”-应用类型勾选“浏览器端”–勾选所用到的服务(一般全选即可),此时就创建好了应用账号,得到“AK”
(3)全景静态图API
打开百度地图API的全景静态图API模块,网址:http://lbsyun.baidu.com/index.php?title=viewstatic,这个页面详细介绍了全景静态图API的请求参数及返回数据的情况。
街景图URL构建
阅读百度开放平台提供的指南,我们发现一个完整的街景URL是这样构成的:
http://api.map.baidu.com/panorama/v2?ak=E4805d16520de693a3fe707cdc962045&width=512&height=256&location=116.313393,40.04778&fov=180
直接点击该链接进去的就是一张坐标在116.313393,40.04778全景角度为180度的街景图,我们把图片另存为本地就可以获取本张图片了。
通过百度开放平台提供的参数我们发现链接中AK就是我们申请的密钥,width就是图片的宽度,height是图片的高度,location是街景的位置,fov是全景的角度。
也就是说我们只要修改这几个参数就可以得到我们想要的任意位置的街景图片!
那么,我们应该怎么得到我想获得街景的地点的经纬度呢?不要急,我们只要打开百度开放平台—开发—工具支持里的坐标拾取系统即可。
在地图上找到你要获得街景的地址,点击,即可自动生成经纬度!
然后我修改链接中的参数后重新构建了一个URL:
http://api.map.baidu.com/panorama/v2?ak=E4805d16520de693a3fe707cdc962045&width=1024&height=512&location=111.67036,29.051787&fov=180
然后,我们就得到了我想要地方的全景街道图了!如果你想相机转变方向的话,再链接后面加上&heading=180(0到360度)即可得到新的角度的街景图,右键另存为即可保存街景!
通过这个办法,我们就可以通过只修改几个参数就可以把地块周边的现状街景都可以给下载下来啦!
扩展内容
如果你会Python语言的话,也可以通过自己编写代码来批量获得这些图片,下面放1个我已经构建好的代码。
因为EXE封装还有一点问题,所以暂时还不能发布出来,不过可以共享源码!
import requests
import os
from selenium import webdriver
def save_photo(root,url):
if not os.path.exists(root):
os.makedirs(root) #若没有街景图片文件夹则自动创建
m = url.split("&")[3] + " + " + url.split("&")[5] + ".jpeg" #把经纬度和方向作为街景的名称
name = root + m
r = requests.get(url)
with open(name, "wb") as f:
f.write(r.content)
f.close()
print("您选择的街景已经成功保存至E盘街景图片文件夹!感谢您的使用!nnn")
#来自WSSD设计的编译
while True:
start = input("【控制界面】n输入【1】软件正常运行,输入【0】软件将结束运行!n")
if start == "0":
print("感谢您使用百度街景下载器,来自WSSDS设计!")
break
print("【百度街景下载器 V1.0】n欢迎使用<百度街景下载器>n软件版本:0.1 Betan编译日期:2017年09月16日n软件作者:文巍,WSSD技术服务中心n"
"电子邮件:921386041@qq.comn"
"这是本软件的第一个公开应用版本,主要目的为了测试!n"
"Copyright (C) 2015-2017 By WSSD, Technical Service Center, Wei Wen. All Rights Reserved.n"
"WSSD技术服务中心 文巍 版权所有 2015-2017nn"
"【街景保存位置】n"
"E盘//街景图片nn【AK输入】")
ak = input("请输入您获取的百度秘钥AK:n")
print("n【系统提示】n软件会自动调用您的Chrome,请在Chrome上选择您需要查看的街景位置坐标,选择复制,粘贴到软件界面即可n")
a = webdriver.Chrome()
a.get("http://api.map.baidu.com/lbsapi/getpoint/index.html")
location = input("【坐标设置】n请输入您拾取的坐标(格式:经度,纬度):n")
angle = input("请输入您需要的全景的方向角度(0-360):n")
url = "http://api.map.baidu.com/panorama/v2?ak=" + ak + "&width=1024&height=512&location=" + location + "&fov=180&heading=" + angle
root = "E://街景图片//" # 文件保存位置
save_photo(root,url)
a.quit()
感谢 WSSD设计 授权分享
欢迎关注他们的微信公众号
微信号:wssddesign
请问,“基于GIS平台的自动、批量实现城市规划现状图集制作”在哪有,能给个链接吗?没找到~
图片最大只能1024*512的啊,还没有截图清楚。。。。
这就是百度的一个bug,普通人没权利下大的全景图,现在已经修复了吧
密钥ak申请不了。
说的好 我选择截屏
说的好 我选择截屏
还是没搞懂
好高级,好复杂的感觉