Как создать шейп файл в qgis

Обновлено: 06.07.2024

Первое, что нужно сделать, создать хранилище данных и в нашем случае это база данных под управлением PostgreSQL.
PostgreSQL это СУБД - система управления базами данных, т.е. баз данных (БД), под управлением СУБД, может быть много. В нашем случае нужно создать свою собственную БД. БД создаются пользователями, в терминологии PostgreSQL ролями, которые имеют соответствующее право - право создавать БД. Изначально, при установке СУБД PostgreSQL автоматически создаётся пользователь postgres, который имеет права суперпользователя. Он имеет права делать всё, со всеми объектами которыми управляет СУБД. Принято, что для каждой БД должен быть создан пользователь (роль), который будет выступать в качестве владельца создаваемой БД.
Для этого нужно войти в приложение pgAdmin (кнопка Mange в Dashboard), подключиться к нашему локальному серверу (localhost) как пользователь postgres с паролем (если вы его не меняли) postgres. Далее выделить пункт, в дереве сервера, "Роли входа" и нажать правую клавишу мыши и выбрать "Новая роль. ". Имя пользователя - student, пароль - student. Отметить привилегия роли как на Рис.2.


Далее, создадим БД с именем student, указав, в качестве владельца, только что созданную роль student. Параметры БД нужно указать аналогично Рис.3

Главное - использование шаблона "template_postgis" . Он содержит всё необходимое для того чтобы использовать БД как пространственную БД, пригодную для хранения и обработки данных ГИС.


Теперь всё готово для загрузки пространственных данных в БД. Как было сказано выше, для примера используется набор данных Geosample. Он, помимо прочего, содержит шейп-файл (shape-file) "admin.shp" - это административно территориальное деление на территорию учебного набора Geosample. На приведённых в этой статье рисунках указана система координат EPSG:3857, а "admin.shp" по-умолчанию имеет систему координат EPSG:4326. Можно изменить систему координат "admin.shp" в любой настольной ГИС на EPSG:3857, для полной аналогии с этим примером, хотя это и не обязательно.
OpenGeo содержит инструмент импорта/экспорта шейп-файлов в БД - (кнопка Import shapefiles в Dashboard), которым следует воспользоваться, хотя подобные инструменты есть и другие, например как пагины для QGIS. В верхней части диалога инструмента Import shapefiles, содержится кнопка для указания параметров соединения с БД. Их необходимо заполнить как на Рис.4. Собственно, это уже известные параметры СУБД, параметры роли и имя базы.


Далее, на закладке "Import" есть кнопка "Add File", которая необходима для добавления шейп-файлов, а в данном случае одного - "admin.shp". После добавления шейп-файла необходимо самостоятельно указать код системы координат в колонке SRID (2). И нажать на кнопку "Import" (3).



После этого можно, через программу pgAdmin, увидеть созданную таблицу в нашей БД. Она содержится в схеме public, данная схема доступна любым ролям СУБД, это не критично для учебного примера. Таблица имеет тоже название что и исходный шейп-файл, хотя имя таблицы можно изменять в диалоге Import shapefiles в колонке "Table" Рис.5.

Довольно часто геоданные (информация имеющая координатную привязку) хранятся в виде текста или таблиц и возникает потребность преобразовать их в какой-либо векторный формат. В статье описывается последовательность действий по созданию точечного shape-файла из текста с разделителями в QGIS.

Содержание

Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, OpenOffice Calc или MS Excel), но можно работать и в любом другом текстовом редакторе, (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами Notepad++). В табличном редакторе нужно создать три основные колонки (другие поля данных также могут присутствовать):

  • идентификатор (название или номер) точки
  • широта
  • долгота

В качестве примера, приведем таблицу описаний растительности: в первой колонке - номер описания, далее - широта, долгота, высота НУМ и название растительного комплекса. Широта указывается в десятичных градусах или в метрах (если использована прямоугольная система координат). В случае, если исходные координаты представлены в виде градусов, минут и секунд, вначале их необходимо преобразовать в десятичные.

Excel-red.jpg


После того, как ваши данные приведены к указанному виду, необходимо сохранить их как текстовый файл. Рекомендуем сохранять в виде текста с разделителями табуляцией. В Excel: Файл -> Сохранить как, и во вкладке "Тип файла" выбрать "текстовые файлы (с разделителями табуляции (*.txt)".

  • Называйте колонки коротко, латинскими буквами, без пробелов и специальных символов.
  • Если колонку с широтой назвать Lat (Latitude), а с долготой - Lon (Longitude), то программа автоматически распознает, что в этих колонках находится соответственно широта и долгота, в противном случае, вам придется какая колонка показывает широту, а какая долготу вручную.
  • Проверьте, что в качестве разделителя целой и дробной части всегда используется один и тот же знак (точка или запятая).

Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" . Модуль входит в ядро QGIS и не требует отдельной установки (устанавливается вместе с QGIS), однако следует убедиться, что он включен. Для этого в QGIS зайдите во вкладку "Модули" -> "Управление модулями" и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:

Manager-dtext.jpg


Запускаем модуль с главной панели QGIS: Слой -> Добавить слой из текста с разделителями, или нажав на кнопку .

В открывшемся диалоговом окне в графе "Имя файла" выбираем созданный на предыдущем шаге текстовый файл.

  • Указываем, что это текст с разделителями (галочка "Разделители"), тип разделителя - табуляция (или другой использованный вами).
  • Обработку начинаем с 0 строки - в этом случае, в качестве заголовков колонок будут использованы заголовки созданные на первом шаге.
  • Ставим галочку против "Формат XY" в качестве X координаты выбираем колонку с долготой, в качестве Y - колонку с широтой если они не выбрались автоматически.
  • Выбираем тип разделителя целой и дробной части (Decimal point) - указываем точку или запятую.
  • Убеждаемся, что таблица имеет узнаваемый вид в нижнем окошке "Образец". Если таблица "разрушилась", убедитесь, что правильно задали разделитель или не задали ли лишний разделитель:

Dtext window.jpg


Жмем "ОК". Теперь нам необходимо указать использованную систему координат: если координаты заданы в градусах, то это географическая система координат, а в случае, если данные сняты GPS, то почти наверняка был использован эллипсоид WGS84. Это может быть иначе, но чаще всего это так.

Чтобы быстро найти в обширном списке координатных систем необходимую, набираем в графе "Filter" "WGS 84" и выбираем ее из списка Географических систем координат:

Dtext-coord.jpg


Жмем "ОК". Теперь необходимо убедиться, что точки легли туда куда нужно. В случае если точки сильно "улетели", проверьте, не перепутали ли вы местами широту и долготу на предыдущем шаге. В случае, если точки "улетели" метров на 50-100, дело может быть в неправильно заданной системе координат, необходимо выяснить параметры СК в которой снимались координаты.

Dtext verify.jpg


На завершающем шаге необходимо сохранить полученный векторный слой. Правой кнопкой мыши щелкаем по созданному слою в списке слоев и выбираем "Сохранить как".

Dtext saveas.jpg


Далее указываем тип файла (Shape-файл ESRI), каталог для сохранения, кодировку (system) и координатную систему для сохраняемого слоя. Если нужно сохранить в СК заданной на предыдущем шаге, выберите "Layer CRS" (Система координат слоя). Жмем "ОК".

Dtext-shape.jpg


Теперь загружаем созданный Shape-файл, открываем его таблицу атрибутов и убеждаемся, что все в порядке: проблемы могут возникнуть, если текстовое поле длиннее 80 символов, т.к. по умолчанию OGR драйвер задает длину строки в 80 символов. Как задать длину текстового поля, а также другие параметры полей при импорте из текстового файла см. следующий дополнительный раздел.

Усложним задачу: допустим, нам нужно импортировать таблицу содержащую текстовое поле длиннее, чем 80 символов, кроме того, нам хотелось бы более точно задать параметры будущих полей shape-файла, указав длину и точность целых и дробных чисел. Пример таблицы:

Excel-table2.jpg


Экспортируем эту таблицу в формат CSV (В Excel Файл -> Сохранить как. Тип файла выбрать "CSV (разделители - запятые, *.CSV):

Для того, чтобы задать параметры полей создадим специальный файл с таким же названием как полученный на предыдущем шаге файл *.csv и расширением *.CSVT. В этом файле через запятую, без пробелов, в кавычках нужно последовательно перечислить типы полей и их параметры для нашей таблицы:

  • Integer - целочисленные поля, в скобках указывается количество значащих символов. Т.о. если значения в поле колеблются в пределах 1-999, как для поля Num (номер описания) можно указать "Integer(3)"
  • Real - десятичная дробь, в скобках указывается общая длина, с учетом разделителя целой и дробной части, и количество знаков после запятой. Т.о. для координат, снятых бытовым GPS с навигационной точностью (6 знаков после запятой), параметры будут выглядеть так: "Real(9.6)"
  • String - текстовая строка. В скобках указывается количество символов, включая пробелы и знаки препинания). Следует помнить, что максимальная длина текстового поля shape-файла 254 знака.
  • Date - Драйвер СSV поддерживает также формат даты (в формате YYYY-MM-DD). Но, к сожалению, записать формат даты в shape-файл не представляется возможным.


Чтобы указать драйверу, какова геометрия необходимого нам слоя и из каких колонок брать координаты, необходимо создать еще один файл с расширением *.VRT (виртуальный слой).

В теле файла следует прописать:

  • name= - название файла *.VRT
  • <LayerSRS>WGS84</LayerSRS> - СК, в данном случае, географическая СК, эллипсоид WGS84.
  • <GeometryType>wkbPoint</GeometryType> - тип геометрии, в нашем случае - точечный слой.
  • <GeometryField encoding="PointFromColumns" x="Lon" y="Lat"/> - указание какие колонки *.CSV-файла содержат, соответственно, долготу и широту.

Таким образом, мы получили 3 файла, находящиеся в одной директории и имеющие одинаковое название:

  • filename.csv
  • filename.csvt
  • filename.vrt

Теперь открываем в QGIS файл VRT как векторный слой: Слой -> Добавить векторный слой. Убеждаемся, что точки легли куда нужно и проверяем параметры созданных полей: в свойствах слоя вкладка "Поля":

Dtext-attribute.jpg


Сохраняем полученный виртуальный слой как shape-файл: Слой -> Сохранить как

Новый шейп-файл можно создать через ArcCatalog или с помощью инструмента Создать класс пространственных объектов (Create Feature Class). При создании нового шейп-файла необходимо указать типы пространственных объектов, которые будут в нем содержаться, а также будут ли эти объекты представлять собой маршруты (иметь m значения) и будут ли они трехмерными (иметь z значения). После создания шейп-файла эти свойства уже не могут быть изменены. Также есть возможность определить систему координат шейп-файла. Если вы отложите задание системы координат шейп-файла, то она будет определена как Неизвестная (Unknown).

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

  1. Выберите папку или подключение папки в Дереве каталога.
  2. Щелкните меню Файл (File) , выберите Новый (New) , затем щелкните Шейп-файл (Shapefile) .
  3. Щелкните текстовое поле Имя (Name) и введите имя нового шейп-файла.
  4. Щелкните по стрелке ниспадающего списка Тип пространственных объектов (Feature Type) и выберите тип геометрии, которая будет содержаться в шейп-файле.
  5. Щелкните Редактировать (Edit) , чтобы задать систему координат шейп-файла.
  6. Выберите из списка, импортируйте или задайте новую систему координат.

Крайне рекомендуется задавать систему координат шейп-файла на этапе создания, однако, это действие можно отложить. Для получения дополнительной информации обратитесь к разделу Основные сведения о системе координат шейп-файла.

Мне сказали, на пикабу читать инструкции не любят, ведь можно просто показать, куда ткнуть. Поэтому я постараюсь уложиться в минимум слов, чтобы оставить максимум места для тыкания.

Будем разбирать на примере Швейцарии из моей карты (точнее, уже подаренной):

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Мы будем работать с shape-файлами.

Что такое shape-файлы

Это слои трех видов: точки, кривые, полигоны. В основном вы будете скачивать архив, в котором много файлов *.shp. Все они будут названы интуитивно понятно:

Waterways – реки, buildings – постройки и т.д.

Где найти shape-файлы

1. Geofabrik - собраны отдельные карты стран и городов, а также можно найти карту всего мира. Не смог на сайте найти административные границы. Возможно, потому что там собраны только физические карты.

Пример: Швейцария. Нас интересует архив *.shp.zip. Но его качать не нужно, так как слои слишком детальны.

Подходит, если вы собираетесь создавать карту области (например, ЦФО) на большом формате.

2. Openstreetmap - можно экспортировать любую выбранную область (сверху кнопка ЭКСПОРТ). Выбирается область приближением к нужному месту на карте.

Подходит, если вам нужно создать карту города, так как большую область сайт экспортировать не даст.

3. Mapzen - собраны карты крупных городов.

Подходит, если выбранная область города на сайте Openstreetmap слишком большая для экспорта, но весь ЦФО вам качать не нужно.

4. Gadm - границы стран.

Подходит для одной страны, если нужна граница одной страны.

5. Naturalearthdata - если английский слабо прокачан, смело переводите в хроме и качайте нужные слои: административные границы (всех стран), реки, здания, дороги и многое другое. Можно также найти и наложить на карту изображение гор и глубины морей и океанов. Для удобства карты поделены по уровню масштаба (10 – наиболее детальные)

Подходит для больших областей (часть света, карта всего мира).

6. Mapcruzin - карты не такие подробные, как в Openstreetmap, но подробнее, чем Naturalearthdata. Удивительно, но и здесь административных границ я не обнаружил.

Подходит для карты небольшой страны, на небольшом формате (а4).

7. Просто забивайте в поисковик “Нужная область” shape.

В чем открывать скачанные shape-файлы

Скачиваем Qgis. Не забываем про разрядность системы. Устанавливаем и запускаем ярлык:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Как работать в программе Qgis

Скачиваем с сайта Gadm границу Швейцарии:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

В программе Qgis добавляем слой к проекту:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Жмем ОБЗОР. Выбираем файл CHE_adm0.shp из распакованного архива. Жмем ОТКРЫТЬ. Вы должны получить примерно следующее (цвет может отличаться):

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Сразу обращаем внимание, что это полигон, и что вид Швейцарии не внушает доверия. Нам нужно изменить систему координат проекта. О координатах можно говорить много, но я скажу только необходимое:

1. В нашем проекте будем использовать систему Sphere Mercator.

Подходит для больших областей - весь мир или часть света. Вид будет привычен, как на интернет картах или картах на уроке географии.

2. На картах, где изображен весь мир, координаты сильно искажены. Поэтому наиболее правильно использовать координаты WGS 84. Но использовать их можно только на небольших областях (город, страна, область которой умещается в одной UTM zone).

Для небольшой области UTM zone ищите в поисковике.

Пример: для Парижа правильно использовать координаты WGS 84/ UTM zone 31N.

Примечание: чтобы понять почему только на небольших областях, загрузите границы России с системой координат для Парижа.

Меняем систему координат проекта:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Включаем галочку сверху Enable ‘on the fly’. В поиске ищем Sphere_Mercator. Выбираем. Жмем ОК. Любуемся результатом:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Добавим к проекту озера. Заходим на сайт Naturalearthdata. Скачиваем архив с озерами по верхней кнопке и дополнительные озера Европы по нижней. Добавляем к проекту файлы слоев с озерами (расширение *.shp).

Реки я хочу взять с сайта Mapcruzin. Одна Швейцария будет пусто смотреться, если скачать реки с Naturalearthdata. Нам нужны Switzerland Waterways. Добавляем к проекту файл слоя с реками (расширение *.shp).

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Замечаем, что озера – это тоже полигоны. А нам нужен векторный файл из одних линий. Идем в меню:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

И преобразуем по очереди два слоя озер (граница нам еще пригодится в качестве полигона). После преобразования слой автоматически добавится в проект, и будет назван "Линии из полигонов".

Совет: сразу переименовывайте автоматически добавленные слои после преобразований, а старые слои можно удалять из проекта.

Управление слоями расположено слева внизу:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Помимо удаления и переименования, можно перейти в свойства слоя, нажав правой кнопкой мыши по нему, и, например, изменить цвет слоя.

Теперь нужно удалить всё, что выходит за границы страны. Переходим в меню:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Исходный слой – слой, который нужно обрезать (например, реки). Слой обрезки – полигон, границы которого определят линию обрезки (полигон границы). По очереди обрезаем реки и озера, не забывая переименовывать слоя после автоматического добавления в проект и удалять ненужные слои, чтобы не путаться.

Осталось совсем немного! Преобразуем полигон границы в линию. Должно получиться нечто похожее:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Теперь необходимо пересохранить слои, чтобы создать единый слой (почему-то без пересохранения операция объединения вызывает стабильную ошибку). Правой кнопкой по слою/сохранить как.

Формат выбираем – AutoCAD DXF.

На строке File name нажимаем обзор, и выбираем место сохранения и имя файла.

И ОБЯЗАТЕЛЬНО не забываем выбрать систему координат нашего проекта - Sphere Mercator.

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

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

Осталось объединить слои. Заходим в меню:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Выбираем слои объединения, нажав многоточие в соответствующем пункте окна. Выбираем все необходимые слои. Нажимаем ОК. Нажимаем RUN. Все выскакивающие окна только уточняют систему координат. Везде нажимаем ОК. Сами знаете, что сделать со всем слоями, кроме результата объединения . Любуемся Швейцарией:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

Сохраняем слой, как сохраняли предыдущие слои в формате AutoCAD DXF. Открываем в любом редакторе, который понимает данный формат (Corel Draw, Компас).

После открытия не забываем себе сказать, что вы великолепны.

Небольшой бонус до комментариев. Ответ на вопрос, который терзал мне душу около недели:

Учимся создавать векторное изображение карт. Своими руками, Карты, Qgis, Osm, Длиннопост

На этом все! Если возникнут вопросы - спрашивайте, стараюсь отвечать на все. Всем удачи и душевного спокойствия!

Читайте также: