Бештар

Gdal_array.SaveArray () маҷмӯаи маълумотро дар Python кушода мегузорад

Gdal_array.SaveArray () маҷмӯаи маълумотро дар Python кушода мегузорад


Вақте ки ман истифода мебарамgdal_array.SaveArray ()барои сохтани растер, маҷмӯи маълумотҳои навтаъсис дар Python кушода мемонад ва дигар равандҳои кор бо онро пешгирӣ мекунад. Масалан, коди зеринро (хеле кам) баррасӣ кунед:

>>> a = np.arange (300) .навсозии ((3, 10, 10)) >>> gdal_array.SaveArray (a, "test.tif")  > >>> os.rename ("test.tif", "test2.tif") Traceback (занги охирини охирин): Файл "", сатри 1, дар  WindowsError: [Хатогии 32] Раванд ба файл дастрасӣ пайдо карда наметавонад, зеро он аз ҷониби раванди дигар истифода мешавад

Ба ман ҳамин тавр бо интиқол, тағйири ном ё нест кардани файл мустақиман аз Windows Explorer пешкаш карда мешавадАмал анҷом дода намешавад, зеро файл дар python.exe кушода аст. Муҳимтар аз ҳама, ман наметавонам файлро баъзе барномаҳои визуалӣ/коркардеро, ки ман истифода мебарам, кушоям. Пас аз баромадан аз python, файл "бароварда мешавад" ва ман метавонам онро ба дараҷаи дилам идора кунам.

Чунин ба назар намерасад, ки файл номи бо он алоқаманд дорад, аз ин рӯ ман наметавонам онро пӯшам, ба мисли як растере, ки ман махсус кушода будам:

>>> dir () ['__builtins__', '__doc__', '__name__', '__package__', 'a', 'gdal', 'gdal_array', 'np', 'os']

Сабаби ин рафтор чист? Оё роҳи занг задан вуҷуд дорад?SaveArray ()ба тавре ки он пас аз навиштани он файлро нигоҳ намедорад? Ё, роҳи пӯшидани файл аз дохили Python?

Агар муҳим бошад, пайвандҳои Python ман аз gdal 1.11.1 барои Python 2.7.8 дар Windows 7 мебошанд.


Дар асоси шарҳҳои зерин таҳрир кунед:

Таъини занги gdal_array.SaveArray (a, "test.tif") ба тағирёбанда як объекти osgeo.gdal.Dataset -ро бармегардонад, ки онро мувофиқи gotchasҳои зер идора кардан мумкин аст. Бо истифода аз мисоли боло, ин бояд кор кунад:

a = np.arange (300) .навсозии ((3, 10, 10)) ds = gdal_array.SaveArray (a, "test.tif") ds = Нест os.rename ("test.tif", "test2.tif) ")

Ҳуҷҷатҳои Python gotchas -ро санҷед: https://trac.osgeo.org/gdal/wiki/PythonGotchas

Махсусан:

Наҷот ва бастани маҷмӯи маълумот/манбаъҳои маълумот

Барои захира кардан ва бастани маҷмӯи маълумотҳои растрии GDAL ё манбаъҳои маълумотҳои OGR, объект бояд истинод карда шавад, масалан, онро ба Ҳеҷ, арзиши дигар ё нест кардани объект. Агар зиёда аз як нусхаи маҷмӯи маълумотҳо ё объекти манбаи маълумот мавҷуд бошад, пас ҳар як нусха бояд истинод карда шавад.

Масалан, эҷод ва сабт кардани маҷмӯи маълумотҳои растерӣ:

>>> аз osgeo import gdal >>> driver = gdal.GetDriverByName ('GTiff') >>> dst_ds = driver.Create ('new.tif', 10, 15) >>> band = dst_ds.GetRasterBand (1) >>> arr = band.ReadAsArray () # қиматҳои растрӣ ҳама сифранд >>> arr [2, 4:] = 50 # баъзе маълумотро тағир диҳед >>> band.WriteArray (arr) # файли растрӣ то ҳол бетағйир аст >>> гурӯҳ = Ҳеҷ # банди истинод барои пешгирӣ аз gotcha, ки қаблан тавсиф шуда буд >>> dst_ds = Ҳеҷ # захира, пӯшед

Дерефератсияи охирин ба маҷмӯи маълумотҳои растерӣ тағироти маълумотро менависад ва файли растериро пӯшидааст. WriteArray (arr) массивро ба диск наменависад, агар кеши блоки GDAL пур набошад (маъмулан 40 МБ).

Бо баъзе драйверҳо, маҷмӯаи маълумотҳои растериро метавон пайваста бидуни пӯшидани FlushCache () захира кард. Ба ҳамин монанд, маҷмӯаи маълумотҳои векториро бо ёрии SyncToDisk () захира кардан мумкин аст. Аммо, ҳеҷ яке аз ин усулҳо кафолат намедиҳанд, ки маълумот ба диск навишта шудааст, аз ин рӯ усули афзалиятнок тақсим кардани он аст, ки дар боло нишон дода шудааст.