日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例

瀏覽:127日期:2022-08-02 17:47:44

概述:

本文講述如何在Python中用GDAL實(shí)現(xiàn)根據(jù)輸入矢量邊界對(duì)柵格數(shù)據(jù)的裁剪。

效果:

在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例

裁剪前

在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例

矢量邊界

在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例

裁剪后

實(shí)現(xiàn)代碼:

# -*- coding: utf-8 -*-'''@author lzugis@date 2017-06-02@brief 利用shp裁剪影像''' from osgeo import gdal, gdalnumeric, ogrfrom PIL import Image, ImageDrawimport osimport operator gdal.UseExceptions() # This function will convert the rasterized clipper shapefile# to a mask for use within GDAL.def imageToArray(i): ''' Converts a Python Imaging Library array to a gdalnumeric image. ''' a=gdalnumeric.fromstring(i.tobytes(),’b’) a.shape=i.im.size[1], i.im.size[0] return a def arrayToImage(a): ''' Converts a gdalnumeric array to a Python Imaging Library Image. ''' i=Image.frombytes(’L’,(a.shape[1],a.shape[0]), (a.astype(’b’)).tobytes()) return i def world2Pixel(geoMatrix, x, y): ''' Uses a gdal geomatrix (gdal.GetGeoTransform()) to calculate the pixel location of a geospatial coordinate ''' ulX = geoMatrix[0] ulY = geoMatrix[3] xDist = geoMatrix[1] pixel = int((x - ulX) / xDist) line = int((ulY - y) / xDist) return (pixel, line) ## EDIT: this is basically an overloaded# version of the gdal_array.OpenArray passing in xoff, yoff explicitly# so we can pass these params off to CopyDatasetInfo#def OpenArray( array, prototype_ds = None, xoff=0, yoff=0 ): ds = gdal.Open( gdalnumeric.GetArrayFilename(array) ) if ds is not None and prototype_ds is not None: if type(prototype_ds).__name__ == ’str’: prototype_ds = gdal.Open( prototype_ds ) if prototype_ds is not None: gdalnumeric.CopyDatasetInfo( prototype_ds, ds, xoff=xoff, yoff=yoff ) return ds def histogram(a, bins=range(0,256)): ''' Histogram function for multi-dimensional array. a = array bins = range of numbers to match ''' fa = a.flat n = gdalnumeric.searchsorted(gdalnumeric.sort(fa), bins) n = gdalnumeric.concatenate([n, [len(fa)]]) hist = n[1:]-n[:-1] return hist def stretch(a): ''' Performs a histogram stretch on a gdalnumeric array image. ''' hist = histogram(a) im = arrayToImage(a) lut = [] for b in range(0, len(hist), 256): # step size step = reduce(operator.add, hist[b:b+256]) / 255 # create equalization lookup table n = 0 for i in range(256): lut.append(n / step) n = n + hist[i+b] im = im.point(lut) return imageToArray(im) def main( shapefile_path, raster_path ): # Load the source data as a gdalnumeric array srcArray = gdalnumeric.LoadFile(raster_path) # Also load as a gdal image to get geotransform # (world file) info srcImage = gdal.Open(raster_path) geoTrans = srcImage.GetGeoTransform() # Create an OGR layer from a boundary shapefile shapef = ogr.Open(shapefile_path) lyr = shapef.GetLayer( os.path.split( os.path.splitext( shapefile_path )[0] )[1] ) poly = lyr.GetNextFeature() # Convert the layer extent to image pixel coordinates minX, maxX, minY, maxY = lyr.GetExtent() ulX, ulY = world2Pixel(geoTrans, minX, maxY) lrX, lrY = world2Pixel(geoTrans, maxX, minY) # Calculate the pixel size of the new image pxWidth = int(lrX - ulX) pxHeight = int(lrY - ulY) clip = srcArray[:, ulY:lrY, ulX:lrX] # # EDIT: create pixel offset to pass to new image Projection info # xoffset = ulX yoffset = ulY print 'Xoffset, Yoffset = ( %f, %f )' % ( xoffset, yoffset ) # Create a new geomatrix for the image geoTrans = list(geoTrans) geoTrans[0] = minX geoTrans[3] = maxY # Map points to pixels for drawing the # boundary on a blank 8-bit, # black and white, mask image. points = [] pixels = [] geom = poly.GetGeometryRef() pts = geom.GetGeometryRef(0) for p in range(pts.GetPointCount()): points.append((pts.GetX(p), pts.GetY(p))) for p in points: pixels.append(world2Pixel(geoTrans, p[0], p[1])) rasterPoly = Image.new('L', (pxWidth, pxHeight), 1) rasterize = ImageDraw.Draw(rasterPoly) rasterize.polygon(pixels, 0) mask = imageToArray(rasterPoly) # Clip the image using the mask clip = gdalnumeric.choose(mask, (clip, 0)).astype(gdalnumeric.uint8) # This image has 3 bands so we stretch each one to make them # visually brighter for i in range(3): clip[i,:,:] = stretch(clip[i,:,:]) # Save new tiff # # EDIT: instead of SaveArray, let’s break all the # SaveArray steps out more explicity so # we can overwrite the offset of the destination # raster # ### the old way using SaveArray # # gdalnumeric.SaveArray(clip, 'OUTPUT.tif', format='GTiff', prototype=raster_path) # ### # gtiffDriver = gdal.GetDriverByName( ’GTiff’ ) if gtiffDriver is None: raise ValueError('Can’t find GeoTiff Driver') gtiffDriver.CreateCopy( 'beijing.tif', OpenArray( clip, prototype_ds=raster_path, xoff=xoffset, yoff=yoffset ) ) # Save as an 8-bit jpeg for an easy, quick preview clip = clip.astype(gdalnumeric.uint8) gdalnumeric.SaveArray(clip, 'beijing.jpg', format='JPEG') gdal.ErrorReset() if __name__ == ’__main__’: #shapefile_path, raster_path shapefile_path = ’beijing.shp’ raster_path = ’world.tif’ main( shapefile_path, raster_path )

補(bǔ)充知識(shí):Python+GDAL | 讀取矢量并寫出txt

這篇文章主要描述了如何使用GDAL/OGR打開矢量文件、讀取屬性表,并將部分屬性寫出至txt。

代碼

import ogr,sys,osimport numpy as npos.chdir(r’E:’)#設(shè)置driver,并打開矢量文件driver = ogr.GetDriverByName(’ESRI Shapefile’)ds = driver.Open(’sites.shp’, 0)if ds is None: print('Could not open', ’sites.shp’) sys.exit(1)#獲取圖冊(cè)layer = ds.GetLayer()#要素?cái)?shù)量numFeatures = layer.GetFeatureCount()print('Feature count: '+str(numFeatures))#獲取范圍extent = layer.GetExtent()print('Extent:', extent)print('UL:', extent[0],extent[3])print('LR:', extent[1],extent[2])#獲取要素feature = layer.GetNextFeature()ids = []xs = []ys = []covers = []#循環(huán)每個(gè)要素屬性while feature: #獲取字段“id”的屬性 id = feature.GetField(’id’) #獲取空間屬性 geometry = feature.GetGeometryRef() x = geometry.GetX() y = geometry.GetY() cover = feature.GetField(’cover’) ids.append(id) xs.append(x) ys.append(y) covers.append(cover) feature = layer.GetNextFeature()data = [ids, xs, ys, covers]data = np.array(data)data = data.transpose()#寫出致txtnp.savetxt(’myfile.txt’,data, fmt=’%s %s %s %s’)np.savetxt(’myfile.csv’,data, fmt=’%s %s %s %s’)#釋放文件空間layer.ResetReading()feature.Destroy()ds.Destroy()

以上這篇在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美aa在线观看| 国产一区二区三区亚洲| 欧美日韩中文字幕一区二区三区| 里番精品3d一二三区| 国产精品毛片久久久| 免费人成精品欧美精品| 视频一区视频二区中文| 久久福利精品| 蜜桃一区二区三区在线观看| 爽爽淫人综合网网站| 免费视频久久| 亚洲久草在线| 日本免费新一区视频| 国产精品成人**免费视频| 精品精品国产三级a∨在线| 国产一区二区三区视频在线| 97精品视频在线看| 国产91一区| 日韩中文字幕一区二区三区| 亚洲免费成人av在线| 蜜臀精品久久久久久蜜臀| 97成人超碰| 精品免费av| 欧美日韩国产在线观看网站| 亚洲日本久久| 国产在线视频欧美一区| 私拍精品福利视频在线一区| 亚洲大全视频| 日本不卡一二三区黄网| 麻豆91在线播放| 国产综合视频| 亚洲精品高潮| 国产一区一一区高清不卡| 欧美日韩国产探花| 69堂精品视频在线播放| 国产精品1区| 亚洲高清av| 亚洲精品美女91| 美女视频网站久久| 一区三区视频| 国产探花一区二区| 成人在线网站| 亚洲精品在线二区| 成人在线视频免费看| 国产美女一区| 美女视频黄久久| 9国产精品视频| 欧美国产日韩电影| 欧美精选一区二区三区| 国产精品xxx| 在线日韩中文| 国产情侣久久| 好吊视频一区二区三区四区| 国产日韩一区| 狠狠干成人综合网| 成人日韩av| 日韩欧美高清一区二区三区| 日韩精品午夜| 欧美极品一区二区三区| 日韩制服丝袜先锋影音| 黑森林国产精品av| 婷婷综合国产| 激情久久婷婷| 老司机免费视频一区二区三区| 亚洲精华国产欧美| 久久精品国产成人一区二区三区 | 亚洲精品免费观看| 私拍精品福利视频在线一区| 国产欧美日韩综合一区在线播放| 欧美日韩国产高清电影| 精品一区二区三区在线观看视频| 亚洲欧美日韩综合国产aⅴ| 97人人精品| 国产精品欧美大片| 视频一区在线视频| 99久久激情| 美女免费视频一区| 日韩精品亚洲专区在线观看| 在线一区免费| 国产+成+人+亚洲欧洲在线| 日本在线一区二区三区| 国产亚洲高清视频| 欧美日韩水蜜桃| 国产精品99视频| 国产精品欧美大片| 日韩专区视频网站| 在线视频亚洲| 在线日韩一区| 激情国产在线| 老司机精品视频在线播放| 日本欧美久久久久免费播放网| 午夜日韩av| 国产一区日韩一区| 成人日韩精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 视频精品一区二区| 91精品亚洲| 成人影视亚洲图片在线| 国产精品任我爽爆在线播放| 亚洲1区在线| 蜜桃av一区二区三区电影| 欧美精选一区二区三区| 亚洲成人精品| 成人午夜在线| 免费一级欧美片在线观看网站| 日本欧美在线| 五月国产精品| 亚洲乱码视频| 亚洲另类av| 爽爽淫人综合网网站 | 精品一区欧美| 欧美日韩在线播放视频| 日韩黄色大片网站| 精品久久久久中文字幕小说| 免费一级欧美片在线观看网站| 国产精品主播| 美女视频黄 久久| 国产欧美日本| 欧美精品导航| 高清日韩欧美| 日韩精品电影| 久久激情中文| 国产一在线精品一区在线观看| 久久精品国产大片免费观看| 香蕉人人精品| 老鸭窝毛片一区二区三区| 亚洲综合丁香| 亚洲精品美女91| 国产亚洲久久| 成人一区而且| 香蕉人人精品| 久久亚洲美女| 热久久免费视频| 亚洲精品护士| 久久国产精品色av免费看| 国产日韩欧美中文在线| 你懂的国产精品| 在线人成日本视频| 99久久亚洲精品蜜臀| 亚洲激情不卡| 日韩欧美2区| 精品国产不卡一区二区| 久久久久久免费视频| 91精品电影| 亚洲精品乱码| 国产精品白丝av嫩草影院| 荡女精品导航| 日韩欧美午夜| 影音先锋久久| 日韩精品免费观看视频| 国产精品一线| 成人日韩精品| 视频一区二区三区入口| 欧美日韩一区自拍| 成人国产精品一区二区网站| 蜜桃av在线播放| 影院欧美亚洲| 国产欧美91| 蜜臀国产一区| 日韩在线播放一区二区| 国产亚洲一卡2卡3卡4卡新区| 电影91久久久| 九色精品91| 欧美一区在线观看视频| 国产在线视频欧美一区| 好看的亚洲午夜视频在线| 日本免费在线视频不卡一不卡二| 九九久久国产| 亚洲一区日韩在线| 国产精品一区免费在线| 久久精品高清| 国产视频网站一区二区三区| 成人羞羞在线观看网站| 中文字幕一区二区三区四区久久 | 日韩中文一区二区| 国产精品不卡| 丝袜美腿一区二区三区| 国产欧美一区二区精品久久久| 99成人在线视频| 清纯唯美亚洲综合一区| 久久久久国产精品一区三寸| 亚洲三级国产| 日韩成人亚洲| 欧美日韩亚洲三区| 欧美+日本+国产+在线a∨观看| 日韩1区2区日韩1区2区| 日韩欧美1区| 91麻豆精品| 在线亚洲成人| 亚洲永久av| 国产亚洲久久| 国产精品免费看| 国产999精品在线观看| 亚洲精品自拍| 99久久精品网| 欧美激情麻豆| 亚洲婷婷丁香| 亚洲天堂久久| 精品久久美女| 国产日韩一区二区三免费高清 |