21. Лист ответов

21.1. Результаты для: Обзора интерфейса

21.1.1. Основное Обзор (Часть 1)

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

Вернуться к тексту

21.1.2. Основное Обзор (Часть 2)

  1. Save as

  2. Zoom to layer

  3. Invert selection

  4. Rendering on/off

  5. Measure line

Вернуться к тексту

21.2. Результаты для: Добавления вашего первого слоя

21.2.1. Основное Подготовка

В основной области диалога вы должны увидеть множество фигур разного цвета. Каждая фигура принадлежит к слою, который вы можете определить по цвету на левой панели (ваши цвета могут отличаться от приведенных ниже):

../../../_images/basic_map.png

Вернуться к тексту

21.2.2. Основное Загрузка данных

Ваша карта должна состоять из семи слоев:

  • protected_areas

  • places

  • rivers

  • roads

  • landuse

  • buildings (taken from training_data.gpkg) and

  • water (taken from exercise_data/shapefile).

Вернуться к тексту

21.3. Результаты для: Символики

21.3.1. Основное Цвета

  • Убедитесь что цвета которые меняете, меняются именно так как вы ожидали.

  • Достаточно выбрать слой water в легенде и затем нажать на кнопку Примечание Open the Layer Styling panel. Измените цвет на один из тех цветов, который подходит под слой «вода».

../../../_images/answer_water_blue.png

Примечание

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

Вернуться к тексту

21.3.2. Основное Структура Символов

Ваша карта теперь должна выглядеть так:

../../../_images/answer_symbology1.png

Если вы пользователь уровня Новичок, можете здесь остановиться.

  • Используйте описанный выше метод, чтобы изменить цвета и стили для всех оставшихся слоев.

  • Попробуйте использовать естественные цвета для объектов. Например, дорога не должна быть красной или синей, а может быть серой или черной.

  • Экспериментируйте свободно с различными настройками Fill style и Stroke style для полигонов.

../../../_images/answer_symbology2.png

Вернуться к тексту

21.3.3. moderate Слои Символов

Настройте свой слой buildings как захотите, но помните, что на карте разные слои должны быть легко различимы.

Вот пример:

../../../_images/answer_buildings_symbology.png

Вернуться к тексту

21.3.4. moderate Уровни Символов

Для того чтобы сделать необходимый символ, вам понадобятся три уровня символов:

../../../_images/answer_road_symbology.png

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

Если ваши слои символов похожи на указанные выше, но вы не получаете желаемого результата:

  1. Убедитесь, что уровни ваших символов выглядят примерно так:

    ../../../_images/answer_road_symbol_levels.png
  2. Теперь ваша карта должна выглядеть так:

    ../../../_images/target_road_symbology.png

Вернуться к тексту

21.3.5. Уровни Символов

  1. Настройте уровни символов на эти значения:

    ../../../_images/answer_road_symbol_layers.png
  2. Поэкспериментируйте с разными значениями, чтобы получить разные результаты.

  3. Откройте исходную карту еще раз, прежде чем продолжить следующее упражнение.

Вернуться к тексту

21.4. Контурные маркеры

Вот примеры структуры символов:

../../../_images/answer_marker_line.png
../../../_images/answer_marker_line2.png

Вернуться к тексту

21.4.1. Символика генератора геометрии

  • Нажмите на кнопку signPlus чтобы добавить еще один уровень Символов.

  • Переместите новый символ в конец списка, нажав кнопку arrowDown.

  • Выберите хороший цвет для заливки водных полигонов.

  • Нажмите на Marker символов генератора геометрии и замените круг другой формой по своему желанию.

  • Попробуйте поэкспериментировать с другими вариантами, чтобы получить более полезные результаты.

Вернуться к тексту

21.5. Результаты для: данных векторных атрибутов

21.5.1. Основное Изучение атрибутов векторных данных

  • Должно быть 9 полей в слое rivers :

    1. Выберите слой на панели Layers .

    2. Правым кликом выберите Open Attribute Table, или нажмите кнопку openTable на Attributes Toolbar.

    3. Посчитайте количество колонок.

    Совет

    Чтобы сделать это быстрее сделайте два клика на слой рек rivers, откройте вкладку Layer properties ► Fields , где вы найдете пронумерованный список полей таблицы.

  • Информация о городах доступна в слое мест places. Откройте его таблицу атрибутов, как вы это делали со слоем рек rivers: есть два объекта, для которых в качестве атрибута места place задан город town: Swellendam и Buffeljagsrivier. При желании вы можете добавить комментарий к другим полям из этих двух записей.

  • Поле имени name наиболее удобно отображать в виде надписей. Это связано с тем, что все его значения уникальны для каждого объекта и вряд ли содержат значения NULL. Если ваши данные содержат некоторые значения NULL, не беспокойтесь, если большинство ваших мест имеют названияимена.

Вернуться к тексту

21.6. Результаты для: * надписей*

21.6.1. moderate Настройка надписей (Часть 1)

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

../../../_images/customised_labels_one.png

Вернуться к тексту

21.6.2. moderate Настройка Надписей/меток (Часть 2)

Одно из возможных решений имеет этот конечный продукт:

../../../_images/possible_outcome_map.png

Чтобы достичь этого результата:

  • Используйте размер шрифта 10

  • Используйте расстояние размещения вокруг точки 1.5 mm

  • Используйте размер маркера 3.0 mm

  • Дополнительно на примере ниже использовался вариант Wrap on character:

    ../../../_images/wrap_character_settings.png
  • Введите пробел space в это поле и нажмите «Применить» Apply, чтобы добиться того же эффекта. В нашем случае некоторые названия мест очень длинные, что приводит к многострочным названиям, которые не удобны в работе. Вы может быть найдете этот параметр более подходящим для вашей карты.

Вернуться к тексту

21.6.3. hard Использование настроек, определенных данными

  1. Still in edit mode, set the FONT_SIZE values to whatever you prefer. The example uses 16 for towns, 14 for suburbs, 12 for localities, and 10 for hamlets.

  2. Не забывайте сохранять изменения и выходить из режима редактирования.

  3. Вернитесь к опции форматирования текста Text для слоя places и выберите размер шрифта FONT_SIZE в поле Attribute field размера шрифта dataDefined раскрывающийся список переопределения данных:

    ../../../_images/font_size_override.png

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

    ../../../_images/font_override_results.png

Вернуться к тексту

21.7. Результаты для: Классификации

21.7.1. moderate Уточнение Классификации

Возможно настройки будут не теми же что вы уже использовали, но со значениями Classes = 6 and Mode = Natural Breaks (Jenks) (но, конечно, с использованием тех же цветов), карта будет выглядеть так:

../../../_images/gradient_map_new_mode.png

Вернуться к тексту

21.8. Результаты для: Создания Набора данных нового вектора

21.8.1. Основное Оцифровка

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

../../../_images/routes_layer_result.png

Вернуться к тексту

21.8.2. moderate Топология: Инструмент «Добавить кольцо»

Точная форма не имеет значения, но у вас должно получиться отверстие в середине вашей функции, как здесь:

../../../_images/ring_tool_result.png
  • Отмените редактирование, прежде чем продолжить упражнение для следующего инструмента.

Вернуться к тексту

21.8.3. moderate Топология: Инструмент «Добавить деталь»

  • Сначала выберите Национальный парк Бонтебок Bontebok National Park:

../../../_images/park_selected.png
  • Теперь добавьте вашу новую часть:

../../../_images/new_park_area.png
  • Отмените редактирование, прежде чем продолжить упражнение для следующего инструмента.

Вернуться к тексту

21.8.4. hard Функции Слияния

  • Используйте инструмент Merge Selected Features tool, но сначала убедитесь, что вы выбрали оба полигона, которые вы хотите объединить, слить.

  • Используйте эту функцию с OGC_FID из 1 как источник ваших атрибутов (кликните его запись в диалоговом окне, затем кликните значок Take attributes from selected feature):

Примечание

Если вы используете другой набор данных, весьма вероятно, что исходный полигон OGC_FID не будет``1``. Просто выберите функцию, у которой есть OGC_FID.

../../../_images/merge_feature_dialog.png

Примечание

Использование инструмента Merge Attributes of Selected Features сохранит геометрические формы, но придаст им одинаковые атрибуты.

Вернуться к тексту

21.8.5. moderate Формы

Для TYPE, очевидно, что существует ограниченное количество типов дорог, если вы проверите таблицу атрибутов для этого слоя, вы увидите, что они предопределены.

  • Установите для виджета Карта значений Value Map Map  и нажмите Загрузить данные со слоя Load Data from Layer.

  • Выберите дороги roads в раскрывающемся списке Label и highway шоссе для параметров Value Значение и Description Описание:

    ../../../_images/value_map_settings.png
  • Нажмите OK OK три раза.

  • Если вы используете инструмент Identify для улицы, теперь, когда режим редактирования активен, диалоговое окно должно выглядеть следующим образом:

    ../../../_images/highway_as_value_map.png

Вернуться к тексту

21.9. Результаты для: Векторного анализа

21.9.1. Основное Расстояние от школ

  • Диалоговое окно вашего буфера должно выглядеть так:

    ../../../_images/schools_buffer_setup.png

    Буфферная зона Buffer distance - 1 километр.

  • Значение Сегменты для аппроксимации Segments to approximate установлено на 20. Это необязательно, но рекомендуется, поскольку это делает выходные буферы более гладкими. Сравните это:

    ../../../_images/schools_buffer_5.png

    с этим:

    ../../../_images/schools_buffer_6.png

На первом изображении буфер со значением Segments to approximate установленным на 5, а на втором значение на 20. В нашем примере разница невелика, но вы можете видеть, что края буфера сглаживаются при более высоком значении.

Вернуться к тексту

21.9.2. Основное Расстояние от Ресторанов

Создайте новый слой houses_restaurants_500m, у нас здесь будет двухступенчатый процесс:

  • Сначала создайте буфер в 500 м вокруг ресторанов и добавьте слой на карту:

    ../../../_images/restaurants_buffer.png
    ../../../_images/restaurants_buffer_result.png
  • Затем извлеките здания в этой буферной зоне

    ../../../_images/select_within_restaurants.png

Теперь ваша карта должна отображать только те здания, которые находятся в пределах 50 м от дороги, 1 км от школы и 500 м от ресторана:

../../../_images/restaurant_buffer_result.png

Вернуться к тексту

21.10. Результаты для: * Сетевого анализа*

21.11. moderate Самый быстрый путь

Откройте Network Analysis ► Shortest Path (Point to Point) и введите в диалоговое окно следующее:

../../../_images/fastest_path_result.png

Убедитесь, что Path type to calculate у вас Fastest.

Нажмите на Run Run и закройте диалог.

Теперь откройте таблицу атрибутов выходного слоя. Поле стоимости cost содержит время в пути между двумя точками (в часах):

../../../_images/fastest_path_attribute.png

Вернуться к тексту

21.12. Результаты для: Растрового анализа

21.12.1. Основное Рассчитать аспект

  • Настройте диалоговое окно Aspect следующим образом:

    ../../../_images/answer_dem_aspect.png

Ваш результат:

../../../_images/answer_aspect_result.png

Вернуться к тексту

21.12.2. moderate Рассчитать уклон (менее 2 и 5 градусов)

  • Настройте диалоговое окно Raster calculator с помощью:

    • Следующего выражения slope@1 <= 2

    • Слой откоса slope как Reference layer(s)

    ../../../_images/answer_raster_calculator_slope.png
  • Для версии в  5 градусов замените 2 в выражении и имени файла на 5.

Ваши результаты:

  • 2 градуса:

    ../../../_images/answer_2degree_result.png
  • 5 градусов:

    ../../../_images/answer_5degree_result.png

Вернуться к тексту

21.13. Результаты для: Окончания анализа

21.13.1. moderate От Растра до Вектора

  1. Откройте Query Builder нажав правой кнопкой на слой all_terrain`на панели :guilabel:`Layers, и выберите вкладку Properties ► Source.

  2. Затем создайте запрос "suitable" = 1.

  3. Нажмите  OK tдля фильтрации всех полигонов где это условие не было соблюдено.

    При просмотре поверх исходного растра, местности должны полностью перекрываться.

    ../../../_images/polygonize_raster.png
  4. При просмотре поверх исходного растра местности должны полностью перекрываться all_terrain на панели Layers и выбрать Save As…, затем следуйте инструкциям.

Вернуться к тексту

21.13.2. moderate Проверка Результатов

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

Вернуться к тексту

21.13.3. moderate Уточнение анализа

На данный момент ваш анализ должен выглядеть примерно так:

../../../_images/new_solution_example.png

Рассмотрим круговую площадь, которая непрерывна на 100 метров во всех направлениях.

../../../_images/circle_100.png

Если ее радиус превышает 100 метров, то вычитание 100 метров из его размера (со всех сторон) приведет к тому, что часть его останется посередине.

../../../_images/circle_with_remainder.png

Таким образом, вы можете запустить внутренний буфер длиной 100 метров на существующем слое вектораe suitable_terrain.  На выходе буферной функции все, что осталось от исходного слоя, будет представлять те местности, где есть подходящий ландшафт на 100 метров дальше.

Чтобы продемонстрировать:

  1. Нажмите  Vector ► Geoprocessing Tools ► Buffer(s) чтобы открыть Буферное диалоговое окно.

  2. Настройте это так:

    ../../../_images/suitable_terrain_buffer.png
  3. Используйте слой suitable_terrain layer with 10 с сегментами и буферным расстоянием в -100. Расстояние автоматически указывается в метрах, поскольку на вашей карте используется проецируемая CRS).

  4. Сохраните выходные данные в exercise_data/residential_development/ как suitable_terrain_continuous100m.shp.

  5. При необходимости передвиньте новый слой выше вашего исходного слоя suitable_terrain layer.

    Ваши результаты должны выглядеть примерно так:

    ../../../_images/suitable_buffer_results.png
  6. Теперь используйте инструмент Select by Location (Vector ► Research Tools ► Select by location).

  7. Настройте следующим образом:

    ../../../_images/select_by_location.png
  8. Выберите функции в  new_solution которые пересекают функции в suitable_terrain_continuous100m.shp.

    И вот результат:

    ../../../_images/buffer_select_result.png

    Выбираются желтые здания. Хотя некоторые здания частично выходят за пределы нового слоя suitable_terrain_continuous100m , они хорошо вписываются в исходный слой suitable_terrain и, следовательно, отвечают всем нашим требованиям.

  9. Сохраните выбор в  exercise_data/residential_development/ как final_answer.shp.

Вернуться к тексту

21.14. Результаты для: WMS

21.14.1. Основное Добавление еще одного слоя WMS

Ваша карта должна выглядеть следующим образом (возможно, вам придется изменить порядок слоев):

../../../_images/geology_layer_result.png

Вернуться к тексту

21.14.2. moderate Добавление Нового сервера WMS

  • Используйте тот же подход, что и раньше, чтобы добавить новый сервер и соответствующий уровень, размещенный на этом сервере:

    ../../../_images/add_ogc_server.png
    ../../../_images/add_bluemarble_layer.png
  • Если вы увеличите масштаб местности Swellendam, вы заметите, что этот набор данных имеет низкое разрешение:

../../../_images/low_resolution_dataset.png

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

Вернуться к тексту

21.14.3. moderate Поиск сервера 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. moderate Пере-классификация растрового слоя

Чтобы узнать максимальное значение растра, запустите инструмент 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. Вы можете изменить цвета, и конечный результат должен выглядеть следующим образом:

../../../_images/grass_reclass.png

Вернуться к тексту

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. moderate Дальнейшая Нормализация таблицы «Люди»

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 для представления этого будет выглядеть следующим образом:

../../../_images/er-people-normalised-example.png

Вернуться к тексту

21.16.4. moderate Создание таблицы Люди

Требования 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. moderate Добавить нового человека с помощью связи Внешнего ключа

Вот правильное выражение 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. moderate Вернуть названия улиц

Вот правильная инструкция 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. moderate Создание линейных строк (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. moderate Связывание таблиц

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. moderate Заполнение таблиц

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. moderate Заполните таблицу Геометрия колонок (Geometry_Columns)

insert into geometry_columns values
      ('','public','cities','the_geom',2,4326,'POLYGON');

Вернуться к тексту

21.19.3. hard Добавление геометрии

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)

Как видите, наше ограничение позволяет добавлять нули в базу данных.

Вернуться к тексту