21. 答题纸¶

Docs in progress for 'QGIS testing'. Visit https://docs.qgis.org/3.4 for QGIS 3.4 docs and translations.

21.1. Results For Adding Your First Layer

21.1.1. basic Preparation

在对话框的主区域中,您应该可以看到许多不同颜色的形状。每个形状都属于一个层,您可以在左侧面板中通过其颜色进行标识(您的颜色可能与下面的颜色不同):

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

Back to text

21.2. Results For An Overview of the Interface

21.2.1. basic Overview (Part 1)

请参阅显示界面布局的图像,并检查您是否记住屏幕元素的名称和功能。

Back to text

21.2.2. basic Overview (Part 2)

  1. Save as
  2. Zoom to layer
  3. Help
  4. Rendering on/off
  5. Measure line

Back to text

21.3. Results For Working with Vector Data

21.3.1. basic Attribute data

  • 应该有9个字段 rivers 层:

    1. 在中选择层 Layers 面板。
    2. 右键单击并选择 Open Attribute Table 或按 openTable 按钮上 Attributes Toolbar .
    3. 计算列数。

    小技巧

    一个更快的方法是双击 rivers 层,打开 Layer properties ‣ Source Fields 选项卡,从中可以找到表字段的编号列表。

  • 有关城镇的信息可在 places 层。打开其属性表,就像使用 rivers 层:有两个功能 place 属性设置为 townSwellendam 和 BuffelJagsrivier公司. 如果愿意,您可以在这两个记录的其他字段上添加注释。

Back to text

21.3.2. basic Data loading

你的地图应该有七层:

  • protected_areas
  • places
  • rivers
  • roads
  • landuse
  • buildings (taken from training_data.gpkg) and
  • water (taken from exercise_data/shapefile).

Back to text

21.4. Results For Symbology

21.4.1. basic Colors

  • 验证颜色是否按预期变化。
  • 足够选择 water 在图例中分层,然后单击 symbology Open the Layer Styling panel 按钮。将颜色更改为适合水层的颜色。
../../../_images/answer_water_blue.png

注解

如果您希望一次只处理一个层,而不希望其他层分散您的注意力,可以通过单击层列表中其名称旁边的复选框来隐藏层。如果该框为空,则该层被隐藏。

Back to text

21.4.2. basic Symbol Structure

您的地图现在应该如下所示:

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

如果你是一个初学者,你可以在这里停留。

  • 使用上面的方法更改所有剩余层的颜色和样式。
  • 尝试为对象使用自然色。例如,道路不应该是红色或蓝色,但可以是灰色或黑色。
  • 也可以随意尝试不同的 Fill styleStroke style 多边形的设置。
../../../_images/answer_symbology2.png

Back to text

21.4.3. moderate Symbol Layers

定制你的 buildings 按你喜欢的分层,但要记住,在地图上区分不同的层必须很容易。

下面是一个例子:

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

Back to text

21.4.4. moderate Symbol Levels

要制作所需的符号,需要三个符号层:

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

最低的符号层是一条宽而实的灰色线。在它上面有一条稍细的实心黄线,最后是另一条稍细的实心黑线。

如果符号层与上面类似,但没有得到所需的结果:

  1. 检查您的符号级别是否如下所示:

    ../../../_images/answer_road_symbol_levels.png
  2. 现在,您的地图应该如下所示:

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

Back to text

21.4.5. hard Symbol Levels

  1. 将符号级别调整为以下值:

    ../../../_images/answer_road_symbol_layers.png
  2. 用不同的值进行实验,得到不同的结果。

  3. 在继续下一个练习之前,请再次打开原始地图。

Back to text

21.5. moderate Outline Markers

以下是符号结构的示例:

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

Back to text

21.5.1. hard Geometry generator symbology

  • 点击 signPlus 按钮添加另一个符号级别。
  • 移动列表底部的新符号,单击 arrowDown 按钮。
  • 选择一个好的颜色来填充水多边形。
  • 点击 Marker 几何生成器的符号,并根据您的意愿用另一个形状更改圆。
  • 尝试尝试其他选项以获得更有用的结果。

Back to text

21.6. Results For Attribute Data

21.6.1. basic Attribute Data

这个 name 字段是显示为标签最有用的字段。这是因为它的所有值对于每个对象都是唯一的,并且不太可能包含 NULL 价值观。如果您的数据包含 NULL 价值观,只要你的大部分地方都有名字就不用担心。

Back to text

21.7. Results For The Label Tool

21.7.1. moderate Label Customization (Part 1)

现在,地图应显示标记点,标签应偏移 2.0 mm :标记和标签的样式应允许在地图上清晰可见:

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

Back to text

21.7.2. moderate Label Customization (Part 2)

一种可能的解决方案是最终产品:

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

要得到这个结果:

  • 使用的字体大小为 10 ,A Label distance 属于 1,5 mmSymbol widthSymbol size 属于 3.0 mm .

  • 此外,此示例使用 Wrap label on character 选项:

    ../../../_images/wrap_character_settings.png
  • 输入一个 space 在此字段中单击 Apply 达到同样的效果。在我们的例子中,一些地名非常长,导致名称带有多行,这对用户不太友好。您可能会发现此设置更适合您的地图。

Back to text

21.7.3. hard Using Data Defined Settings

  • 仍处于编辑模式,设置 FONT_SIZE 价值观。示例使用 16 城镇, 14 郊区, 12 对于地方和 10 为了哈姆雷特。

  • 记住保存更改并退出编辑模式。

  • 返回到 Text 的格式选项 places 图层和选择 FONT_SIZEAttribute field 字体大小数据覆盖下拉列表:

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

    如果使用上述值,您的结果应该是:

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

Back to text

21.8. Results For Classification

21.8.1. moderate Refine the Classification

  • 使用与本课第一个练习中相同的方法清除边界:

    ../../../_images/gradient_map_no_pen.png

您使用的设置可能不相同,但具有值 Classes = 6Mode = Natural Breaks (Jenks) (当然,使用相同的颜色),地图将如下所示:

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

Back to text

21.9. Results For Creating a New Vector Dataset

21.9.1. basic Digitizing

符号学并不重要,但结果应该大致如下:

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

Back to text

21.9.2. moderate Topology: Add Ring Tool

准确的形状并不重要,但是你应该在你的特征的中间有一个洞,就像这个:

../../../_images/ring_tool_result.png
  • 在继续下一个工具的练习之前,请撤消编辑。

Back to text

21.9.3. moderate Topology: Add Part Tool

  • 首先选择 Bontebok National Park :
../../../_images/park_selected.png
  • 现在添加新零件:
../../../_images/new_park_area.png
  • 在继续下一个工具的练习之前,请撤消编辑。

Back to text

21.9.4. hard Merge Features

  • 使用 Merge Selected Features 工具,确保首先选择要合并的两个多边形。
  • 将此功能与 OGC_FID 属于 1 作为属性的源(单击对话框中的条目,然后单击 Take attributes from selected feature 按钮:

注解

如果您使用的是不同的数据集,则很可能
原始多边形 OGC_FID 不会 1 . 只需选择具有 OGC_FID .
../../../_images/merge_feature_dialog.png

注解

使用 Merge Attributes of Selected Features 工具将保持几何图形的不同,但赋予它们相同的属性。

Back to text

21.9.5. moderate Forms

对于 TYPE ,显然,道路的类型数量是有限的,如果检查此层的属性表,您将看到它们是预定义的。

  • 将小部件设置为 Value Map 然后点击 Load Data from Layer .

  • 选择 roadsLabel 下拉和 highway 对于两者 ValueDescription 选项:

    ../../../_images/value_map_settings.png
  • 点击 Ok 三次。

  • 如果您使用 Identify 当编辑模式处于活动状态时,街道上的工具,您得到的对话框应该如下所示:

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

Back to text

21.10. Results For Vector Analysis

21.10.1. basic Distance from High Schools

  • 缓冲区对话框应如下所示:

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

    这个 Buffer distance1 公里。

  • 这个 Segments to approximate 值设置为 20 . 这是可选的,但建议这样做,因为这样可以使输出缓冲区看起来更平滑。比较一下:

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

    对此:

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

第一个图像显示的缓冲区 Segments to approximate 值设置为 5 第二个显示的值设置为 20 . 在我们的示例中,差异很小,但是您可以看到缓冲区的边缘随着值的增大而变得更平滑。

Back to text

21.10.2. basic Distance from Restaurants

创建新的 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

Back to text

21.11. Results For Network Analysis

21.12. moderate Fastest path

正常开放 Network Analysis ‣ Shortest Path (Point to Point) 并将对话框填充为:

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

确保 Path type to calculateFastest .

点击 Run 然后关闭对话框。

现在打开输出层的属性表。这个 cost 字段包含两点之间的行程时间(以小时为单位):

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

Back to text

21.13. Results For Raster Analysis

21.13.1. basic Calculate Aspect

  • 设置你的 Aspect 像这样对话:

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

你的结果是:

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

Back to text

21.13.2. moderate Calculate Slope (less than 2 and 5 degrees)

  • 设置你的 Raster calculator 像这样对话:

    ../../../_images/answer_raster_calculator_slope.png
  • 对于5度版本,更换 2 在表达式和文件名中 5 .

你的结果:

  • 2度:

    ../../../_images/answer_2degree_result.png
  • 5度:

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

Back to text

21.14. Results For Completing the Analysis

21.14.1. moderate Raster to Vector

  • 打开 Query Builder 右键单击 all_terrain 层中 Layers 面板,然后选择 Properties ‣ Source 标签。
  • 然后构建查询 "suitable" = 1 .
  • 点击 OK 过滤掉所有不满足这个条件的多边形。

在原始栅格上查看时,区域应完全重叠:

../../../_images/polygonize_raster.png
  • 您可以通过右键单击 all_terrain 层中 Layers 面板和选择 Save As... ,然后按照说明继续。

Back to text

21.14.2. moderate Inspecting the Results

你可能会注意到 new_solution 层被 Intersect 工具。这表明,建筑的一部分——因此只有部分财产——位于合适的地形上。因此,我们可以明智地从数据集中删除这些建筑

Back to text

21.14.3. moderate Refining the Analysis

目前,您的分析应该如下所示:

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

考虑一个圆形区域,在各个方向上连续100米。

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

如果半径大于100米,那么从它的尺寸减去100米(从所有方向)将导致它的一部分留在中间。

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

因此,您可以运行 interior buffer 你现有的100米 suitable_terrain 矢量层。在缓冲功能的输出中,原始层的剩余部分将表示100米以外有合适地形的区域。

证明:

  • Vector ‣ Geoprocessing Tools ‣ Buffer(s) 打开缓冲区对话框。

  • 设置如下:

    ../../../_images/suitable_terrain_buffer.png
  • 使用 suitable_terrain 层带 10 段和缓冲距离 -100 . (距离自动以米为单位,因为您的地图使用投影的CRS。)

  • 将输出保存在 exercise_data/residential_development/ 作为 suitable_terrain_continuous100m.shp .

  • 如有必要,将新层移动到原始层之上 suitable_terrain 层。

您的结果如下所示:

../../../_images/suitable_buffer_results.png
  • 现在使用 Select by Location 工具(工具) Vector ‣ Research Tools ‣ Select by location

  • 设置如下:

    ../../../_images/select_by_location.png
  • 在中选择功能 new_solution 与中的特征相交 suitable_terrain_continuous100m.shp .

结果是:

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

选择黄色建筑。尽管有些建筑部分落在新建筑外面 suitable_terrain_continuous100m 层,它们很好地位于原始 suitable_terrain 层,因此满足我们的所有要求。

  • 将所选内容保存在 exercise_data/residential_development/ 作为 final_answer.shp .

Back to text

21.15. Results For WMS

21.15.1. basic Adding Another WMS Layer

您的地图应该如下所示(您可能需要重新排序图层):

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

Back to text

21.15.2. moderate Adding a New WMS Server

  • 使用与之前相同的方法添加新服务器和托管在该服务器上的相应层:

    ../../../_images/add_ogc_server.png ../../../_images/add_bluemarble_layer.png
  • 如果你放大 Swellendam 区域,您会注意到此数据集的分辨率较低:

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

因此,最好不要将此数据用于当前地图。蓝色大理石数据更适合全球或国家范围。

Back to text

21.15.3. moderate Finding a WMS Server

您可能会注意到许多WMS服务器并不总是可用的。有时这是暂时的,有时是永久的。在编写时工作的WMS服务器的一个示例是 World Mineral Deposits WMS网址:http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ws。它不需要费用或访问限制,而且是全球性的。因此,它确实满足了要求。不过,请记住,这只是一个例子。还有许多其他的WMS服务器可供选择。

Back to text

21.16. Results For GRASS Integration

21.16.1. basic Add Layers to Mapset

通过在浏览器中拖放图层(请参见),可以将图层(矢量和栅格)添加到草地地图集中。 Follow Along: Load data using the QGIS Browser )或者使用 v.in.gdal.qgis 向量和 r.in.gdal.qgis 用于栅格图层。

Back to text

21.16.2. moderate Reclassify raster layer

要发现栅格的最大值,请运行 r.info 工具:在控制台中,您将看到最大值为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

Back to text

21.17. Results For Database Concepts

21.17.1. basic Address Table Properties

对于我们的理论地址表,我们可能需要存储以下属性:

House Number
Street Name
Suburb Name
City Name
Postcode
Country

在创建表以表示地址对象时,我们将创建列来表示这些属性中的每一个,并将它们命名为与SQL兼容的、可能是缩写的名称:

house_number
street_name
suburb
city
postcode
country

Back to text

21.17.2. basic Normalising the People Table

主要问题是 people 表中有一个地址字段,其中包含一个人的整个地址。思考我们的理论 address 在本课前面的表中,我们知道地址由许多不同的属性组成。通过将所有这些属性存储在一个字段中,我们使得更新和查询数据变得更加困难。因此,我们需要将地址字段拆分为各种属性。这将为我们提供一个具有以下结构的表:

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

注解

在下一节中,您将了解外键关系,该关系可在本示例中用于进一步改进数据库的结构。

Back to text

21.17.3. moderate Further Normalisation of the People Table

我们的 people 表当前如下所示:

id |     name     | house_no | street_id |  phone_no
---+--------------+----------+-----------+-------------
 1 | Horst Duster |        4 |         1 | 072 121 122

这个 street_id 列表示 people 对象和相关 street 对象,位于 streets

进一步使表正常化的一种方法是将名称字段拆分为 first_name 和 last_name: :

id | first_name | last_name  | house_no | street_id |  phone_no
---+------------+------------+----------+-----------+------------
 1 |    Horst   |   Duster   |     4    |     1     | 072 121 122

我们还可以为城镇或城市名称和国家创建单独的表,将它们与我们的 people 通过“一对多”关系的表:

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

Back to text

21.17.4. moderate Create a People Table

创建正确的人员表所需的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 );

表的架构(输入 \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约束。

Back to text

21.17.5. basic The DROP Command

在这种情况下,drop命令不起作用的原因是 people 表对具有外键约束 streets 表。这意味着删除 streets 桌子会离开 people 引用不存在的表 streets 数据。

注解

可以“强制”的 streets 要删除的表,请使用 CASCADE 命令,但这也会删除 people 以及任何其他与 streets 表。小心使用!

Back to text

21.17.6. basic Insert a New Street

您应该使用的SQL命令如下(您可以用您选择的名称替换街道名称)::

insert into streets (name) values ('Low Road');

Back to text

21.17.7. moderate Add a New Person With Foreign Key Relationship

下面是正确的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');

如果您再次查看streets表(使用前面的select语句),您将看到 id 对于 Main Road 条目是 2 .

这就是为什么我们只能输入数字的原因 2 上面。即使我们没有看到 Main Road 完全写在上面的条目中,数据库将能够将其与 street_id 价值 2 .

注解

如果您已经添加了新的 street 对象,您可能会发现 Main Road 有身份证 32 .

Back to text

21.17.8. moderate Return Street Names

下面是您应该使用的正确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)。只要字段名不明确(即数据库中的所有表都不是唯一的),就需要执行此操作。

Back to text

21.18. Results For Spatial Queries

21.18.1. basic The Units Used in Spatial Queries

示例查询使用的单位是度,因为层使用的CRS是wgs 84。这是一个地理CRS,也就是说它的单位是度。与UTM投影一样,投影的CRS以米为单位。

记住,编写查询时,需要知道层的CRS在哪个单元中。这将允许您编写一个返回预期结果的查询。

Back to text

21.18.2. basic Creating a Spatial Index

CREATE INDEX cities_geo_idx
  ON cities
  USING gist (the_geom);

Back to text

21.19. Results For Geometry Construction

21.19.1. moderate Creating 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);

Back to text

21.19.2. moderate Linking Tables

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 它存在。

Back to text

21.20. Results For Simple Feature Model

21.20.1. moderate Populating Tables

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 );

Back to text

21.20.2. moderate Populate the Geometry_Columns Table

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

Back to text

21.20.3. hard Adding Geometry

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)

如您所见,我们的约束允许将空值添加到数据库中。

Back to text