Aslında kendi soruma cevap vermeyecektim ama bir meslektaşım (bu siteyi kullanmayan), bana ne olduğumu yapmak için bir sürü python kodu yazdı; sadece karasal hücreler için kıyıya olan mesafeyi sınırlamak ve deniz bazlı hücreleri NA olarak bırakmak. Aşağıdaki kod, değişiklik gerektiren tek şey olan herhangi bir python konsolundan çalışabilmelidir:
1) Komut dosyasını ilgili şekil dosyasıyla aynı klasöre koyun;
2) python betiğindeki şekil dosyasının adını şekil dosyanızın adı ne olursa olsun değiştirin;
3) istenen çözünürlüğü ayarlayın ve;
4) diğer rasterlerle eşleşecek şekilde kapsamı değiştirin.
Kullandığımdan daha büyük şekil dosyaları büyük miktarlarda RAM gerektirir, ancak komut dosyasının çalışması hızlıdır (50m çözünürlüklü bir raster üretmek için yaklaşık üç dakika ve 25m çözünürlüklü raster için on dakika).
#------------------------------------------------------------------------------
from osgeo import gdal, ogr
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
import time
startTime = time.perf_counter()
#------------------------------------------------------------------------------
# Define spatial footprint for new raster
cellSize = 50 # ANDRE CHANGE THIS!!
noData = -9999
xMin, xMax, yMin, yMax = [1089000, 2092000, 4747000, 6224000]
nCol = int((xMax - xMin) / cellSize)
nRow = int((yMax - yMin) / cellSize)
gdal.AllRegister()
rasterDriver = gdal.GetDriverByName('GTiff')
NZTM = 'PROJCS["NZGD2000 / New Zealand Transverse Mercator 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",173],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1600000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
#------------------------------------------------------------------------------
inFile = "new_zealand.shp" # CHANGE THIS!!
# Import vector file and extract information
vectorData = ogr.Open(inFile)
vectorLayer = vectorData.GetLayer()
vectorSRS = vectorLayer.GetSpatialRef()
x_min, x_max, y_min, y_max = vectorLayer.GetExtent()
# Create raster file and write information
rasterFile = 'nz.tif'
rasterData = rasterDriver.Create(rasterFile, nCol, nRow, 1, gdal.GDT_Int32, options=['COMPRESS=LZW'])
rasterData.SetGeoTransform((xMin, cellSize, 0, yMax, 0, -cellSize))
rasterData.SetProjection(vectorSRS.ExportToWkt())
band = rasterData.GetRasterBand(1)
band.WriteArray(np.zeros((nRow, nCol)))
band.SetNoDataValue(noData)
gdal.RasterizeLayer(rasterData, [1], vectorLayer, burn_values=[1])
array = band.ReadAsArray()
del(rasterData)
#------------------------------------------------------------------------------
distance = ndimage.distance_transform_edt(array)
distance = distance * cellSize
np.place(distance, array==0, noData)
# Create raster file and write information
rasterFile = 'nz-coast-distance.tif'
rasterData = rasterDriver.Create(rasterFile, nCol, nRow, 1, gdal.GDT_Float32, options=['COMPRESS=LZW'])
rasterData.SetGeoTransform((xMin, cellSize, 0, yMax, 0, -cellSize))
rasterData.SetProjection(vectorSRS.ExportToWkt())
band = rasterData.GetRasterBand(1)
band.WriteArray(distance)
band.SetNoDataValue(noData)
del(rasterData)
#------------------------------------------------------------------------------
endTime = time.perf_counter()
processTime = endTime - startTime
print(processTime)