前言
基于shp点数据下载Google影像
一、先建立缓冲区
将shp文件导入QGIS软件,选中该图层再打开Python控制台,把以下代码复制粘贴。
layer = iface.activeLayer()
feats = [ feat for feat in layer.getFeatures() ]
epsg = layer.crs().postgisSrid()
uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer&field=x:real&field=y:real&field=point_id:integer""&index=yes"
mem_layer = QgsVectorLayer(uri,
'square_buffer',
'memory')
prov = mem_layer.dataProvider()
for i, feat in enumerate(feats):
point = feat.geometry().asPoint()
new_feat = QgsFeature()
new_feat.setAttributes([i, point[0], point[1], feat.id()])
tmp_feat = feat.geometry().buffer(0.001, -1).boundingBox().asWktPolygon()
new_feat.setGeometry(QgsGeometry.fromWkt(tmp_feat))
prov.addFeatures([new_feat])
##### QGIS 3.x の場合
QgsProject.instance().addMapLayer(mem_layer)
二、基于缓冲区下载
1.安装QuickMapServices插件
2.开始下载
打开Python控制台,代码如下:
import processing
import geopandas as gpd
import numpy as np
import os
#选择目标shp文件,注意投影坐标系要和底图一致,不一致的话改一下就好
data = gpd.read_file('D:/MyDownloads/Data/Export_Output_3.shp')
image_paved_out_dir = 'D:/MyDownloads/Data/images/'
for i in range(len(data)):
out_path = image_paved_out_dir + str(i) + '.tif'
xx, yy = data['geometry'][i].exterior.coords.xy
extent_0 = np.unique(np.array(xx))[0]
extent_1 = np.unique(np.array(xx))[1]
extent_2 = np.unique(np.array(yy))[0]
extent_3 = np.unique(np.array(yy))[1]
extent = str(extent_0) + ',' + str(extent_1) + ',' + str(extent_2) + ',' + str(extent_3) + ' [EPSG:3857]'
#重要的是TILE_SIZE表示基准分辨率,MAP_UNITS_PER_PIXEL表示影像精度0.3m
processing.run("native:rasterize", {
'EXTENT':extent,'EXTENT_BUFFER':0,'TILE_SIZE':512,'MAP_UNITS_PER_PIXEL':0.3,'MAKE_BACKGROUND_TRANSPARENT':False,'MAP_THEME':None,'LAYERS':['type=xyz&zmin=0&zmax=20&url=https://mt1.google.com/vt/lyrs%3Ds%26x%3D{x}%26y%3D{y}%26z%3D{z}'],'OUTPUT':out_path})
总结
如何基于OSM点数据获取对应的遥感影像,这是一个解决方法。
引用
链接: https://www.codenong.com/9a9324390b9fd0eadd93/
链接: 使用 QGIS python 脚本执行批量操作