मेरे पास एक रेखापुंज है जिसके साथ मैं कुछ बिंदु प्रक्षेप करना चाहूंगा। यहाँ मैं कहाँ हूँ:
from osgeo import gdal
from numpy import array
# Read raster
source = gdal.Open('my_raster.tif')
nx, ny = source.RasterXSize, source.RasterYSize
gt = source.GetGeoTransform()
band_array = source.GetRasterBand(1).ReadAsArray()
# Close raster
source = None
# Compute mid-point grid spacings
ax = array([gt[0] + ix*gt[1] + gt[1]/2.0 for ix in range(nx)])
ay = array([gt[3] + iy*gt[5] + gt[5]/2.0 for iy in range(ny)])
अब तक, मैंने SciPy के interp2d फ़ंक्शन को आज़माया है:
from scipy import interpolate
bilinterp = interpolate.interp2d(ax, ay, band_array, kind='linear')
हालाँकि मुझे 317 × 301 रेखापुंज के साथ अपने 32-बिट विंडोज सिस्टम पर एक मेमोरी त्रुटि मिलती है:
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python25\Lib\site-packages\scipy\interpolate\interpolate.py", line 125, in __init__
self.tck = fitpack.bisplrep(self.x, self.y, self.z, kx=kx, ky=ky, s=0.)
File "C:\Python25\Lib\site-packages\scipy\interpolate\fitpack.py", line 873, in bisplrep
tx,ty,nxest,nyest,wrk,lwrk1,lwrk2)
MemoryError
मैं मानता हूँ, मुझे इस SciPy फ़ंक्शन में सीमित विश्वास है, क्योंकि bounds_error
या fill_value
पैरामीटर दस्तावेज के रूप में काम नहीं करते हैं। मैं यह नहीं देखता कि मुझे मेमोरी त्रुटि क्यों होनी चाहिए, क्योंकि मेरा रेखापुंज 317 × 301 है, और बिलिनियर एल्गोरिथ्म मुश्किल नहीं होना चाहिए।
किसी को एक अच्छा बिलिनियर प्रक्षेप एल्गोरिथ्म भर में आया है, अधिमानतः अजगर में, संभवतः NumPy के साथ सिलवाया गया है? कोई संकेत या सलाह?
(नोट: निकटतम पड़ोसी प्रक्षेप एल्गोरिथ्म आसान केक है:
from numpy import argmin, NAN
def nearest_neighbor(px, py, no_data=NAN):
'''Nearest Neighbor point at (px, py) on band_array
example: nearest_neighbor(2790501.920, 6338905.159)'''
ix = int(round((px - (gt[0] + gt[1]/2.0))/gt[1]))
iy = int(round((py - (gt[3] + gt[5]/2.0))/gt[5]))
if (ix < 0) or (iy < 0) or (ix > nx - 1) or (iy > ny - 1):
return no_data
else:
return band_array[iy, ix]
... लेकिन मैं बिलिनियर इंटरपोलेशन विधियों को बहुत पसंद करता हूं)
gt
।
MemoryError
क्योंकि NumPy आपके परे पहुंचने की कोशिश करता हैband_array
? आप की जाँच करनी चाहिएax
औरay
।