<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_GDAL%2FNumpy</id>
	<title>Замена значений в растрах с помощью GDAL/Numpy - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_GDAL%2FNumpy"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_GDAL/Numpy&amp;action=history"/>
	<updated>2026-04-03T19:22:48Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_GDAL/Numpy&amp;diff=6045&amp;oldid=prev</id>
		<title>Voltron: Новая страница: «{{Статья|Опубликована|remap-gdal}} {{Аннотация|Описание и скрипт.}}  Задача: заменить в растре од…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_GDAL/Numpy&amp;diff=6045&amp;oldid=prev"/>
		<updated>2012-07-24T18:17:06Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Статья|Опубликована|remap-gdal}} {{Аннотация|Описание и скрипт.}}  Задача: заменить в растре од…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Статья|Опубликована|remap-gdal}}&lt;br /&gt;
{{Аннотация|Описание и скрипт.}}&lt;br /&gt;
&lt;br /&gt;
Задача: заменить в растре одно значение на другое.&lt;br /&gt;
&lt;br /&gt;
Для решения можно использовать возможности GDAL для чтения/записи растров и Numpy для операций замены. Данный способ использовался, например, для нормализации ошибочных значений NODATA в данных [http://gis-lab.info/qa/srtm.html SRTM 5x5].&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
Все основные моменты работы с растрами изложены в статье «[http://gis-lab.info/qa/gdal-python.html Работа с растрами при помощи GDAL и Python]». Остановимся на ключевых деталях реализации:&lt;br /&gt;
&lt;br /&gt;
Так как мы хотим только поменять значение, то важно сохранить растр в том же числовом формате, что и исходный. Для этого нужно при чтении получить исходный числовой формат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gd = gdal.Open( input )&lt;br /&gt;
intype = gd.GetRasterBand( 1 ).DataType&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и использовать его же при сохранении результирующего растра:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;outRaster = driver.Create( output, xsize, ysize, 1, intype )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также полезным может оказаться установка значения NoData, если для его установки и заменяются значения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;outRaster.GetRasterBand( 1 ).SetNoDataValue(-32678)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная работа производится с помощью функций обработки массивов Numpy, значительно более быстрых чем попиксельная обработка. Цикл поиска-замены значения выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
temp1_bool = numpy.equal(raster,inval)&lt;br /&gt;
numpy.putmask(raster,temp1_bool,outval)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Скрипт ===&lt;br /&gt;
&lt;br /&gt;
Запуск скрипта производится следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;remap.py input_raster output_raster input_value output_value&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве аргументов используется имя исходного и конечного растра, а также исходное и конечное значение. Например, для замены значения 255 на -32678:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;remap.py input.tif output.tif 255 -32678&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/programs/python/remap.7z Скачать] скрипт.&lt;br /&gt;
&lt;br /&gt;
'''Предупреждение''': на данный момент описанная реализация относительно медленная, операции на больших растрах могут занимать значительное время.&lt;br /&gt;
&lt;br /&gt;
=== Ссылки по теме ===&lt;br /&gt;
* [http://gis-lab.info/qa/gdal-python.html Работа с растрами при помощи GDAL и Python]&lt;br /&gt;
* [http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
</feed>