空间分析入门
要开始分析空间数据,首先要将空间数据加载到数据库中。
装入空间数据
CREATE TABLE PointData (PointID integer, the_geom varchar(200));INSERT INTO PointData VALUES (1, inza..ST_Point(3423, 4356));
INSERT INTO PointData VALUES (1, inza..ST_WKTToSQL('Point (3423 4356)'));请注意,只需执行其中一条 INSERT 命令即可将点插入PointData表。 执行两条 INSERT 命令的结果是两个点的PointID 相同。 在空间 API 函数中显示数据类型 ST_Geometry(或子类 ST_Point)的任何地方,都可以使用 the_geom 列。
SELECT inza..ST_GeometryType(the_geom) FROM PointData;
ST_GEOMETRYTYPE
---------------------
ST_Point
ST_PointCREATE TABLE Polys (PolyID integer, the_geom varchar(200));INSERT INTO Polys VALUES (1, inza..ST_WKTToSQL('Polygon ((1000 1000, 1000 5000, 4000 5000, 4000 1000, 1000 1000))'));
INSERT INTO Polys VALUES (2, inza..ST_WKTToSQL('Polygon ((100 100, 100 500, 400 500, 400 100, 100 100))'));SELECT PointID, PolyID FROM PointData AS a, Polys AS b WHERE inza..ST_Intersects(a.the_geom, b.the_geom);
POINTID | POLYID
---------+--------
1 | 1
1 | 1空间数据表示法
创建几何对象或将现有空间数据加载到数据库时,数据将使用内部格式存储。 因此,如果使用标准的 "SELECT * FROM
<table>查询来查看空间数据,返回的数据是不可读的。 要以可读形式显示数据,请使用空间转换功能。
geoms的小表,并在表中添加多边形和线字符串对象:CREATE TABLE geoms (PolyID INTEGER, the_geom VARCHAR(64000));
INSERT INTO geoms VALUES (1, inza..ST_WKTtoSQL('Polygon ((1 1, 1 4, 3.5 2.5, 6 4, 6 1, 1 1))'));
INSERT INTO geoms VALUES (2, inza..ST_WKTtoSQL('Linestring (1 1, 1 4, 6 4, 6 1)'));要以可读形式显示 "geoms中的数据,请使用空间转换函数之一:- 要将空间数据呈现为文本,请使用ST_AsText:
SELECT inza..ST_AsText(the_geom) FROM geoms; ST_ASTEXT --------------------------------------------------------------------- POLYGON ((1 1, 1 4, 3.5 2.5, 6 4, 6 1, 1 1)) LINESTRING (1 1, 1 4, 6 4, 6 1) - 要以 Keyhole 标记语言(KML)呈现空间数据,请使用ST_AsKML:
SELECT inza..ST_AsKML(the_geom) FROM geoms; ST_ASKML --------------------------------------------------------------------- <LineString><coordinates>1,1 1,4 6,4 6,1</coordinates></LineString> <Polygon><outerBoundaryIs><LinearRing><coordinates>1,1 1,4 3.5,2.5 6,4 6,1 1,1</coordinates></LinearRing></outerBoundaryIs></Polygon>
如何存储空间数据
- 空间
- 空间数据保存在 VARCHAR 列中。
- 空间 ESRI
- 空间数据保存在 ST_GEOMETRY 列中。
每列的最大大小为 64,000 字节,数据库行的最大大小为 65,535 字节。 虽然大多数几何对象都可以在一个 64,000 字节的字段内完全定义,但有些几何对象,例如有许多顶点的多边形、有许多点的线段或多点。 可能需要更多空间。
通常情况下,多边形只有一个环(外环),顶点使用 XY 坐标,在达到列大小限制之前,顶点数最多可达 3990 个。 如果多边形有内环(即孔),或其顶点使用 XYZ、XYM 或 XYZM 坐标,则一列中顶点的最大数量会减少。
从其他数据库加载空间数据
从其他数据库加载空间数据时,有些几何图形可能太大,无法存储在单列中。 数据也有可能包含非简单几何类型,或者使用了加载函数不支持的字符或其他值。
- 它可以检测到顶点超过 3990 个的多边形,并采取用户指定的操作,如将几何体切成更小的几何体、跳过并忽略几何体、中止加载过程,或对几何体进行泛化(或平滑),使其足够小以适应目标区域。
- 它可以检测非简单几何图形,ESRI 空间插件支持这些几何图形,但空间插件不支持。 它可以将其过滤掉,或者进行缓冲,以便随后将其转化为简单的几何图形。
- 它可以加载二进制空间数据,同时检测和转义加载功能不支持的已知二进制值。
在用户数据库中使用空间功能
安装空间或空间 ESRI 卡盒后,所有空间函数和存储过程默认都会在 INZA 数据库中注册。 不过,您也可以在用户数据库中注册空间函数和存储过程。 这样,您就可以在单一系统中使用多个版本的空间功能,例如用于测试目的。
- 输入以下命令创建新用户数据库,其中 "
newdb代表要创建的用户数据库名称。% nzsql -c "create database newdb;" CREATE DATABASE - 输入以下命令注册 nzspatial:
% nzcm -d newdb -r nzspatial - 输入以下命令运行create_inza_db.sh脚本:
% /nz/export/ae/utilities/bin/create_inza_db.sh newdb
- 在 INZA 模式中,当启用全模式支持Netezza Performance Server功能时
- 在默认模式中,当全模式支持Netezza Performance Server功能禁用时
从空间卡盒升级到空间 ESRI 卡盒
您可以使用 "convert.sh脚本来帮助您将数据从空间盒 (nzspatial) 使用的众所周知的二进制 (WKB) 格式迁移到空间 ESRI 盒 (nzspatial_esri) 使用的 ESRI 二进制格式。
脚本使用了 ST_CONVERT 函数,因此无需单独调用该函数。 脚本位于 "/nz/export/ae/products/netezza/nzspatial_esri/<version>/scripts/convert.sh中。
- SRID 1111 将转换为您指定的 SRID(默认为 4269)。
- SRID 1234 将转换为您指定的 SRID(默认为 27700)。
- nzspatial 函数。
- nzspatial_esri 函数。
- 目标数据库已 INA 初始化。
| 参数 | 描述 |
|---|---|
| <nzspatial db> | 包含 nzspatial 表数据的源数据库名称。 |
| <nzspatial表 | 包含 nzspatial 数据的源表名称。 |
| <几何列> | 几何列名称。 |
| <nzspatial函数库> | 包含 nzspatial 函数的数据库名称。 |
| <nzspatial_esri函数数据库> | 包含 nzspatial_esri 函数的数据库名称。 |
| <nzspatial_esri db> | 包含新创建的 nzspatial_esri 表数据的目标数据库名称。 默认为源数据库。 |
| <nzspatial_esri表> | 包含新创建的 nzspatial_esri 数据的目标表名称。 默认名称为 <nzspatial_table>_tmp。 |
| <新球体 Srid> | 要分配给新创建的 nzspatial_esri 数据的 SRID,之前分配给 SRID 1111(球形)。 默认值为 4269。 |
| <新的卡方网格> | 要分配给新创建的 nzspatial_esri 数据的 SRID,之前分配给 SRID 1234(笛卡尔)。 默认值为 27700。 |
