这个是之前写的代码了,正好今天有空所以就和大家分享一下。我们在处理项目时,有时候需要高清底图作为辅助数据源去对比数据,所以可能会需要卫星数据。所以今天就和大家分享一下如何使用Python基于矢量范围批量下载高清遥感瓦片数据。
这里我们使用osgeo中的osr、ogr库去读取矢量的地理范围。之前也分享过,感兴趣的可以去Python&GIS专栏里面看一看。
def Open_Vector(path_shp):
"""
:param path_shp: 输入84坐标矢量
:return: 返回四至范围
"""
ds = ogr.Open(path_shp, True)
# True表示以读写方式打开
layer = ds.GetLayer(0)
# 获取图层
feature = layer.GetFeature(0)
geom = feature.GetGeometryRef()
# 获取该要素的地理空间范围
left, right, down, up = geom.GetEnvelope()
# 获取图层的地理范围
return left, right, down, up
这里没什么好说的,就是基础的公式,计算即可。这个函数在整个函数作为辅助函数,主程序会自己调用它。
def calculation_tile(lat, lon, zoom):
"""
:param lat: 84坐标纬度
:param lon: 84坐标经度
:param zoom: 缩放级别
:return: 瓦片的行列号
"""
# 将经纬度从WGS84坐标系转换为GCJ02坐标系
# lon_deg,lat_deg = WGS84_To_GCJ02(lon_deg,lat_deg)
# 根据缩放级别计算格网数量
n = 2.0 ** zoom
# 将纬度从度转换为弧度
lat_radio = math.radians(lat)
# 计算瓦片中的x坐标
tile_x = int((lon + 180.0) / 360.0 * n)
# 计算瓦片中的y坐标
tile_y = int((1.0 - math.log(math.tan(lat_radio) + (1 / math.cos(lat_radio))) / math.pi) / 2.0 * n)
# 返回计算得到的瓦片坐标(行和列)
return tile_x, tile_y
这里使用了基础的反爬虫方法,随机调用请求头。
def Get_image(url, x, y)