2016-06-23 13 views
1

Ich habe ein Python-Skript erstellt, das aus einer Shapefile ein Geotiff-Raster erstellt. Derzeit enthält das produzierte Geoteich nicht den räumlichen Bezug des Shapefiles. Wie kopiere ich den Raumbezug von der Shapefile zum Geotiff? Ich habe versucht, den räumlichen Bezug der Shapefile auf den Geotiff über den Befehl kopieren: target_ds.SetProjection (source_layer.GetSpatialRef())
Ich denke, dass das räumliche Referenzobjekt mit der Shapefile ist anders als die Geotiff, aber, don ' Ich weiß, wie man von einem zum anderen geht.Wie kopiert man den Raumbezug von einem Shapefile in ein Geotiff-Raster?

# This code creates a raster from a shapefile. 
# Every feature in the shapefile is included in the raster. 

import os 
import gdal 
import ogr  

os.chdir(r'C:\Users\pipi\Documents\Rogaine\Tarlo\gpx') #folder containing gpx files 
vector_fn = 'gpxcollection.shp' #filename of input shapefile 
pixel_size = 25 #same unit as coordinates 
raster_fn = 'test.tif' # Filename of the raster Tiff that will be created 

#______Open's the data source and reads the extent________ 
source_ds = ogr.Open(vector_fn) 
source_layer = source_ds.GetLayer() #returns the first layer in the data source 
x_min, x_max, y_min, y_max = source_layer.GetExtent() 

#______Create the destination raster file__________ 
x_res = int((x_max - x_min)/pixel_size) 
y_res = int((y_max - y_min)/pixel_size) 
# create the target raster file with 1 band 
target_ds = gdal.GetDriverByName('GTiff').Create(raster_fn, x_res, y_res, 1, gdal.GDT_Byte) 
target_ds.SetGeoTransform((x_min, pixel_size, 0, y_max, 0, -pixel_size)) 
band = target_ds.GetRasterBand(1) 

#______Populates the raster file with the data from the shapefile____ 
gdal.RasterizeLayer(target_ds, [1], source_layer, burn_values=[1]) 

del target_ds #flushes data from memory. Without this you often get an empty raster. 

Antwort

0

Die GDAL dataset.SetProjection() Methode erwartet bekannten Text (WKT) oder PROJ4 Strings, wie pro the docs: "Der String in OGC WKT oder PROJ.4 Format sein sollte".

Sie können dies erreichen, indem Sie eine der folgenden Aktionen ausführen:

source_layer.GetSpatialRef().ExportToWkt() 
source_layer.GetSpatialRef().ExportToProj4() 
+0

Danke. Es funktioniert jetzt mit dem Wkt-Format. Das Exportieren meiner bestimmten räumlichen Referenz in das Proj.4-Format führt zu einem fehlerhaften räumlichen Bezug. –