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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 空间数据支持 » 空间数据

 

从标准文本 (WKT) 文件装载空间数据

您可以通过使用标准文本文件 (WKT) 将空间数据添加到表中,此文件夹中包含可用于将空间数据装载到数据库中并能够以几何形式进行表示的文本。

前提条件

装载数据所需的特权取决于 -gl 服务器选项。如果 -gl 选项设置为 ALL,则必须满足以下条件之一:

  • 您是表的所有者
  • 您具有表的 LOAD 特权
  • 您具有 LOAD ANY TABLE 系统特权
  • 您具有 ALTER ANY TABLE 系统特权

如将 -gl 选项设置为 DBA,您必须具有 LOAD ANY TABLE 或 ALTER ANY TABLE 系统特权。

如果 -gl 选项设置为 NONE,则不允许执行 LOAD TABLE。

从客户端计算机上的文件进行装载时:

  • 还需要 READ CLIENT FILE 特权。

  • 需要具有对从中读取的目录的读取特权。

  • 必须启用 allow_read_client_file 数据库选项。

  • 必须启用 read_client_file 安全功能。

 从 WKT 文件装载空间数据
  1. 创建一个包含空间数据的 WKT 文件,以便将其装载到数据库中。

    文件可以是 LOAD TABLE 语句支持的任何格式。

  2. 在 Interactive SQL 中连接到数据库。

  3. 使用与以下所示类似的语句创建一个表并将数据从文件装载到表中:

    DROP TABLE IF EXISTS SA_WKT;
    CREATE TABLE SA_WKT (
        description CHAR(24),
        sample_geometry ST_Geometry(SRID=1000004326)
    );
    
    LOAD TABLE SA_WKT FROM 'C:\\Documents and Settings\\All Users\\Documents\\SQL Anywhere 16\\Samples\\wktgeometries.csv' DELIMITED BY ',';

    这些数据即被装载到表中。

结果

空间数据从 WKT 文件成功装载。

下一个

可以在 Interactive SQL 中使用 [空间查看器] 查看数据。

  1. 将以下文本保存在名为 wktgeometries.csv 的文本文件中。

    以下文本中包含一组以 WKT 格式定义的几何。



    head,"CircularString(1.1 1.9, 1.1 2.5, 1.1 1.9)"
    left iris,"Point(0.96 2.32)"
    right iris,"Point(1.24 2.32)"
    left eye,"MultiCurve(CircularString(0.9 2.32, 0.95 2.3, 1.0 2.32),CircularString(0.9 2.32, 0.95 2.34, 1.0 2.32))"
    right eye,"MultiCurve(CircularString(1.2 2.32, 1.25 2.3, 1.3 2.32),CircularString(1.2 2.32, 1.25 2.34, 1.3 2.32))"
    nose,"CircularString(1.1 2.16, 1.1 2.24, 1.1 2.16)"
    mouth,"CircularString(0.9 2.10, 1.1 2.00, 1.3 2.10)"
    hair,"MultiCurve(CircularString(1.1 2.5, 1.0 2.48, 0.8 2.4),CircularString(1.1 2.5, 1.0 2.52, 0.7 2.5),CircularString(1.1 2.5, 1.0 2.56, 0.9 2.6),CircularString(1.1 2.5, 1.05 2.57, 1.0 2.6))"
    neck,"LineString(1.1 1.9, 1.1 1.8)"
    clothes and box,"MultiSurface(((1.6 1.9, 1.9 1.9, 1.9 2.2, 1.6 2.2, 1.6 1.9)),((1.1 1.8, 0.7 1.2, 1.5 1.2, 1.1 1.8)))"
    holes in box,"MultiPoint((1.65 1.95),(1.75 1.95),(1.85 1.95),(1.65 2.05),(1.75 2.05),(1.85 2.05),(1.65 2.15),(1.75 2.15),(1.85 2.15))"
    arms and legs,"MultiLineString((0.9 1.2, 0.9 0.8),(1.3 1.2, 1.3 0.8),(0.97 1.6, 1.6 1.9),(1.23 1.6, 1.7 1.9))"
    left cart wheel,"CircularString(2.05 0.8, 2.05 0.9, 2.05 0.8)"
    right cart wheel,"CircularString(2.95 0.8, 2.95 0.9, 2.95 0.8)"
    cart body,"Polygon((1.9 0.9, 1.9 1.0, 3.1 1.0, 3.1 0.9, 1.9 0.9))"
    angular shapes on cart,"MultiPolygon(((2.18 1.0, 2.1 1.2, 2.3 1.4, 2.5 1.2, 2.35 1.0, 2.18 1.0)),((2.3 1.4, 2.57 1.6, 2.7 1.3, 2.3 1.4)))"
    round shape on cart,"CurvePolygon(CompoundCurve(CircularString(2.6 1.0, 2.7 1.3, 2.8 1.0),(2.8 1.0, 2.6 1.0)))"
    cart handle,"GeometryCollection(MultiCurve((2.0 1.0, 2.1 1.0),CircularString(2.0 1.0, 1.98 1.1, 1.9 1.2),CircularString(2.1 1.0, 2.08 1.1, 2.0 1.2),(1.9 1.2, 1.85 1.3),(2.0 1.2, 1.9 1.35),(1.85 1.3, 1.9 1.35)),CircularString(1.85 1.3, 1.835 1.29, 1.825 1.315),CircularString(1.9 1.35, 1.895 1.38, 1.88 1.365),LineString(1.825 1.315, 1.88 1.365))"
  2. 在 Interactive SQL 中,连接到示例数据库 (demo.db)。

  3. 创建一个名为 SA_WKT 的表,然后将数据从 wktgeometries.csv 装载到该表中。将 .csv 文件的路径替换为文件的保存路径:

    DROP TABLE IF EXISTS SA_WKT;
    CREATE TABLE SA_WKT (
        description CHAR(24),
        sample_geometry ST_Geometry(SRID=1000004326)
    );
    
    LOAD TABLE SA_WKT FROM 'C:\\Documents and Settings\\All Users\\Documents\\SQL Anywhere 16\\Samples\\wktgeometries.csv' DELIMITED BY ',';

    这些数据即被装载到表中。

  4. 在 Interactive SQL 中,单击 [工具] » [空间查看器]。

  5. 在 [空间查看器] 中,执行以下语句以查看几何:

    SELECT * FROM SA_WKT;
    一组多边形、线和点,将它们组合在一起后,看起来就像是一个人拿着一个方块站在装满几何形状的小货车旁。
  6. 您的数据中所包含的空间数据列可能不止一个。可以创建一个 WKT 数据文件,文件包含分别存储在单独的列中的受支持空间数据类型。

    将以下代码复制到文本编辑器中,然后将文件另存为 wktgeometries2.csv



    "Point(0 0)",,,,,,,,,,,,,,
    ,"LineString(0 0, 1 1)",,,,,,,,,,,,,
    ,,"CircularString(0 0, 1 1, 0 0)",,,,,,,,,,,,
    ,,,"CompoundCurve(CircularString(0 0, 1 1, 1 0),(1 0, 0 1))",,,,,,,,,,,
    ,,,,"CompoundCurve(CircularString(0 0, 1 1, 1 0),(1 0, 0 1),(0 1, 0 0))",,,,,,,,,,
    ,,,,,"Polygon((-1 0, 1 0, 2 1, 0 3, -2 1, -1 0))",,,,,,,,,
    ,,,,,,"CurvePolygon(CompoundCurve(CircularString(0 0, 1 1, 1 0),(1 0, 0 0)))",,,,,,,,
    ,,,,,,,"CurvePolygon(CompoundCurve(CircularString(0 0, 2 1, 2 0),(2 0, 0 0)))",,,,,,,
    ,,,,,,,,"MultiPoint((2 0),(0 0),(3 0),(1 0))",,,,,,
    ,,,,,,,,,"MultiPolygon(((4 0, 4 1, 5 1, 5 0, 4 0)),((-1 0, 1 0, 2 1, 0 3, -2 1, -1 0)))",,,,,
    ,,,,,,,,,,"MultiSurface(((4 0, 4 1, 5 1, 5 0, 4 0)),CurvePolygon(CompoundCurve(CircularString(0 0, 2 1, 2 0),(2 0, 0 0))))",,,,
    ,,,,,,,,,,,"MultiLineString((2 0, 0 0),(3 0, 1 0),(-2 1, 0 4))",,,
    ,,,,,,,,,,,,"MultiCurve((3 2, 4 3),CircularString(0 0, 1 1, 0 0))",,
    ,,,,,,,,,,,,,"GeometryCollection(MultiPoint((2 0),(0 0),(3 0),(1 0)),MultiSurface(((4 0, 4 1, 5 1, 5 0, 4 0)),CurvePolygon(CompoundCurve(CircularString(0 0, 2 1, 2 0),(2 0, 0 0)))),MultiCurve((3 2, 4 3),CircularString(0 0, 1 1, 0 0)))",
    ,,,,,,,,,,,,,,"GeometryCollection(Point(0 0),CompoundCurve(CircularString(0 0, 1 1, 1 0),(1 0, 0 1),(0 1, 0 0)),CurvePolygon(CompoundCurve(CircularString(0 0, 2 1, 2 0),(2 0, 0 0))),MultiPoint((2 0),(0 0),(3 0),(1 0)),MultiSurface(((4 0, 4 1, 5 1, 5 0, 4 0)),CurvePolygon(CompoundCurve(CircularString(0 0, 2 1, 2 0),(2 0, 0 0)))),MultiCurve((3 2, 4 3),CircularString(0 0, 1 1, 0 0)))"
  7. 创建一个名为 SA_WKT2 的表,然后通过执行以下语句将数据从 wktgeometries2.csv 装载到该表中。确保将 .csv 文件的路径替换为文件的保存路径:



    DROP TABLE IF EXISTS SA_WKT2;
    CREATE TABLE SA_WKT2 (
        point          ST_Point,
        line           ST_LineString,
        circle         ST_CircularString,
        compoundcurve  ST_CompoundCurve,
        curve          ST_Curve,
        polygon1       ST_Polygon,
        curvepolygon   ST_CurvePolygon,
        surface        ST_Surface,
        multipoint     ST_MultiPoint,
        multipolygon   ST_MultiPolygon,
        multisurface   ST_MultiSurface,
        multiline      ST_MultiLineString,
        multicurve     ST_MultiCurve,
        geomcollection ST_GeomCollection,
        geometry       ST_Geometry
    );
    
    LOAD TABLE SA_WKT2 FROM 'C:\\Documents and Settings\\All Users\\Documents\\SQL Anywhere 16\\Samples\\wktgeometries2.csv' DELIMITED BY ',';

    这些数据即被装载到表中。

  8. 在 [空间查看器] 中,执行以下语句以查看几何:

    SELECT * FROM SA_WKT2;

    一次只能查看一个数据列;要查看其它列的几何,必须使用 [结果] 区中的 [] 下拉菜单。例如,以下显示的就是 curvepolygon 列中的几何:

    多边形图像。多边形的顶部是圆的,而底部是平的。
  9. 要同时查看所有列中的几何,先针对各列执行 SELECT 语句,然后再对所有结果执行 UNION ALL 命令,具体方式如下:



    SELECT point FROM SA_WKT2
    UNION ALL SELECT line FROM SA_WKT2
    UNION ALL SELECT circle FROM SA_WKT2
    UNION ALL SELECT compoundcurve FROM SA_WKT2
    UNION ALL SELECT curve FROM SA_WKT2
    UNION ALL SELECT polygon1 FROM SA_WKT2
    UNION ALL SELECT curvepolygon FROM SA_WKT2
    UNION ALL SELECT surface FROM SA_WKT2
    UNION ALL SELECT multipoint FROM SA_WKT2
    UNION ALL SELECT multipolygon FROM SA_WKT2
    UNION ALL SELECT multisurface FROM SA_WKT2
    UNION ALL SELECT multiline FROM SA_WKT2
    UNION ALL SELECT multicurve FROM SA_WKT2
    UNION ALL SELECT geomcollection FROM SA_WKT2
    UNION ALL SELECT geometry FROM SA_WKT2
    显示了 SA_WKT2 列中所有几何的图像。

 另请参见