<?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%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python</id>
	<title>Работа с растрами при помощи GDAL и Python - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;action=history"/>
	<updated>2026-04-05T20:54:45Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=6418&amp;oldid=prev</id>
		<title>Voltron в 08:49, 28 июля 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=6418&amp;oldid=prev"/>
		<updated>2012-07-28T08:49:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 10:49, 28 июля 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l308&quot;&gt;Строка 308:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 308:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gis-lab.info/qa/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;gdal&lt;/del&gt;-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gis-lab.info/qa/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ogr&lt;/ins&gt;-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key gislabwiki:diff::1.12:old-6332:rev-6418 --&gt;
&lt;/table&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=6332&amp;oldid=prev</id>
		<title>Voltron в 08:19, 27 июля 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=6332&amp;oldid=prev"/>
		<updated>2012-07-27T08:19:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 10:19, 27 июля 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l308&quot;&gt;Строка 308:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 308:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gis-lab.info/qa/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ogr&lt;/del&gt;-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gis-lab.info/qa/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;gdal&lt;/ins&gt;-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=5947&amp;oldid=prev</id>
		<title>Voltron в 07:21, 22 июля 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=5947&amp;oldid=prev"/>
		<updated>2012-07-22T07:21:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 09:21, 22 июля 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l308&quot;&gt;Строка 308:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 308:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Ссылки по теме ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://gdal.org/gdal_8h.html GDAL C API]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://trac.osgeo.org/gdal/wiki/GdalOgrInPython GDAL/OGR in Python]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://trac.osgeo.org/gdal/wiki/GdalOgrInPython GDAL/OGR in Python]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://www.scipy.org/Tentative_NumPy_Tutorial Tentative NumPy Tutorial]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://www.scipy.org/Tentative_NumPy_Tutorial Tentative NumPy Tutorial]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/del&gt;[http://docs.scipy.org/doc/ NumPy and SciPy documentation]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;[http://docs.scipy.org/doc/ NumPy and SciPy documentation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key gislabwiki:diff::1.12:old-5767:rev-5947 --&gt;
&lt;/table&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=5767&amp;oldid=prev</id>
		<title>Voltron: Новая страница: «{{Статья|Опубликована|gdal-python}} {{Аннотация|Руководство по использованию GDAL Python API, частичн…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%BC%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_GDAL_%D0%B8_Python&amp;diff=5767&amp;oldid=prev"/>
		<updated>2012-07-19T11:12:34Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Статья|Опубликована|gdal-python}} {{Аннотация|Руководство по использованию GDAL Python API, частичн…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Статья|Опубликована|gdal-python}}&lt;br /&gt;
{{Аннотация|Руководство по использованию GDAL Python API, частично основано на «GDAL API tutorial»}}&lt;br /&gt;
&lt;br /&gt;
GDAL — свободная библиотека для работы с растровыми данными. Утилиты командной строки, входящие в состав библиотеки широко используются для выполнения разнообразных задач.&lt;br /&gt;
&lt;br /&gt;
Благодаря наличию развитого API можно работать с функциями GDAL из многих языков программирования. та статья описывает работу с GDAL API через Python. При написании статьи использовались материалы [http://gdal.org/gdal_tutorial.html GDAL API tutorial].&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Будем исходить из того, что все программное обеспечение установлено при помощи установщика OSGeo4W. Для использования GDAL совместно с Python необходимо наличие соответствующий байндингов (bindings). В стеке программ OSGeo4W нужный пакет называется gdal-python (для GDAL 1.5.x) или gdal16-python (для GDAL 1.6.x). Рекомендую использовать версию 1.6.x. Кроме того, для выполнения различных операций с растром, нам потребуется пакет numpy.&lt;br /&gt;
&lt;br /&gt;
GDAL Python API состоит из пяти основных модулей и пяти дополнительных (существуют для совместимости со старыми версиями):&lt;br /&gt;
&lt;br /&gt;
* gdal — Python интерфейс к библиотеке GDAL&lt;br /&gt;
* ogr — Python интерфейс к библиотеке OGR&lt;br /&gt;
* osr — работа с системами координат&lt;br /&gt;
* gdal_array — вспомогательные функции&lt;br /&gt;
* gdalconst — константы&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;
# основные&lt;br /&gt;
from osgeo import gdal&lt;br /&gt;
from osgeo import ogr&lt;br /&gt;
from osgeo import osr&lt;br /&gt;
from osgeo import gdal_array&lt;br /&gt;
from osgeo import gdalconst&lt;br /&gt;
&lt;br /&gt;
# версии для совместимости. Будут удалены в версии 2.0&lt;br /&gt;
import gdal&lt;br /&gt;
import ogr&lt;br /&gt;
import osr&lt;br /&gt;
import gdalnumeric&lt;br /&gt;
import gdalconst&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если используется GDAL версии 1.5 и выше, рекомендуется использовать «основные» модули. А для случаев, когда необходимо использовать код написанный ранее можно сделать проверку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  from osgeo import gdal&lt;br /&gt;
except ImportError:&lt;br /&gt;
  import gdal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В большинстве случаев достаточно подключить только модуль gdal.&lt;br /&gt;
&lt;br /&gt;
=== Открытие файла ===&lt;br /&gt;
&lt;br /&gt;
Для открытия растра используем функцию &amp;lt;tt&amp;gt;gdal.Open()&amp;lt;/tt&amp;gt;, в качестве аргумента принимающую полный путь к растру и необзятельную константу, описывающую режим открытия. Если константа опущена, то подразумевается режим только для чтения. В случае успеха функция вернет объект &amp;lt;tt&amp;gt;GDALDataset&amp;lt;/tt&amp;gt;, в противном случае — &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import osgeo.gdal as gdal&lt;br /&gt;
gdalData = gdal.Open( &amp;quot;/home/alex/test/input.tiff&amp;quot;, GA_ReadOnly )&lt;br /&gt;
# или так&lt;br /&gt;
# gdalData = gdal.Open( &amp;quot;/home/alex/test/input.tiff&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
# проверяем все ли в порядке&lt;br /&gt;
if gdalData is None:&lt;br /&gt;
  print &amp;quot;ERROR: can't open raster&amp;quot;&lt;br /&gt;
  sys.exit( 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Получение информации ===&lt;br /&gt;
&lt;br /&gt;
Объект &amp;lt;tt&amp;gt;GDALDataset&amp;lt;/tt&amp;gt; позволяет получить информацию о количестве каналов растра, извлечь данные и метаданные. Все используемые функции имеют понятные названия, поэтому подробно их описывать не вижу смысла, вместо этого приведу небольшой пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;quot;Driver short name&amp;quot;, gdalData.GetDriver().ShortName&lt;br /&gt;
print &amp;quot;Driver long name&amp;quot;, gdalData.GetDriver().LongName&lt;br /&gt;
print &amp;quot;Raster size&amp;quot;, gdalData.RasterXSize, &amp;quot;x&amp;quot;, gdalData.RasterYSize&lt;br /&gt;
print &amp;quot;Number of bands&amp;quot;, gdalData.RasterCount&lt;br /&gt;
print &amp;quot;Projection&amp;quot;, gdalData.GetProjection()&lt;br /&gt;
print &amp;quot;Geo transform&amp;quot;, gdalData.GetGeoTransform()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последняя функция возвращает очередь из 6 чисел:&lt;br /&gt;
&lt;br /&gt;
* X координата левого верхнего пикселя&lt;br /&gt;
* ширина пикселя&lt;br /&gt;
* вращение&lt;br /&gt;
* Y координата левого верхнего пикселя&lt;br /&gt;
* вращение&lt;br /&gt;
* высота пикселя&lt;br /&gt;
&lt;br /&gt;
=== Извлечение растра/канала ===&lt;br /&gt;
&lt;br /&gt;
Любой растр можно представить в виде массива, одноканальный в виде двумерного размерностью X на Y; многоканальный — в виде многомерного. GDAL позволяет получить доступ как ко всему растру сразу, так и к любому каналу. Результатом такой операции будет массив numpy соответсвующей размерности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# получаем весь растр целиком&lt;br /&gt;
raster = gdalData.ReadAsArray()&lt;br /&gt;
# получаем отдельный канал&lt;br /&gt;
gdalBand = gdalData.GetRasterBand( 1 )&lt;br /&gt;
band_1 = gdalBand.ReadAsArray()&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;&lt;br /&gt;
line = gdalBand.ReadAsArray( xoffeset, yoffset, xsize, ysize )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xoffset&amp;lt;/tt&amp;gt; — смещение по X&lt;br /&gt;
* &amp;lt;tt&amp;gt;yoffset&amp;lt;/tt&amp;gt; — смещение по Y&lt;br /&gt;
* &amp;lt;tt&amp;gt;xsize&amp;lt;/tt&amp;gt; — размер блока по X&lt;br /&gt;
* &amp;lt;tt&amp;gt;ysize&amp;lt;/tt&amp;gt; — размер блока по Y&lt;br /&gt;
&lt;br /&gt;
Т.е. если оба смещения буду равны нулю, а &amp;lt;tt&amp;gt;xsize&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;ysize&amp;lt;/tt&amp;gt; — высоте и ширине растра, то в переменной &amp;lt;tt&amp;gt;line&amp;lt;/tt&amp;gt; мы получим первую строку массива. А изменяя значение &amp;lt;tt&amp;gt;yoffset&amp;lt;/tt&amp;gt; можно последовательно пройтись по всем строкам массива.&lt;br /&gt;
&lt;br /&gt;
При извлечении данных следует помнить, что тип данных в массиве соответсвует типу данных растра, и в некоторых случаях это может привести к ошибкам. Например, при вычитании двух целочисленных беззнаковых массивов вполне можно получить неправильный результат из-за целочисленного переполнения. Поэтому при извлечении данных нужно быть внимательными и при необходимости выполнять приведение к другому типу данных. Например, следующая строка извлечет канал растра и принудетельно установит тип данных в Float32 (32 разрядное число с плавающей точкой)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
band_1 = gdalBand.ReadAsArray().astype( numpy.float32 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично выполняется приведение к любому другому типу данных. Полный список поддерживаемых типов данных можно найти в документации к numpy.&lt;br /&gt;
&lt;br /&gt;
=== Операции с растром ===&lt;br /&gt;
&lt;br /&gt;
Для работы с массивами (а растр это тот же массив) удобно использовать пакет numpy — расширение, добавляющее поддержку больших многомерных массивов и матриц, а также обширную библиотеку математических функций для работы с этими массивами.&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;
result = numpy.add( array1, array2 )&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;&lt;br /&gt;
r = sin( array1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в массив &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; будут записаны значения синуса каждого элемента массива &amp;lt;tt&amp;gt;array1&amp;lt;/tt&amp;gt;. Вот более сложный пример — поэлементная (попиксельная) обработка растра&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gdalData = gdal.Open( &amp;quot;/home/alex/test/input.tiff&amp;quot; )&lt;br /&gt;
# размер растра&lt;br /&gt;
xsize = gdalData.RasterXSize&lt;br /&gt;
ysize = gdalData.RasterYSize&lt;br /&gt;
# получаем растр в виде массива&lt;br /&gt;
raster = gdalData.ReadAsArray()&lt;br /&gt;
# перебираем все пиксели растра&lt;br /&gt;
for col in range( xsize ):&lt;br /&gt;
  for row in range( ysize ):&lt;br /&gt;
    # если значение пикселя равно 5, то меняем его на 10&lt;br /&gt;
    # иначе значение остается без изменений&lt;br /&gt;
    if raster[ row, col ] == 5:&lt;br /&gt;
      raster[ row, col ] = 10&lt;br /&gt;
&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,5)&lt;br /&gt;
numpy.putmask(raster,temp1_bool,10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сохранение файла ===&lt;br /&gt;
&lt;br /&gt;
Существует два способа сохранить растр: используя &amp;lt;tt&amp;gt;CreateCopy()&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;Create()&amp;lt;/tt&amp;gt;. При использовании &amp;lt;tt&amp;gt;CreateCopy()&amp;lt;/tt&amp;gt; необходимо указать растр-источник, параметры которого будут использованы при создании нового растра. В случае использования &amp;lt;tt&amp;gt;Create()&amp;lt;/tt&amp;gt; необходимо вручную сформировать метаданные и выполнить запись растра.&lt;br /&gt;
&lt;br /&gt;
Следует помнить, что не все драйверы поддерживают метод &amp;lt;tt&amp;gt;Create()&amp;lt;/tt&amp;gt;, поэтому вначале необходимо проверить, есть ли поддержка нужного метода в драйвере:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
format = &amp;quot;GTiff&amp;quot;&lt;br /&gt;
driver = gdal.GetDriverByName( format )&lt;br /&gt;
metadata = driver.GetMetadata()&lt;br /&gt;
if metadata.has_key( gdal.DCAP_CREATE ) and metadata[ gdal.DCAP_CREATE ] == &amp;quot;YES&amp;quot;:&lt;br /&gt;
  pass&lt;br /&gt;
else:&lt;br /&gt;
  print &amp;quot;Driver %s does not support Create() method.&amp;quot; % format&lt;br /&gt;
  sys.exit( 1 )&lt;br /&gt;
# аналогично выполняется проверка для CreateCopy&lt;br /&gt;
if metadata.has_key( gdal.DCAP_CREATECOPY ) and metadata[ gdal.DCAP_CREATECOPY ] == &amp;quot;YES&amp;quot;:&lt;br /&gt;
  pass&lt;br /&gt;
else:&lt;br /&gt;
  print &amp;quot;Driver %s does not support CreateCopy() method.&amp;quot; % format&lt;br /&gt;
  sys.exit( 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Некоторые драйверы могут работать в режиме только чтения и не поддерживают ни один из этих методов.&lt;br /&gt;
&lt;br /&gt;
При использовании метода &amp;lt;tt&amp;gt;CreateCopy()&amp;lt;/tt&amp;gt; вся необходимая информация берется из «эталонного» растра, но есть возможность задать специфичные для формата параметры&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# эталонный растр&lt;br /&gt;
inputData = gdal.Open( &amp;quot;/home/alex/test/input.tiff&amp;quot; )&lt;br /&gt;
# создаем свой растр &amp;quot;по образу и подобию&amp;quot; inputData&lt;br /&gt;
outputData = driver.CreateCopy( &amp;quot;/home/alex/test/output.tiff&amp;quot;, inputData, 0 )&lt;br /&gt;
# то же самое, но заданы дополительные параметры&lt;br /&gt;
# outputData = driver.CreateCopy( &amp;quot;/home/alex/test/output.tiff&amp;quot;, inputData, 0, [ 'TILED=YES', 'COMPRESS=PACKBITS' ] )&lt;br /&gt;
# закрываем датасеты и освобождаем память&lt;br /&gt;
inputData = None&lt;br /&gt;
outputData = None&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При использование &amp;lt;tt&amp;gt;Create()&amp;lt;/tt&amp;gt; необходимо вручную задать количество каналов, размеры растра и желаемый тип данных (байт, длинное целое, число с плавающей запятой...)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# размеры растра&lt;br /&gt;
cols = 512&lt;br /&gt;
rows = 512&lt;br /&gt;
# количество каналов&lt;br /&gt;
bands = 1&lt;br /&gt;
# тип данных&lt;br /&gt;
dt = gdal.GDT_Byte&lt;br /&gt;
# создаем растр&lt;br /&gt;
outData = driver.Create( &amp;quot;/home/alex/test/out.tiff&amp;quot;, cols, rows, bands, dt )&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;&lt;br /&gt;
outData.SetProjection( proj )&lt;br /&gt;
outData.SetGeoTransform( transform )&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;&lt;br /&gt;
outData.GetRasterBand( 1 ).WriteArray( raster )&lt;br /&gt;
# после записи данных закрываем датасет&lt;br /&gt;
outData = None&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;&lt;br /&gt;
bands = 3&lt;br /&gt;
for i in range( bands ):&lt;br /&gt;
  outData.GetRasterBand( i + 1 ).WriteArray( raster[ i ] )&lt;br /&gt;
outData = None&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Само собой, массив raster должен иметь столько измерений, сколько каналов в растре (или больше).&lt;br /&gt;
&lt;br /&gt;
=== Пример. Простой растровый калькулятор ===&lt;br /&gt;
&lt;br /&gt;
Вооружившись этими сведениями попробуем написать простенький скрипт на Python для сложения двух каналов растра. Скрипт принимает два параметра: исходный растр и путь для сохранения результата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import numpy&lt;br /&gt;
import osgeo.gdal as gdal&lt;br /&gt;
&lt;br /&gt;
# функция проверяющая растр на многоканальность&lt;br /&gt;
def isMultiband( path ):&lt;br /&gt;
  gdalData = gdal.Open( path )&lt;br /&gt;
  if gdalData.RasterCount &amp;lt; 2:&lt;br /&gt;
    print &amp;quot;ERROR: raster must contain at least 2 bands&amp;quot;&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
# извлекает из заданного растра канал с заданным номером&lt;br /&gt;
def bandAsArray( path, bandNum ):&lt;br /&gt;
  gdalData = gdal.Open( path )&lt;br /&gt;
  gdalBand = gdalData.GetRasterBand( bandNum )&lt;br /&gt;
  array = gdalBand.ReadAsArray().astype( numpy.float32 )&lt;br /&gt;
  gdalBand = None&lt;br /&gt;
  gdalData = None&lt;br /&gt;
  return array&lt;br /&gt;
&lt;br /&gt;
# сохраняет массив array как растр с именем outPath в формате&lt;br /&gt;
# GeoTiff. Данные о проекции берутся из растра etalonPath&lt;br /&gt;
def saveRaster( outPath, etalonPath, array ):&lt;br /&gt;
  gdalData = gdal.Open( etalonPath )&lt;br /&gt;
  projection = gdalData.GetProjection()&lt;br /&gt;
  transform = gdalData.GetGeoTransform()&lt;br /&gt;
  xsize = gdalData.RasterXSize&lt;br /&gt;
  ysize = gdalData.RasterYSize&lt;br /&gt;
  gdalData = None&lt;br /&gt;
&lt;br /&gt;
  format = &amp;quot;GTiff&amp;quot;&lt;br /&gt;
  driver = gdal.GetDriverByName( format )&lt;br /&gt;
  metadata = driver.GetMetadata()&lt;br /&gt;
  if metadata.has_key( gdal.DCAP_CREATE ) and metadata[ gdal.DCAP_CREATE ] == &amp;quot;YES&amp;quot;:&lt;br /&gt;
    outRaster = driver.Create( outPath, xsize, ysize, 1, gdal.GDT_Float32 )&lt;br /&gt;
    outRaster.SetProjection( projection )&lt;br /&gt;
    outRaster.SetGeoTransform( transform )&lt;br /&gt;
    outRaster.GetRasterBand( 1 ).WriteArray( array )&lt;br /&gt;
    outRaster = None&lt;br /&gt;
  else:&lt;br /&gt;
    print &amp;quot;Driver %s does not support Create() method.&amp;quot; % format&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  args = sys.argv[ 1: ]&lt;br /&gt;
  inPath = args[ 0 ]&lt;br /&gt;
  outPath = args[ 1 ]&lt;br /&gt;
  if isMultiband( inPath ):&lt;br /&gt;
    band1 = bandAsArray( inPath, 1 )&lt;br /&gt;
    band2 = bandAsArray( inPath, 2 )&lt;br /&gt;
    res = numpy.add( band1, band2 )&lt;br /&gt;
    if not saveRaster( outPath, inPath, res ):&lt;br /&gt;
      print &amp;quot;ERROR: saving failed&amp;quot;&lt;br /&gt;
      sys.exit( 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ссылки по теме ===&lt;br /&gt;
&lt;br /&gt;
# [http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python]&lt;br /&gt;
# [http://gdal.org/gdal_tutorial.html GDAL API tutorial]&lt;br /&gt;
# [http://gdal.org/gdal_8h.html GDAL C API]&lt;br /&gt;
# [http://trac.osgeo.org/gdal/wiki/GdalOgrInPython GDAL/OGR in Python]&lt;br /&gt;
# [http://www.scipy.org/Tentative_NumPy_Tutorial Tentative NumPy Tutorial]&lt;br /&gt;
# [http://docs.scipy.org/doc/ NumPy and SciPy documentation]&lt;/div&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
</feed>