<?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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_.NET_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_GDAL%2FOGR%3A_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D1%8F</id>
	<title>Создание приложения .NET на базе GDAL/OGR: загрузка слоя - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_.NET_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_GDAL%2FOGR%3A_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D1%8F"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_.NET_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_GDAL/OGR:_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D1%8F&amp;action=history"/>
	<updated>2026-04-04T17:47:28Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_.NET_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_GDAL/OGR:_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D1%8F&amp;diff=6947&amp;oldid=prev</id>
		<title>Bolotoved: Новая страница: «{{Статья|Опубликована|sharpmap-opentab}} {{Аннотация|Пример кода на примере данных Mapinfo TAB.}}  Рассм…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_.NET_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_GDAL/OGR:_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D1%8F&amp;diff=6947&amp;oldid=prev"/>
		<updated>2012-08-05T17:32:39Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Статья|Опубликована|sharpmap-opentab}} {{Аннотация|Пример кода на примере данных Mapinfo TAB.}}  Рассм…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Статья|Опубликована|sharpmap-opentab}}&lt;br /&gt;
{{Аннотация|Пример кода на примере данных Mapinfo TAB.}}&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример приложения .NET, использующего GDAL/ORG для доступа к данным Mapinfo TAB.&lt;br /&gt;
&lt;br /&gt;
Файлы таблиц MapInfo часто распространяются в формате *.TAB. Здесь и далее, под форматом TAB понимается целый набор файлов с расширениями *.TAB, *.MAP, *.DAT и *.ID. Если с первым из них можно посмотреть в блокноте и при желании разобраться что к чему, то с остальными тремя это не пройдёт, поскольку они двоичные. А разобраться с двоичными файлами невероятно сложно. Таким образом, вариант с написанием кода обработки этих файлов вручную отпадает. На помощь приходит GDAL/OGR.&lt;br /&gt;
&lt;br /&gt;
Библиотека абстракций [http://www.gdal.org/ GDAL/OGR]позволяет открывать и модифицировать большое количество различных форматов. Распространяется она под лицензией [http://ru.wikipedia.org/wiki/MIT_License MIT]. Это означает, что вы можете без каких-либо ограничений использовать её в своих проектах. Запрещено лишь использование доброго имени держателя авторских прав в рекламе.&lt;br /&gt;
&lt;br /&gt;
Следует отметить, что если вы большой поклонник .NET, то, скорее всего, отделаться малой кровью у вас не получится, поскольку в состав GDAL/OGR входят лишь [http://ru.wikipedia.org/wiki/Управляемый_код unmanaged dll], которые содержат обычный машинный код. Это чревато тем, что вам придётся иметь дело с [http://ru.wikipedia.org/wiki/Маршалинг маршалингом] для вызова неуправляемого (unmanaged) кода в ваших управляемых (managed) .NET-сборках. Всё это выливается в написание дополнительного кода. В идеале хочется, чтобы после добавления ссылок на все необходимые библиотеки слой открывался одной строчкой, например, так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mapComponent.Map = MapOpener.Open(@&amp;quot;C:\Layer.TAB&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решение вышеобозначенной проблемы - [http://www.codeplex.com/SharpMap SharpMap]. SharpMap – фреймворк для .NET, который является надстройкой над GDAL/OGR и некоторыми другими библиотеками для работы с данными ГИС. Он позволяет открывать большое количество форматов файлов, содержащих ГИС-данные. Распространяется SharpMap по лицензии [http://ru.wikipedia.org/wiki/LGPL LGPL], поэтому если вы ничего не собираетесь менять в исходном коде, то можете быть спокойны, ограничения лицензии не должны вас коснуться.&amp;lt;br /&amp;gt; Перейдём от слов к делу и по шагам опишем, что нужно сделать для того, чтобы получить на форме вашего приложения изображение карты, имея в распоряжении установленную Visual Studio 2005/2008 и несколько TAB-файлов:&lt;br /&gt;
&lt;br /&gt;
# Загружаем [http://home.gdal.org/fwtools FWTools] (текущая версия на момент написания статьи 2.2.8). GDAL/OGR входит в этот набор программ. Устанавливаем.&lt;br /&gt;
# Загружаем [http://www.codeplex.com/SharpMap/SourceControl/ListDownloadableCommits.aspx последний change set] (набор изменений) проекта [http://www.codeplex.com/SharpMap SharpMap] (на данный момент последним является change set №40903). Откройте файл *.sln из скачанного архива и посмотрите на структуру решения. Изучите его и попытайтесь скомпилировать.&lt;br /&gt;
# Создаём в Visual Studio пустой Solution (Blank Solution).&lt;br /&gt;
# Копируем папки с проектами SharpMap, SharpMap.UI, SharpMap.Extensions и папку ExternalReferences в папку свежесозданного Solution. После чего добавляем их в среде Visual Studio. Попробуйте всё скомпилировать – должно получиться.&lt;br /&gt;
# Создайте в Solution новый Window Forms проект. И добавьте в него ссылки (References) на проекты SharpMap, SharpMap.UI и SharpMap.Extensions. Сделайте Build. После билда в режиме дизайнера главной формы приложения откройте тулбокс – там должны появиться компоненты MapImage и FeatureDataSet. Расположите MapImage на форме.&lt;br /&gt;
# Скопируйте все dll-файлы из папки bin, где вы установили [http://en.wikipedia.org/wiki/FWTools FWTools], в папку bin/Debug (или bin/Release) вашего решения. Их там около 30Мб. Возможно, что нужны не все, но лучше перестраховаться и скопировать полный набор.&lt;br /&gt;
# Исследуйте скачанный change set фреймворка [http://www.codeplex.com/SharpMap SharpMap] на предмет наличия примеров кода по открытию TAB-файлов. Используйте их в своём приложении.&lt;br /&gt;
&lt;br /&gt;
Вот и всё. Осталось лишь показать работающий код.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 public class MapOpener&lt;br /&gt;
 {&lt;br /&gt;
     public static Map InitializeMap(params string[] layerFileNames)&lt;br /&gt;
     {&lt;br /&gt;
         Map map = new Map();&lt;br /&gt;
 &lt;br /&gt;
         foreach (string fileName in layerFileNames)&lt;br /&gt;
         {&lt;br /&gt;
             string layerName;&lt;br /&gt;
 &lt;br /&gt;
             Ogr ogr = new Ogr(fileName, out layerName);&lt;br /&gt;
             VectorLayer layer = new VectorLayer(layerName, ogr);&lt;br /&gt;
 &lt;br /&gt;
             map.Layers.Add(layer);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         map.BackColor = Color.White;&lt;br /&gt;
         map.ZoomToExtents();&lt;br /&gt;
 &lt;br /&gt;
         return map;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public partial class PsmForm : Form&lt;br /&gt;
 {&lt;br /&gt;
     public PsmForm()&lt;br /&gt;
     {&lt;br /&gt;
         InitializeComponent();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     private void OpenMap()&lt;br /&gt;
     {&lt;br /&gt;
         try&lt;br /&gt;
         {&lt;br /&gt;
             if (openFileDialog.ShowDialog() == DialogResult.OK)&lt;br /&gt;
             {&lt;br /&gt;
                 mapImage.Map = MapOpener.InitializeMap(openFileDialog.FileNames);&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         catch (Exception e)&lt;br /&gt;
         {&lt;br /&gt;
             MessageBox.Show(this, e.Message, &amp;quot;Ошибка&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     private void btnOpen_Click(object sender, EventArgs e)&lt;br /&gt;
     {&lt;br /&gt;
         OpenMap();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результирующее приложение может выглядить например таким образом:&lt;br /&gt;
&lt;br /&gt;
[[Image:sharpmap-opentab-01.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
*[http://www.codeplex.com/SharpMap SharpMap - Geospatial application framework for the CLR]&lt;/div&gt;</summary>
		<author><name>Bolotoved</name></author>
	</entry>
</feed>