16.2. Lesson: 简单要素模型

我们如何在数据库中存储和表示地理要素?在本课中,我们将介绍一种方法,即OGC定义的简单功能模型。

The goal for this lesson: 了解什么是SFS模型以及如何使用它。

16.2.1. 什么是OGC

开放地理空间联盟(OGC)是一个国际自愿共识标准组织,成立于1994年。在OGC中,全球370多个商业、政府、非营利和研究组织在一个开放的共识进程中合作,鼓励开发和实施地理空间内容和服务、地理信息系统数据处理和数据共享的标准。 - Wikipedia

16.2.2. 什么是SFS模型

SQL(SFS)模型的简单功能是 non-topological 在数据库中存储地理空间数据的方式,并定义用于访问、操作和构建这些数据的函数。

../../../_images/ogc_sfs.png

该模型定义了点、线串和多边形类型的地理空间数据(以及将它们聚合到多个对象)。

有关更多信息,请查看 OGC Simple Feature for SQL 标准。

16.2.3. 将几何字段添加到表中

让我们向People表中添加一个点字段:

alter table people add column the_geom geometry;

16.2.4. 基于几何图形类型添加约束

您会注意到,几何字段类型并未隐式指定内容 type 场的几何体-为此,我们需要一个约束:

alter table people
add constraint people_geom_point_chk
    check(st_geometrytype(the_geom) = 'ST_Point'::text
          OR the_geom IS NULL);

这会将约束添加到表中,以便它将仅接受点几何图形或空值。

16.2.5. Try Yourself 硬的

创建一个名为Cities的新表,并为其提供一些适当的列,包括用于存储多边形(城市边界)的几何图形字段。确保它具有强制几何体成为多边形的约束。

16.2.6. 填充GEOMETRY_COLUMNS表

此时,您还应该将条目添加到 geometry_columns 表:

insert into geometry_columns values
  ('','public','people','the_geom',2,4326,'POINT');

为什么? geometry_columns 由某些应用程序使用,以了解数据库中的哪些表包含几何数据。

备注

如果出现上述情况 INSERT 语句导致错误,则首先运行以下查询:

select * from geometry_columns;

如果该列 f_table_name 包含值 people ,则该表已经注册,您不需要再做任何操作。

它的价值 2 指的是维度的数量;在本例中为两个: XY

它的价值 4326 指的是我们正在使用的投影;在本例中,WGS 84由数字4326表示(参考前面关于EPSG的讨论)。

Try Yourself 基本信息

添加适当的 geometry_columns 新城市图层的条目

16.2.7. 使用SQL将几何记录添加到表中

现在我们的表支持地理位置,我们可以在其中存储几何图形:

insert into people (name,house_no, street_id, phone_no, the_geom)
        values ('Fault Towers',
                 34,
                 3,
                 '072 812 31 28',
                 'SRID=4326;POINT(33 -33)');

备注

在上面的新条目中,您需要指定要使用的投影(SRID)。这是因为您使用纯文本字符串输入了新点的几何图形,这不会自动添加正确的投影信息。显然,新点需要使用与其要添加到的数据集相同的SRID,因此您需要指定它。

例如,如果此时您使用的是图形界面,则会自动指定每个点的投影。换句话说,如果您已经为该数据集指定了正确的投影,那么您通常不需要为要添加的每个点使用正确的投影,就像我们前面所做的那样。

现在可能是打开QGIS并尝试查看您的 people 桌子。此外,我们应该尝试编辑/添加/删除记录,然后在数据库中执行SELECT查询,以查看数据是如何更改的。

要在QGIS中加载PostGIS图层,请使用 Layer ► Add PostGIS Layers 菜单选项或工具栏按钮:

添加邮政层

这将打开该对话框:

../../../_images/add_postgis_layer_dialog.png

按下 New 用于打开此对话框的按钮:

../../../_images/new_postgis_connection.png

然后定义一个新连接,例如:

Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:

要查看QGIS是否已找到 address 数据库,并且您的用户名和密码正确,请单击 Test Connect 。如果有效,请选中旁边的框 Save UsernameSave Password 。然后单击 OK 来创建此连接。

又回到了 Add PostGIS Layers 对话框中,单击 Connect 并像往常一样向您的项目添加层。

Try Yourself 适度

创建一个以纯文本形式显示人名、街道名称和职位(来自the_geom列)的查询。

16.2.8. In Conclusion

您已经了解了如何将空间对象添加到数据库并在地理信息系统软件中查看它们。

16.2.9. What's Next?

接下来,您将了解如何将数据导入数据库和从数据库导出数据。