21. Лист ответов
21.1. Результаты для: Обзора интерфейса
21.1.1. Обзор (Часть 1)
Вернитесь к изображению, показывающему макет интерфейса, и убедитесь, что вы помните названия и функции элементов экрана.
21.1.2. Обзор (Часть 2)
Save as
Zoom to layer
Invert selection
Rendering on/off
Measure line
21.2. Результаты для: Добавления вашего первого слоя
21.2.1. Подготовка
В основной области диалога вы должны увидеть множество фигур разного цвета. Каждая фигура принадлежит к слою, который вы можете определить по цвету на левой панели (ваши цвета могут отличаться от приведенных ниже):
21.2.2. Загрузка данных
Ваша карта должна состоять из семи слоев:
protected_areas
places
rivers
roads
landuse
buildings (taken from
training_data.gpkg
) andwater (taken from
exercise_data/shapefile
).
21.3. Результаты для: Символики
21.3.1. Цвета
Убедитесь что цвета которые меняете, меняются именно так как вы ожидали.
Достаточно выбрать слой water в легенде и затем нажать на кнопку Open the Layer Styling panel. Измените цвет на один из тех цветов, который подходит под слой «вода».
Примечание
Если вы хотите работать только с одним слоем за один раз и не хотите, чтобы другие слои отвлекали вас, вы можете скрыть слой, нажав на флажок рядом с его названием в списке слоев. Если поле пустое, слой скрыт.
21.3.2. Структура Символов
Ваша карта теперь должна выглядеть так:
Если вы пользователь уровня Новичок, можете здесь остановиться.
Используйте описанный выше метод, чтобы изменить цвета и стили для всех оставшихся слоев.
Попробуйте использовать естественные цвета для объектов. Например, дорога не должна быть красной или синей, а может быть серой или черной.
Экспериментируйте свободно с различными настройками Fill style и Stroke style для полигонов.
21.3.3. Слои Символов
Настройте свой слой buildings как захотите, но помните, что на карте разные слои должны быть легко различимы.
Вот пример:
21.3.4. Уровни Символов
Для того чтобы сделать необходимый символ, вам понадобятся три уровня символов:
Самый нижний слой символов - это широкая сплошная серая линия. Сверху есть немного более тонкая сплошная желтая линия и, наконец, еще одна более тонкая сплошная черная линия.
Если ваши слои символов похожи на указанные выше, но вы не получаете желаемого результата:
Убедитесь, что уровни ваших символов выглядят примерно так:
Теперь ваша карта должна выглядеть так:
21.3.5. Уровни Символов
Настройте уровни символов на эти значения:
Поэкспериментируйте с разными значениями, чтобы получить разные результаты.
Откройте исходную карту еще раз, прежде чем продолжить следующее упражнение.
Вернуться к тексту
21.4. Контурные маркеры
Вот примеры структуры символов:
Вернуться к тексту
21.4.1. Символика генератора геометрии
Выберите хороший цвет для заливки водных полигонов.
Нажмите на Marker символов генератора геометрии и замените круг другой формой по своему желанию.
Попробуйте поэкспериментировать с другими вариантами, чтобы получить более полезные результаты.
Вернуться к тексту
21.5. Результаты для: данных векторных атрибутов
21.5.1. Изучение атрибутов векторных данных
Должно быть 9 полей в слое rivers :
Выберите слой на панели Layers .
Правым кликом выберите Open Attribute Table, или нажмите кнопку на Attributes Toolbar.
Посчитайте количество колонок.
Совет
Чтобы сделать это быстрее сделайте два клика на слой рек rivers, откройте вкладку , где вы найдете пронумерованный список полей таблицы.
Информация о городах доступна в слое мест places. Откройте его таблицу атрибутов, как вы это делали со слоем рек rivers: есть два объекта, для которых в качестве атрибута места place задан город
town
: Swellendam и Buffeljagsrivier. При желании вы можете добавить комментарий к другим полям из этих двух записей.Поле имени
name
наиболее удобно отображать в виде надписей. Это связано с тем, что все его значения уникальны для каждого объекта и вряд ли содержат значения NULL. Если ваши данные содержат некоторые значения NULL, не беспокойтесь, если большинство ваших мест имеют названияимена.
21.6. Результаты для: * надписей*
21.6.1. Настройка надписей (Часть 1)
Теперь на вашей карте должны быть точки маркеров, а надписи или метки должны сместиться на 2 мм. Стиль маркеров и надписей должен позволять четко видеть их на карте:
21.6.2. Настройка Надписей/меток (Часть 2)
Одно из возможных решений имеет этот конечный продукт:
Чтобы достичь этого результата:
Используйте размер шрифта
10
Используйте расстояние размещения вокруг точки
1.5 mm
Используйте размер маркера
3.0 mm
Дополнительно на примере ниже использовался вариант Wrap on character:
Введите пробел
space
в это поле и нажмите «Применить» Apply, чтобы добиться того же эффекта. В нашем случае некоторые названия мест очень длинные, что приводит к многострочным названиям, которые не удобны в работе. Вы может быть найдете этот параметр более подходящим для вашей карты.
21.6.3. Использование настроек, определенных данными
Still in edit mode, set the
FONT_SIZE
values to whatever you prefer. The example uses16
for towns,14
for suburbs,12
for localities, and10
for hamlets.Не забывайте сохранять изменения и выходить из режима редактирования.
Вернитесь к опции форматирования текста Text для слоя
places
и выберите размер шрифтаFONT_SIZE
в поле Attribute field размера шрифта раскрывающийся список переопределения данных:Ваши результаты, если вы используете указанные выше значения, должны быть такими:
21.7. Результаты для: Классификации
21.7.1. Уточнение Классификации
Возможно настройки будут не теми же что вы уже использовали, но со значениями Classes = 6
and Mode = Natural Breaks (Jenks) (но, конечно, с использованием тех же цветов), карта будет выглядеть так:
21.8. Результаты для: Создания Набора данных нового вектора
21.8.1. Оцифровка
Символика не имеет значения, но результат должен выглядеть примерно так:
21.8.2. Топология: Инструмент «Добавить кольцо»
Точная форма не имеет значения, но у вас должно получиться отверстие в середине вашей функции, как здесь:
Отмените редактирование, прежде чем продолжить упражнение для следующего инструмента.
21.8.3. Топология: Инструмент «Добавить деталь»
Сначала выберите Национальный парк Бонтебок Bontebok National Park:
Теперь добавьте вашу новую часть:
Отмените редактирование, прежде чем продолжить упражнение для следующего инструмента.
21.8.4. Функции Слияния
Используйте инструмент Merge Selected Features tool, но сначала убедитесь, что вы выбрали оба полигона, которые вы хотите объединить, слить.
Используйте эту функцию с OGC_FID из 1 как источник ваших атрибутов (кликните его запись в диалоговом окне, затем кликните значок Take attributes from selected feature):
Примечание
Если вы используете другой набор данных, весьма вероятно, что исходный полигон OGC_FID не будет``1``. Просто выберите функцию, у которой есть OGC_FID.
Примечание
Использование инструмента Merge Attributes of Selected Features сохранит геометрические формы, но придаст им одинаковые атрибуты.
21.8.5. Формы
Для TYPE, очевидно, что существует ограниченное количество типов дорог, если вы проверите таблицу атрибутов для этого слоя, вы увидите, что они предопределены.
Установите для виджета Карта значений Value Map Map и нажмите Загрузить данные со слоя Load Data from Layer.
Выберите дороги roads в раскрывающемся списке Label и highway шоссе для параметров Value Значение и Description Описание:
Нажмите OK OK три раза.
Если вы используете инструмент Identify для улицы, теперь, когда режим редактирования активен, диалоговое окно должно выглядеть следующим образом:
21.9. Результаты для: Векторного анализа
21.9.1. Расстояние от школ
Диалоговое окно вашего буфера должно выглядеть так:
Буфферная зона Buffer distance - 1 километр.
Значение Сегменты для аппроксимации Segments to approximate установлено на 20. Это необязательно, но рекомендуется, поскольку это делает выходные буферы более гладкими. Сравните это:
с этим:
На первом изображении буфер со значением Segments to approximate установленным на 5, а на втором значение на 20. В нашем примере разница невелика, но вы можете видеть, что края буфера сглаживаются при более высоком значении.
21.9.2. Расстояние от Ресторанов
Создайте новый слой houses_restaurants_500m, у нас здесь будет двухступенчатый процесс:
Сначала создайте буфер в 500 м вокруг ресторанов и добавьте слой на карту:
Затем извлеките здания в этой буферной зоне
Теперь ваша карта должна отображать только те здания, которые находятся в пределах 50 м от дороги, 1 км от школы и 500 м от ресторана:
21.10. Результаты для: * Сетевого анализа*
21.11. Самый быстрый путь
Откройте
и введите в диалоговое окно следующее:Убедитесь, что Path type to calculate у вас Fastest
.
Нажмите на Run Run и закройте диалог.
Теперь откройте таблицу атрибутов выходного слоя. Поле стоимости cost содержит время в пути между двумя точками (в часах):
21.12. Результаты для: Растрового анализа
21.12.1. Рассчитать аспект
Настройте диалоговое окно Aspect следующим образом:
Ваш результат:
21.12.2. Рассчитать уклон (менее 2 и 5 градусов)
Настройте диалоговое окно Raster calculator с помощью:
Следующего выражения
slope@1 <= 2
Слой откоса
slope
как Reference layer(s)
Для версии в 5 градусов замените
2
в выражении и имени файла на5
.
Ваши результаты:
2 градуса:
5 градусов:
21.13. Результаты для: Окончания анализа
21.13.1. От Растра до Вектора
Откройте Query Builder нажав правой кнопкой на слой all_terrain`на панели :guilabel:`Layers, и выберите вкладку .
Затем создайте запрос
"suitable" = 1
.Нажмите OK tдля фильтрации всех полигонов где это условие не было соблюдено.
При просмотре поверх исходного растра, местности должны полностью перекрываться.
При просмотре поверх исходного растра местности должны полностью перекрываться all_terrain на панели Layers и выбрать Save As…, затем следуйте инструкциям.
21.13.2. Проверка Результатов
Вы можете заметить, что некоторые здания на вашем слое new_solution
были «нарезаны» инструментом Intersection. Это показывает, что только часть здания - и, следовательно, только часть собственности - находится на подходящей местности. Поэтому мы можем исключить эти здания из нашего набора данных.
21.13.3. Уточнение анализа
На данный момент ваш анализ должен выглядеть примерно так:
Рассмотрим круговую площадь, которая непрерывна на 100 метров во всех направлениях.
Если ее радиус превышает 100 метров, то вычитание 100 метров из его размера (со всех сторон) приведет к тому, что часть его останется посередине.
Таким образом, вы можете запустить внутренний буфер длиной 100 метров на существующем слое вектораe suitable_terrain. На выходе буферной функции все, что осталось от исходного слоя, будет представлять те местности, где есть подходящий ландшафт на 100 метров дальше.
Чтобы продемонстрировать:
Нажмите
чтобы открыть Буферное диалоговое окно.Настройте это так:
Используйте слой suitable_terrain layer with
10
с сегментами и буферным расстоянием в-100
. Расстояние автоматически указывается в метрах, поскольку на вашей карте используется проецируемая CRS).Сохраните выходные данные в
exercise_data/residential_development/
какsuitable_terrain_continuous100m.shp
.При необходимости передвиньте новый слой выше вашего исходного слоя suitable_terrain layer.
Ваши результаты должны выглядеть примерно так:
Теперь используйте инструмент Select by Location ( ).
Настройте следующим образом:
Выберите функции в new_solution которые пересекают функции в suitable_terrain_continuous100m.shp.
И вот результат:
Выбираются желтые здания. Хотя некоторые здания частично выходят за пределы нового слоя suitable_terrain_continuous100m , они хорошо вписываются в исходный слой suitable_terrain и, следовательно, отвечают всем нашим требованиям.
Сохраните выбор в
exercise_data/residential_development/
какfinal_answer.shp
.
21.14. Результаты для: WMS
21.14.1. Добавление еще одного слоя WMS
Ваша карта должна выглядеть следующим образом (возможно, вам придется изменить порядок слоев):
21.14.2. Добавление Нового сервера WMS
Используйте тот же подход, что и раньше, чтобы добавить новый сервер и соответствующий уровень, размещенный на этом сервере:
Если вы увеличите масштаб местности Swellendam, вы заметите, что этот набор данных имеет низкое разрешение:
Поэтому лучше не использовать эти данные для текущей карты. Данные по Голубому мрамору более подходят для глобальных или национальных масштабов.
21.14.3. Поиск сервера WMS
Вы можете заметить, что многие серверы WMS не всегда доступны. Иногда это временно, иногда постоянно. Примером сервера WMS, который работал на момент написания статьи, является World Mineral Deposits WMS на http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows. Он не требует платы и не имеет ограничений для доступа, и он является глобальным. Поэтому он действительно соответствует требованиям. Однако имейте в виду, что это всего лишь пример. Есть много других серверов WMS на ваш выбор.
21.15. Результаты для: Интеграции GRASS
21.15.1. Добавление слоев в набор карт
Вы можете добавить слои (как векторные, так и растровые) в набор карт ТРАВЫGRASS, перетащив их в браузере (см. Follow Along: Load data using the QGIS Browser) или с помощью v.in.gdal.qgis
для векторных слоев и r.in.gdal.qgis
для растровых слоев.
21.15.2. Пере-классификация растрового слоя
Чтобы узнать максимальное значение растра, запустите инструмент r.info tool: в консоли и вы увидите, что максимальное значение равно 1699.
Теперь вы готовы написать правила. Откройте текстовый редактор и добавьте следующие правила:
0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3
Сохраните файл как файл my_rules.txt
и закройте текстовый редактор.
Запустите инструмент r.reclass , выберите слой g_dem и загрузите файл, который содержит правила, который вы только что сравнили.
Нажмите Run, затем View Output. Вы можете изменить цвета, и конечный результат должен выглядеть следующим образом:
21.16. Результаты для: Концепций Баз Данных
21.16.1. Свойства адресной таблицы
Для нашей теоретической таблицы адресов мы можем сохранить следующие свойства:
House Number
Street Name
Suburb Name
City Name
Postcode
Country
При создании таблицы для представления объекта адреса мы создадим столбцы для представления каждого из этих свойств и назовем их совместимыми с SQL и, возможно с сокращенными именами:
house_number
street_name
suburb
city
postcode
country
21.16.2. Нормализация таблицы «Люди»
Основная проблема с таблицей Люди заключается в том, что существует одно поле адреса, которое содержит весь адрес человека. Поразмышляв о нашей теоретической таблице адресов ранее в этом уроке, мы знаем, что адрес состоит из множества различных свойств. Храня все эти свойства в одном поле, мы значительно усложняем обновление и запрос наших данных. Поэтому нам нужно разделить поле адреса на различные свойства. Это даст нам таблицу, которая имеет следующую структуру:
id | name | house_no | street_name | city | phone_no
--+---------------+----------+----------------+------------+-----------------
1 | Tim Sutton | 3 | Buirski Plein | Swellendam | 071 123 123
2 | Horst Duester | 4 | Avenue du Roix | Geneva | 072 121 122
Примечание
В следующем разделе вы узнаете о связях Внешних ключей, которые могут быть использованы в этом примере для дальнейшего улучшения структуры нашей базы данных.
21.16.3. Дальнейшая Нормализация таблицы «Люди»
Our people table currently looks like this:
id | name | house_no | street_id | phone_no
---+--------------+----------+-----------+-------------
1 | Horst Duster | 4 | 1 | 072 121 122
Столбец street_id представляет отношение „один ко многим“ между объектом люди и связанным объектом улица, который находится в таблице улицы.
Один из способов дальнейшей нормализации таблицы - разделить поле имени на first_name (имя) и last_name (фамилия):
id | first_name | last_name | house_no | street_id | phone_no
---+------------+------------+----------+-----------+------------
1 | Horst | Duster | 4 | 1 | 072 121 122
Мы также можем создать отдельные таблицы для названия города или города и страны, связав их с нашей таблицей людей через отношения один ко многим:
id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
1 | Horst | Duster | 4 | 1 | 2 | 1
Диаграмма ER для представления этого будет выглядеть следующим образом:
21.16.4. Создание таблицы Люди
Требования SQL по созданию таблицы Люди:
create table people (id serial not null primary key,
name varchar(50),
house_no int not null,
street_id int not null,
phone_no varchar null );
Схема для таблицы (ввести / enter \d people) выглядит так:
Table "public.people"
Column | Type | Modifiers
-----------+-----------------------+-------------------------------------
id | integer | not null default
| | nextval('people_id_seq'::regclass)
name | character varying(50) |
house_no | integer | not null
street_id | integer | not null
phone_no | character varying |
Indexes:
"people_pkey" PRIMARY KEY, btree (id)
Примечание
В целях иллюстрации мы намеренно опустили ограничение fkey.
21.16.5. Команда DROP
Причина, по которой команда DROPОставить не будет работать в этом случае, заключается в том, что таблица Люди - people имеет ограничение Внешнего ключа - Foreign Key для таблицы Улицы - streets. Это означает, что оставление (или удаление) таблицы Улиц оставит таблицу Люди со ссылками на несуществующие данные улиц.
Примечание
Можно принудительно удалить таблицу улиц с помощью команды CASCADE, но это также приведет к удалению людей`и любой другой таблицы, имеющей отношение к таблице `улиц. Используйте с осторожностью!
21.16.6. Добавить новую улицу
Команда SQL, которую вы должны использовать, выглядит следующим образом (вы можете заменить название улицы на название по вашему выбору):
insert into streets (name) values ('Low Road');
21.16.7. Добавить нового человека с помощью связи Внешнего ключа
Вот правильное выражение SQL:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
Если вы снова посмотрите на таблицу улиц (используя опцию «выбрать предыдущее выражение»), вы увидите, что идентификатор id для Main Road равен 2.
Вот почему мы могли просто ввести цифру 2 выше. Несмотря на то, что мы не видим, чтобы Main Road главная дорога была полностью записана в приведенной выше записи, база данных сможет связать это с street_id со значением 2.
Примечание
Если новый объект street уже добавлен, можно обнаружить, что новая Main Road дорога имеет идентификатор 3, а не 2.
21.16.8. Вернуть названия улиц
Вот правильная инструкция SQL, которую следует использовать:
select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;
Результат:
count | name
------+-------------
1 | Low Street
2 | High street
1 | Main Road
(3 rows)
Примечание
Вы заметите, что у нас есть префиксные имена полей с именами таблиц (например, people.name и streets.name). Это необходимо делать всякий раз, когда имя поля неоднозначно (т.е. не уникально для всех таблиц в базе данных).
21.17. Результаты для: Пространственных запросов
21.17.1. Единицы, используемые при пространственных запросах
Единицы измерения, используемые в примере запроса - это градусы, потому что ССК, которую использует слой - это WGS 84. Это географическая ССК, что означает, что его единицы измерения выражены в градусах. Прогнозируемый ССК, как и проекции отслеживающего модуля UTM, выражается в метрах.
Помните, что когда вы пишете запрос, вам нужно знать, в каких единицах находится ССК слоя. Это позволит вам написать запрос, который вернет ожидаемые вами результаты.
21.17.2. Создание пространственного индекса
CREATE INDEX cities_geo_idx
ON cities
USING gist (the_geom);
21.18. Результаты для: Построения геометрии
21.18.1. Создание линейных строк (Linestrings)
alter table streets add column the_geom geometry;
alter table streets add constraint streets_geom_point_chk check
(st_geometrytype(the_geom) = 'ST_LineString'::text OR the_geom IS NULL);
insert into geometry_columns values ('','public','streets','the_geom',2,4326,
'LINESTRING');
create index streets_geo_idx
on streets
using gist
(the_geom);
21.18.2. Связывание таблиц
delete from people;
alter table people add column city_id int not null references cities(id);
(записьсъемка городов в QGIS)
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Faulty Towers',
34,
3,
'072 812 31 28',
1,
'SRID=4326;POINT(33 33)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('IP Knightly',
32,
1,
'071 812 31 28',
1,F
'SRID=4326;POINT(32 -34)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Rusty Bedsprings',
39,
1,
'071 822 31 28',
1,
'SRID=4326;POINT(34 -34)');
Если вы получаете следующее сообщение об ошибке:
ERROR: insert or update on table "people" violates foreign key constraint
"people_city_id_fkey"
DETAIL: Key (city_id)=(1) is not present in table "cities".
тогда это означает, что, экспериментируя с созданием полигонов для таблицы городов, вы, должно быть, удалили некоторые из них и начали заново. Просто проверьте записи в таблице городов и используйте любой существующий идентификатор id.
21.19. Результаты для Модели простых элементов
21.19.1. Заполнение таблиц
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
21.19.2. Заполните таблицу Геометрия колонок (Geometry_Columns)
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
21.19.3. Добавление геометрии
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Результат:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Как видите, наше ограничение позволяет добавлять нули в базу данных.