Yuhao Kang GISer

Menu

下载特定区域内街景照片数据 | Download Street View Photos within Selected Region

作者:姜虹,刘子煜,王玥瑶,杨安琪,天靖居士

街景图片可以通过api下载,但需要提供参数,参数中的poiid、panoid、location可以用来确定位置或全景图片的ID以确定对应的街景图片。优先级为poiid>panoid>location。为了能够获得一定经纬度范围内的全部街景图片,需要先获取上述三个参数中的至少一个,这里采用arcgis中沿道路等距采点的方法,来对应获得范围内的全部街景图。简而言之,首先获取路网数据,之后沿着路网进行等间距采点,获取大量经纬度点,再根据这些点的坐标获取相应的街景图片数据即可。

## 路网数据的下载
首先需要根据给定的范围下载路网数据,这里使用OSM(Open Street Map)下载,使用OSM下载数据的方法有很多,这篇[知乎专栏的文章](https://zhuanlan.zhihu.com/p/25889246?utm_medium=social&utm_source=weibo)列出了多种方法,这里采用第二种通过安装通过ArcGIS Editor for OpenStreetMap插件的方法下载。
下载地址:[http://www.esri.com/software/arcgis/extensions/openstreetmap](http://www.esri.com/software/arcgis/extensions/openstreetmap)
下载的时候要注意已装的arcgis版本,插件的版本要与其对应。
下载后将其安装到arctoolbox中,单击”Download OSM data”设置参数即可下载。需要注意下载的范围不能过大,否则会报错,下载路径一定要是地理数据库,否则文件无法载入会出错。在需要下载范围较大的数据时可以分区下载。
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012034343-98633073.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012108637-675453329.jpg)

下载好路网数据后,如果需要获取行政区范围的数据,可以使用不规则的政区边界进行裁切,可以使用ArcGIS中的merge工具。

## 对道路进行采点
先对图层坐标系进行变换,使其与百度地图投影坐标系一致,确保采点坐标无误。
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012150072-1446158809.jpg)

采点使用CreatePiontsLines工具,下载网址:https://github.com/kkyyhh96/CollectGISData
选中需要采点的道路段,运行CreatePointsLines工具,设置参数,类型选择“INTERVAL BY DISTANCE”.
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012205312-330454860.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012230860-61256837.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012238799-675373588.jpg)

可以通过ArcGIS中的测量工具检验两点之间的距离:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012251961-1931795347.jpg)

采点之后需要获取点的坐标,并以表的形式存储,方便调用api下载图片时使用。
打开采点图层的属性表,首先添加经纬度字段:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012303516-504896037.jpg)

在属性表中右键单击经度字段名,选择“计算几何”并设置参数,同理对纬度也进行计算:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012313930-62653110.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012320959-2087580298.jpg)

之后要将采点图层的属性表信息(经纬度)导出.dbf文件:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012332578-814887389.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012401875-1090039162.jpg)

使用excel打开.dbf文件:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012419800-460557871.jpg)

修改为以下格式,并存储为.csv文件:

![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012426704-1800991850.jpg)
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012450265-1475147753.jpg)

## 下载百度全景图
下面是调用百度api密钥下载全景图的过程
百度地图的api申请比较方便,其提供的全景地图api可以用来下载街景图片,下面是参数和说明:
![](https://img2018.cnblogs.com/blog/939319/201901/939319-20190110012442237-1905454424.jpg)

需要注意的是,参数中的“pitch”范围为[0,90],因此只能下载水平到竖直向下的90度范围视角的图片,无法下载水平视角及以上的图片。
首先进入[百度地图api首页](http://lbsyun.baidu.com/),在下方选择开发者认证.
填写信息完成认证并激活,之后就可以申请开发者密钥了。
下载百度全景图片的代码如下,替换自己申请的apikey就可以了:
```
# coding: utf-8
# version: python3.5
# author: Yuhao Kang
# collect street view data from BaiduMap

import requests

# Baidu API request
class BaiduAPI(project):
def __init__(self):
# Your baidu api key
self.api_key = " "

# Each search request
def search_photo(self, longitude, latitude):
params = {
"ak": self.api_key,
"coordtype": "wgs84ll",
"location": "{0},{1}".format(longitude, latitude),
"fov": 360 #设置为360即为全景图
}
try:
# Download pictures
r = requests.get("http://api.map.baidu.com/panorama/v2", params)
open("{0}_{1}.png".format(longitude, latitude), 'wb').write(r.content)
except Exception as e:
open("e:log.txt", 'a').writelines(e)

if __name__ == '__main__':
# Read data from csv
with open('data.csv', 'r') as data:
lines = data.readlines()
for line in lines:
# Get coordinates
longitude = line.split(',')[0]
latitude = line.split(',')[1]
# Get pictures
baidu = BaiduAPI()
baidu.search_photo(longitude, latitude)
```
需要注意的是,在国内除了百度地图可以下载全景图之外,也可以使用腾讯地图下载全景图。相比较于百度地图,腾讯地图API提供了反查的方法,即可以通过照片的ID获取照片的精确位置。但腾讯地图API获取较为麻烦,需要企业帐号。
腾讯地图API获取地址:[http://lbs.qq.com/](http://lbs.qq.com/)

— Written in
— Tags: