Географические информационные системы (ГИС).

Таблица 7. Описание заголовка Записей главного файла

Рис. 3 Организация индексного файла

Таблица 6 Содержимое записи Полигон

Таблица 5 Содержимое записи Дуга

Таблица 3. Содержимое записи Точка

Таблица 2. Описание заголовка Записей главного файла

Таблица 1 Описание заголовка главного файла

Рис.1 Организация главного файла

Организация главного файла

Главный файл содержит заголовок файла фиксированной длины, за которым следуют записи переменной длины. Каждая запись переменной длины состоит из заголовка записи фиксированной длины, за которым следует содержимое строки переменной длины. Рис. 1 иллюстрирует организацию главного файла.

Заголовок Файла
Заголовок Файла Содержимое строки
Заголовок Файла Содержимое строки
Заголовок Файла Содержимое строки
Заголовок Файла Содержимое строки
...  
...  
Заголовок Файла Содержимое строки

Порядок байтов

Порядок байтов в integers и double-precision integers, составляющих описание данных в заголовке файла (определенном выше) и в содержимом строк в главном файле, - малый (PC или Intel). Порядок байтов в integers и double-precision integers, из которых состоит остаток файла, - большой (Sun или Motorola).

Заголовок главного файла

Длина заголовка главного файла - 100 байт. В Таблице 1 показаны поля, их положение в байтах относительно начала файла, и порядок байтов.

Позиция Поле Значение Тип Порядок байтов
Байт 0 Код файла Integer Большой
Байт 4 Не исполь. Integer Большой
Байт 8 Не исполь. Integer Большой
Байт 12 Не исполь. Integer Большой
Байт 16 Не исполь. Integer Большой
Байт 20 Не исполь. Integer Большой
Байт 24 Длина файла Длина файла Integer Большой
Байт 28 Версия Integer Малый
Байт 32 Тип объекта Тип объекта Integer Малый
Байт 36 Границы Xmin Double Малый
Байт 44 Границы Ymin Double Малый
Байт 52 Границы Xmax Double Малый
Байт 60 Границы Ymax Double Малый
Байт 68 Не исполь. Integer Большой
... ... ... ... ...
... ... ... ... ...
Байт 0 Не исполь. Integer Большой

Значение длины файла есть общая длина файла, измеренная в 16-битных словах (включая 50 16-битных слов, которые составляют заголовок).

Все объекты в shapefile должны быть одного и того же типа. Величины типов должны быть такими:

Величина Тип Объекта
Точка
Дуга
Полигон
Набор точек

Заголовок записи

Заголовок для каждой записи содержит номер записи и длину содержимого записи. заголовок записи имеет фиксированную длину 8 байт. В Таблице 2 показаны поля заголовка записи, их позиции относительно начала файла, величины и порядок байтов.

Позиция Поле Значение Тип Порядок байтов
Байт 0 Номер записи Номер записи Integer Большой
Байт 4 Длина содерж. Длина содерж. Integer Большой

Номера записей начинаются с

1.Длина содержимого записи измеряется в 16-битных словах. Каждая запись, следовательно, составляет (4 + длина содержимого) 16-битных слов, и такие записи расположены вплоть до конца файла, длина которого хранится в 24-м байте заголовка файла.
Содержимое записи главного файла
Содержимое записи shapefile состоит из типа объекта, за которым следуют геометрические данные объекта. Длина содержимого записи зависит от количества частей и вершин объекта. Для каждого типа объекта мы сначала опишем сам объект, а затем его соотношение с содержимым записи на диске. В Таблицах 3-6 позиция относится к началу содержимого записи.

Точка

Точка состоит из пары чисел double-precision в порядке X, Y.

Point

{
Double X //Координата X

Double Y //Координата Y

}

Позиция Поле Значение Тип Кол-во Порядок байтов
Байт 0 Тип Объекта Integer Малый
Байт 4 X X Double Малый
Байт 12 Y Y Double Малый

Набор_точек
Набор_точек представляет собой набор точек:
MultiPoint
{
Double[4] Box //Граничный прямоуг.
Integer NumPoints //Количество точек
Point[NumPoints] Points //Точки в наборе
}
Граничный прямоугольник записывается в следующем порядке: Xmin, Ymin, Xmax, Ymax.

Таблица 4 Содержимое записи Набор точек

Позиция Поле Значение Тип Кол-во Порядок байтов
Байт 0 Тип Объекта Integer Малый
Байт 4 Box Box Double Малый
Байт 36 NumPoints NumPoints Integer Малый
Байт 40 Points Points Points NumPoints Малый

Дуга

Дуга Shapefile может состоять из набора полилиний, которые не обязательно стыкуются друг с другом. Полилиния есть упорядоченный набор вершин. Каждая полилиния является частью дуги.
Arc
{
Double[4] Box //Граничный прямоуг.
Integer NumParts //Количество частей
Integer NumPoints //Общее кол-во точек
Integer[NumParts] Parts //Индекс первой точки в части
Point[NumPoints] Points //Точки для всех частей
}

Поля дуги детально описаны ниже:

Box Граничный прямоугольник для дуги, записанный в порядке Xmin, Ymin, Xmax, Ymax.
NumParts: Количество полилиний в дуге
NumPoints: Общее количество точек для всех полилиний.
Parts: Массив длиной NumParts. содержит индекс первой точки в массиве точек для каждой полилинии. Массив индексов начинается с 0.
Points: Массив длиной NumPoints. Точки каждой полилинии в дуге хранятся друг за другом. Точки полилинии 2 следуют за точками полилинии 1 и так далее. Массив частей (Parts) содержит индекс начальной точки для каждой полилинии. Нет никакого разделителя в массиве точек между полилиниями.
Позиция Поле Значение Тип Кол-во Порядок байтов
Байт 0 Тип Объекта Integer Малый
Байт 4 Box Box Double Малый
Байт 36 NumPoints NumPoints Integer Малый
Байт 40 NumPoints NumPoints Integer Малый
Байт X Points Points Point NumPoints  
Примечание: X = 44 + 4 * NumParts      

Полигон

Полигон состоит из ряда замкнутых, самонепересекающихся контуров. Полигон может содержать несколько внутренних контуров. Порядок вершин или ориентация контуров показывает, какая сторона контура находится внутри полигона. Все, что находится справа от наблюдателя, идущего вдоль контура по порядку вершин, находится внутри полигона. Таким образом вершины единичного, внешнего по отношению к другим контурам, полигона расположены всегда по часовой стрелке. Контуры полигона - это его части.

Структура полигона идентична структуре дуги:
Polygon
{
Double[4] Box //Граничный прямоуг.

Integer NumParts //Количество частей

Integer NumPoints //Общее кол-во точек

Integer[NumParts] Parts //Индекс первой //Точки в части

Point[NumPoints] Points //Точки для всех частей

}

Поля для Полигона детально описаны ниже

Box: Граничный прямоугольник для полигона, записанный в порядке Xmin, Ymin, Xmax, Ymax.
NumParts Количество контуров в полигоне
NumPoints Общее количество точек для всех контуров
Parts: Массив длиной NumParts. содержит индекс первой точки в массиве точек для каждого контура . Массив индексов начинается с 0.
Points: Массив длиной NumPoints. Точки каждого контура в полигоне хранятся друг за другом. Точки контура 2 следуют за точками контура 1 и так далее. Массив частей (parts) содержит индекс начальной точки для каждого контура. Нет никакого разделителя в массиве точек между контурами.

 

На Рис. 2 показан пример полигона.

Несколько важных замечаний об объектах полигоны

Контуры должны быть замкнутыми ( первая и последняя точки ДОЛЖНЫ БЫТЬ одинаковыми).
Порядок контуров полигоне не имеет значения.

Контуры полигона не должны иметь сегментов, пересекающих друг друга. Другими словами, сегмент, принадлежащий одному контуру, не может пересекаться с сегментом, принадлежащим другому контуру. Контуры полигона могут касаться друг друга в вершинах, но не вдоль сегментовРис. 2 Пример ПолигонаНа этом рисунке показан полигон с дырой и 8 вершинами

v1

v5

v4 v8 v6 v2

v7

v3

В этом примере NumParts равно 2 и NumPoints равно 10.

Parts:                
                     
 
Points: v1 v2 v3 v4 v1 v5 v6 v7 v8 v5
Позиция Поле Значение Тип Кол-во Порядок байтов
Байт 0 Тип Объекта Integer Малый
Байт 4 Box Box Double Малый
Байт 36 NumParts NumParts Integer Малый
Байт 40 NumPoints NumPoints Integer Малый
Байт X Points Points Point NumPoints  
Примечание: X = 44 + 4 * NumParts      

Организация индексного файла Индексный файл содержит 100-байтный заголовок, за которым следуют 8-байтные записи фиксированной длины. Рис. 3 иллюстрирует организацию индексного файла

Заголовок файла
Запись  
Запись  
Запись  
Запись  
...  
...  
Запись  

Заголовок индексного файла

Заголовок индексного файла идентичен по организации заголовку главного файла, описанному выше. Длина файла, хранящаяся в заголовке файла, есть общая длина индексного файла, измеренная в 16-битных словах. (Пятьдесят 16-битных слов самого заголовка плюс 4 умножить на количество строк).

Записи индексного файла

I-я запись индексного файла представляет собой смещение и длину содержимого для I-й записи в главном файле. Таблица 7 показывает поля заголовка файла, их позицию, величину и порядок байтов. В таблице позиция - это количество байтов по отношению к началу записи индексного файла.

Позиция Поле Значение Тип Порядок байтов
Байт 0 Номер записи Номер записи Integer Большой
Байт 4 Длина содерж. Длина содерж. Integer Большой

Смещение записи в главном файле есть количество 16-битных слов от начала главного файла до первого байта заголовка записи для этой записи. Таким образом, смещение первой записи главного файла равно 50, что есть 100-байтный заголовок файла до первого байта заголовка записи для этой записи. Таким образом, смещение первой записи главного файла равно 50, что есть 100-байтный заголовок файла.
Содержимое записи, хранимое в записи индексного файла, имеет ту же величину, что и содержимое записи, хранимое в заголовке записи главного файла.

Код:

Формат обмена данными Mapinfo В этом описан формат обмена данными Mapinfo. В частности, здесь описаны: - Заголовок файла формата MIF. - Секция данных в файлах формата MIF. - Коды типов линий, штриховки, символов и шрифтов в файлах формата MIF. - Файл формата MID. - Примеры файлов. Этот универсальный формат позволяет сопоставлять различным графическим элементам настраиваемые данные. MIF-файл является текстовым (ASCII), поэтому файлы в таком формате можно редактировать, достаточно легко генерировать, причем они будут работать в любых системах, где работает Mapinfo. Возможно, оптимальным способом изучения Mapinfo Interchange Format (MIF) является просмотр примера, приведенного в конце этого приложения, походу чтения описания формата. Вы можете также создать свои примеры, экспортировав какие-нибудь файлы в формат MIF, а затем просматривать их в текстовом редакторе.Данные Mapinfo хранятся в двух файлах графическая информация содержится в файлах с расширением .MIF, а текстовая в файлах с расширением .MID. Каждая строка текстовых данных отделяется от следующей строки либо символом возврата каретки (Carriage Return), либо возврата каретки вместе с новой строкой (Line Feed), либо только символом новой строки. MIF-файл состоит из двух частей:заголовка и секции данных. Заголовок файла содержит информацию о том, как создавать таблицы Mapinfo, а секция данных содержит определения графических объектов. Заголовок файла формата MIF Заголовок файла формата MIF имеет следующий вид (в квадратныескобки взята информация, которая может отсутствовать). VERSION n[ DELIMITER "<с>" ][ UNIQUE n,n.. ][ INDEX n, n.. ][ COORDSYS...][ TRANSFORM...]COLUMNS n<имя> <тип><имя> <тип>.. Как было сказано выше, Вы должны указать, к какой версии MIF- формата относится файл: VERSION 1 или VERSION 2. В версии Version 2 могут присутствовать предложения COORDSYS и TRANSFORM. Delimiter (Разделитель) Здесь в двойных кавычках указывается символ, использующийся в качестве разделителя, например: DELIMITER ";". Стандартное значение разделителя - символ табуляции; при использовании стандартного разделителя строка DELIMITER может быть опущена. Unique (Уникальная колонка) Здесь задается число. Это число указывает на столбец в базе данных: 3 указывает на третий столбец, 7 - на седьмой и так далее. Что происходит со столбцами, перечисленными в списке UNIQUE?Представим, например, что имеется база данных о шоссейных дорогах. Каждому шоссе соответствует единственное название, но шоссе может распадаться на несколько участков (которым сопоставлены отдельные записи). Поместите столбец NAME в список UNIQUE, а столбец сегментов не указывайте в этом списке. В результате будут созданы две соединенные таблицы: таблица имен и таблица прочих атрибутов объектов. Именно таким образом разрабатывались различные таблицы улиц для Mapinfo (таблицы Streetinfo). Index (Индекс) Здесь задается число. Это число указывает на столбец в базе данных: 3 указывает на третий столбец, 7 - на седьмой и так далее. Для столбцов, перечисленных в списке INDEX, создаются индексы. Предложение CoordSys (Координатная система) Предложение COORDSYS задается для того, чтобы указать, что данные хранятся HЕ в форме широты/долготы. Если предложение COORDSYS отсутствует, то предполагается, что данные приведены в форме широта/долгота. Все координаты приводятся относительно северо-восточного квадранта. Координаты объектов на территории США имеют отрицательную координату X, а координаты объектов в России и Европе (к востоку от Гринвича) имеют положительные координаты по оси X. Объектам в северном полушарии соответствуют положительные координаты Y, а объектам в южном полушарии - отрицательные координаты Y. Предложение Transform (Преобразование) Если в файле MIF записаны координаты относительно северо- западного квадранта (квадрант 2), то Вы можете задать преобразование этих координат к северо-восточному квадранту (квадрант 1) в предложении Transform. Квадрант 2: Квадрант 1: Северо-западный квадрант Северо-восточный квадрант Квадрант 3: Квадрант 4: Юго-западный квадрант Юго-восточный квадрант Данное предложение имеет следующую форму: TRANSFORM множительХ, множительY, смещениеХ, смещениеY Чтобы задать преобразование из данных по квадранту 2 в данные поквадранту 1, задайте следующее предложение Transform: TRANSFORM -1,0,0,0 Hули означают, что Mapinfo игнорирует данные параметры. Если Вы работаете с программой, создающей файлы формата MIF скоординатами для квадранта 2, Вы можете: - добавлять предложения TRANSFORM в файлы MIF; - внести изменение в программу, чтобы она вырабатывала координатыдля квадранта 1; - внести изменение в программу, чтобы она добавляла предложениеTRANSFORM в каждый MIF-файл. Columns (Колонки) Здесь задается число столбцов. Затем, для каждого столбца в отдельной строке указывается название столбца, тип данных в нем, а также размер поля (для столбцов, содержащих строки и десятичные числа). Возможны следующие типы столбцов: - char (длина поля) - integer (4 байта) - smallint (2 байта, так что допустимы числа в диапазоне от-32767 до +32767) - decimal (длина поля, число цифр после запятой) - float - data - logical Вот пример раздела столбцов в заголовке: COLUMNS 3 STATE char (15) POPULATION Integer AREA decimal (8,4) Файл MID должен содержать следующие три столбца данных, указанныев заголовке: столбец STATE: 15-символьное поле; столбец POPULATION: поле целых чисел; столбец AREA: поде десятичных чисел, состоящих из не более чем 8цифр, в том числе из 4 цифр после запятой. Секция данных в файлах формата MIF Секция данных в файлах формата MIF следует после заголовка и должна начинаться со слова DATA на отдельной строке: DATAСекция данных MIF-файла может содержать любое число графическихпримитивов, по одному для каждого графического объекта. Mapinfo сравнивает разделы файлов формата MIF и MID, сопоставляя первому объекту в MIF-файле первую строку MID-файла, второму объекту MIF-файла вторую строку MID-файла и так далее.Если для строки MID-файла не найдено соответствующего графического объекта, то создается "пустой" объект (NONE) в соответствующей позиции MIF-файла. NONEМогут использоваться следующие графические объекты:- точка- линия- ломаная- область- дуга- текст- прямоугольник- скругленный прямоугольник- эллипсОбъект типа точка имеет два параметра: координату Х и координату Y. Может также быть указан вид символа, которым обозначается данная точка. Для символа указывается номер. Если не задан символ, для обозначения точки используется текущий символ.POINT x у [ symbol (вид, цвет, размер)]Объект типа линия должен иметь четыре обязательных параметра; координаты Х и Y для двух концевых точек. Может также быть указан тип линии. Если тип линии не задав, то используется текущий тип линий.LINE х1 у1 х2 у2 [ PEN (ширина, тип, цвет) ]Для объекта типа ломаная должны быть заданы координаты Х и Y длявсех вершин ломаной. Число вершин (numpts) ломаной указывается после ключевого слова PLINE. Может также быть указан тип линии и наличие сглаживания. Если явно не указано, что ломаная сглажена (SMOOTH), то предполагается, что она не сглажена.PLINE numpts x1 y1 x2 y2[ PEN (ширина, тип, цвет) ] [ SMOOTH ]Объект типа область может состоять из одного или нескольких многоугольников. Для каждого многоугольника должны быть указаны координаты Х и Y всех вершин в таком виде: nunpts список координат numpts2 список координатМожет также быть указан тип линий, штриховок и центроид области. Указание центроида сокращает время импорта и экспорта.REGION #pgons numpts1 x1 y1 x2 y2numpts2 х1 у1 х2 y2[ PEN (ширина, тип, цвет) ][ BRUSH (шаблон, основной_цвет, цвет_фона} ][ CENTER х у ]Для объекта типа дуга должны быть указаны противоположные по диагонали углы описанного прямоугольника, а также начальный (a) и конечный (b) углы дуги в градусах, считая против хода часовой стрелки (нуль в положении стрелки в 15.00). Может также быть указан тип линии.ARC x1 y1 х2 у2 а b [ PEN (ширина, тип, цвет) ]Для текстового объекта должен быть указан собственно текст в кавычках, а также противоположные углы описанного прямоугольника.Может также быть задан шрифт. text "<строка текста>" x1 у1 х2 у2 [ FONT...] [ Spacing {1.011.512.0}] [ Justify {Left | center | Right}] [ Angle угол_поворота] [ Label Line {simple | arrow} x у ] Для прямоугольника задаются координаты его противоположных углов.Может такжебыть указан тип линий и штриховки. RECT х1 у1 х2 у2 [ PEN (ширина, тип, цвет) ] [ BRUSH (шабпон, основной_цвет, цвет_фона)]Для скругленного прямоугольника задаются координаты его противоположных углов, а также степень сглаживания (а). Может также быть указан тип линий и штриховки. Степень сглаживания выражается в координатных единицах. ROUNDRECT X1 у1 х2 у2 а [ PEN (ширина, тип, цвет) ] [ BRUSH (шаблон, основной_цвет, цвет_фона} ] Для эллипса задаются координаты противоположных углов описанного прямоугольника. Может также быть указан тип линий и штриховки. ELLIPSE х1 у1 х2 у2 [ PEN (ширина, тип, цвет}] [ BRUSH (.шаблон, основной_цвет, цвет_фона}]

В том, что владение точной и достоверной информацией есть важнейшее условие достижения успеха, уже никого не нужно убеждать. Но еще более важно уметь работать с имеющейся информацией. Методы работы с данными постоянно совершенствуются, и теперь уже привычно видеть документы, таблицы, графики, чертежи и картинки на экране компьютера. При помощи компьютера мы создаем и изменяем, извлекаем и анализируем данные. Одним из типов документов, в который компьютер вдохнул новую жизнь, стала и географическая карта.

Существуют виды деятельности, в которых карты - электронные, бумажные или хотя бы представляемые в уме - незаменимы. Ведь многие дела невозможно начать, не выяснив предварительно, где именно находится точка приложения наших усилий. Даже в быту, мы ежечасно и иногда даже ежеминутно работаем с информацией о географическом положении объектов - магазин, детский сад, метро, работа, школа… Пространственное мышление естественно для нашего сознания.

Последние десятилетия ознаменовались бумом в области применения карт, и связано это с возникновением Географических Информационных Систем, воплотивших принципиально новый подход в работе с пространственными данными.

Географическая Информационная Система - или ГИС - это компьютерная система, позволяющая показывать необходимые данные на электронной карте. Карты, созданные с помощью ГИС, можно смело назвать картами нового поколения. На карты ГИС можно нанести не только географические, но и статистические, демографические, технические и многие другие виды данных и применять к ним разнообразные аналитические операции. ГИС обладает уникальной способностью выявлять скрытые взаимосвязи и тенденции, которые трудно или невозможно заметить, используя привычные бумажные карты. Мы видим новый, качественный, смысл наших данных, а не механический набор отдельных деталей.

Электронная карта, созданная в ГИС, поддерживается мощным арсеналом аналитических средств, богатым инструментарием создания и редактирования объектов, а также базами данных, специализированными устройствами сканирования, печати и другими техническими решениями, средствами Интернет - и даже космическими снимками и информацией со спутников.

Вся информация, полученная благодаря использованию технологий ГИС, используются не специалистами-географами, а обычными людьми - учеными, бизнесменами, врачами, адвокатами, чиновниками, маркетологами, строителями, экологами - и даже домохозяйками, если не они желают зря тратить время на обход магазинов.

С помощью ГИС природоохранные организации следят за состоянием лесов, рек и почв. Коммунальные службы планируют и проводят мероприятия по обслуживанию городских сетей. Спасатели, пожарники и ремонтники оперативно рассчитывают оптимальные маршруты.

ГИС все шире применяются в бизнесе. Так, например, владелец сети магазинов, поместив на карту потенциальных покупателей своей продукции, может обнаружить, в каких районах города они преимущественно живут. Перевозчики грузов повышают надежность доставки, экономят время и горючее за счет оптимизации маршрутов. Продавцы и покупатели недвижимости не могут без них принимать решения. Внимательный взгляд на карту - и обнаруживаются резервы в обслуживании, незамеченные конкурентами, намечаются оптимальные места для размещения рекламных щитов, планируются новые торговые точки и многое другое.