Обсудить в форуме Комментариев 13Редактировать в вики
Пример кода на примере данных Mapinfo TAB.
Рассмотрим пример приложения .NET, использующего GDAL/ORG для доступа к данным Mapinfo TAB.
Файлы таблиц MapInfo часто распространяются в формате *.TAB. Здесь и далее, под форматом TAB понимается целый набор файлов с расширениями *.TAB, *.MAP, *.DAT и *.ID. Если с первым из них можно посмотреть в блокноте и при желании разобраться что к чему, то с остальными тремя это не пройдёт, поскольку они двоичные. А разобраться с двоичными файлами невероятно сложно. Таким образом, вариант с написанием кода обработки этих файлов вручную отпадает. На помощь приходит GDAL/OGR.
Библиотека абстракций GDAL/OGRпозволяет открывать и модифицировать большое количество различных форматов. Распространяется она под лицензией MIT. Это означает, что вы можете без каких-либо ограничений использовать её в своих проектах. Запрещено лишь использование доброго имени держателя авторских прав в рекламе.
Следует отметить, что если вы большой поклонник .NET, то, скорее всего, отделаться малой кровью у вас не получится, поскольку в состав GDAL/OGR входят лишь unmanaged dll, которые содержат обычный машинный код. Это чревато тем, что вам придётся иметь дело с маршалингом для вызова неуправляемого (unmanaged) кода в ваших управляемых (managed) .NET-сборках. Всё это выливается в написание дополнительного кода. В идеале хочется, чтобы после добавления ссылок на все необходимые библиотеки слой открывался одной строчкой, например, так:
mapComponent.Map = MapOpener.Open(@"C:\Layer.TAB");
Решение вышеобозначенной проблемы - SharpMap. SharpMap – фреймворк для .NET, который является надстройкой над GDAL/OGR и некоторыми другими библиотеками для работы с данными ГИС. Он позволяет открывать большое количество форматов файлов, содержащих ГИС-данные. Распространяется SharpMap по лицензии LGPL, поэтому если вы ничего не собираетесь менять в исходном коде, то можете быть спокойны, ограничения лицензии не должны вас коснуться.
Перейдём от слов к делу и по шагам опишем, что нужно сделать для того, чтобы получить на форме вашего приложения изображение карты, имея в распоряжении установленную Visual Studio 2005/2008 и несколько TAB-файлов:
Вот и всё. Осталось лишь показать работающий код.
public class MapOpener { public static Map InitializeMap(params string[] layerFileNames) { Map map = new Map(); foreach (string fileName in layerFileNames) { string layerName; Ogr ogr = new Ogr(fileName, out layerName); VectorLayer layer = new VectorLayer(layerName, ogr); map.Layers.Add(layer); } map.BackColor = Color.White; map.ZoomToExtents(); return map; } } public partial class PsmForm : Form { public PsmForm() { InitializeComponent(); } private void OpenMap() { try { if (openFileDialog.ShowDialog() == DialogResult.OK) { mapImage.Map = MapOpener.InitializeMap(openFileDialog.FileNames); } } catch (Exception e) { MessageBox.Show(this, e.Message, "Ошибка"); } } private void btnOpen_Click(object sender, EventArgs e) { OpenMap(); } }
Результирующее приложение может выглядить например таким образом:
Обсудить в форуме Комментариев 13Редактировать в вики
Последнее обновление: 2014-05-14 23:37
Дата создания: 12.11.2008 Автор(ы): s1ay3r
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).