Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 空间数据支持 » 使用空间数据 » 教程:试用空间要素

 

第 3 课:装载 ESRI shapefile 数据

本课将指导您如何确定 ESRI shapefile 中的列,然后使用该信息创建将装载数据的表。

 ♦ 将 ESRI shapefile 的空间数据装载到数据库中
  1. 由于空间数据与特定空间参照系相关联,因此向数据库中装载数据时,必须将其装载到同一空间参照系或者至少具有等效定义的空间参照系中。要查找 ESRI shapefile 的空间参照系信息,请在文本编辑器中打开项目文件 c:\temp\massdata\tl_2009_25_zcta5.prj。此文件中包含所需的空间参照系信息。

    GEOGCS["GCS_North_American_1983", DATUM["D_North_American_1983",
    SPHEROID["GRS_1980",6378137,298.257222101]], 
    PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]

    字符串 GCS_North_American_1983 即为与数据相关联的空间参照系的名称。

  2. 对 ST_SPATIAL_REFERENCE_SYSTEMS 视图执行快速查询后(SELECT * FROM ST_SPATIAL_REFERENCE_SYSTEMS WHERE srs_name='GCS_North_American_1983';),查询结果显示此名称并未出现在预定义 SRS 列表中。但您可以查询具有相同定义的空间参照系并改为使用该空间参照系:

    SELECT *
    FROM ST_SPATIAL_REFERENCE_SYSTEMS
    WHERE definition LIKE '%1983%' 
    AND definition LIKE 'GEOGCS%';

    该查询返回单个空间参照系,即 SRID 为 4269 的 NAD83,该空间参照系具有相同的定义。这是将分配给从 shapefile 装载的数据的 SRID。

  3. 在 Interactive SQL 中,执行以下语句,以创建名为 Massdata 的表,将 shapefile 装载到表中,将 SRID 4269 分配给数据。请注意,装载可能需要一点时间。

    CALL st_geometry_load_shapefile ( 'c:\\temp\\massdata\\tl_2009_25_zcta5.shp', 
    4269, 
    'Massdata' );

    请参见st_geometry_load_shapefile 系统过程

    注意

    [导入向导] 也支持从 shapefile 装载数据。请参见使用 [导入向导] 导入数据 (Interactive SQL)

  4. 在 Interactive SQL 中,查询该表以查看过去位于 shapefile 中的数据:

    SELECT * FROM Massdata;

    结果中的每一行代表一个邮政编码地区的数据。

    geometry 列以多边形(一个地区)或多面(两个或多个不相邻的地区)的形式保存邮政编码地区的形状信息。

  5. ZCTA5CE 列保存邮政编码。为了在后面的教程中更容易查阅此列,请在 Interactive SQL 中执行以下 ALTER TABLE 语句,以将列名更改为 [ZIP]:

    ALTER TABLE Massdata
    RENAME ZCTA5CE TO ZIP; 
  6. INTPTLON 和 INTPTLAT 两列分别表示邮政编码地区的中心点的 X 和 Y 坐标。在 Interactive SQL 中执行以下 ALTER TABLE 语句,以创建名为 CenterPoint 类型的 ST_Point 列,然后将每组 X 和 Y 变成 CenterPoint 中的值。

    ALTER TABLE Massdata
    ADD CenterPoint AS ST_Point(SRID=4269)
    COMPUTE( new ST_Point( CAST( INTPTLON AS DOUBLE ), CAST( INTPTLAT AS DOUBLE ), 4269 ) );

    现在,Massdata.CenterPoint 中的每个 ST_Point 值表示存储在 Massdata.geometry 中的邮政编码地区的中心点。

  7. 要将单个几何(一个邮政编码地区)作为形状进行查看,请双击 Massdata.geometry 中除了第一个值以外的任何一个值,然后单击 [列值] 窗口中的 [空间预览] 选项卡。

    如果收到的错误消息指出值过大或建议您在结果中包括主键,那是因为为了在 Interactive SQL 中显示这些值,已将它们截断。要修复此错误,您可以修改查询以在结果中包括主键列,也可以调整 Interactive SQL 的 [截断长度] 设置。如果您不想每次查询几何时都必须在结果中包括主键以在 Interactive SQL 中查看几何,那么建议您更改 [截断长度] 设置。

    要更改 Interactive SQL 的 [截断长度] 设置,请单击 [工具] » [选项] » [SQL Anywhere],然后将 [截断长度] 设置成较大的数字,如 100000。

  8. 要将整个数据集作为一个形状进行查看,请单击 [工具] » [空间查看器] 打开 SQL Anywhere [空间查看器],然后在 Interactive SQL 中执行以下查询:

    SELECT geometry FROM Massdata
    UNION ALL SELECT CenterPoint FROM Massdata;
    马萨诸塞州以彩色多边形的形式显示,每个多边形代表一个邮政编码地区。各多边形中的点用于指示多边形的中心点。
  9. 前进至第 4 课:查询空间数据