操作方法
在某些情况下,可能需要使用结构化查询语言 (SQL) 将几何插入到要素类中。 可以在 SQL 中使用循环或数据库游标来执行此操作。 有时,由于性能、资源或工作流的原因,通过 SQL 创建数据比在 ArcMap 中创建数据更合适。
-- 获取循环表中的行数 DECLARE @RowCount INT SET @RowCount = (SELECT COUNT(*) FROM sde.INPUT_TABLE) -- 声明一个迭代器 DECLARE @iterator INT -- 初始化迭代器 SELECT @iterator = MIN(OBJECTID) FROM SDE.INPUT_TABLE -- 循环遍历表 @myTable 中的各行 WHILE @iterator is NOT NULL BEGIN DECLARE @id as integer EXEC sde.next_rowid 'sde', 'points', @id OUTPUT; INSERT INTO sde.POINTS (OBJECTID, Shape) SELECT @id, geometry::STPointFromText('POINT('+str(POINT_X, 38, 8) + ' ' + str(POINT_Y, 38, 8) + ')', 2286) as SHAPE FROM sde.INPUT_TABLE where objectid = @iterator; SELECT @iterator= MIN(OBJECTID) FROM SDE.INPUT_TABLE WHERE @iterator < @RowCount END
在以下示例中,将现有数据库表中的点几何插入到要素类中。
注: 如果输入数据库表中存在唯一标识符列(例如 SQL Server 中的行号或 OID 字段),则此过程效果最佳。 由此可确保 WHILE 循环不会丢失任何非唯一的行。
注: 要将数据插入已注册的要素类,必须为 ObjectID 列指定唯一的非空值。 要执行此操作,必须使用 Next_RowID 过程。SQL Server 几何示例:
-- 获取循环表中的行数 DECLARE @RowCount INT SET @RowCount = (SELECT COUNT(*)FROM sde.INPUT_TABLE) -- 声明一个迭代器 DECLARE @iterator INT -- 初始化迭代器 SELECT @iterator = MIN(OBJECTID) FROM SDE.INPUT_TABLE -- 循环遍历表中的各行 WHILE @iterator is NOT NULL BEGIN DECLARE @id as integer EXEC sde.next_rowid 'sde', 'points', @id OUTPUT; INSERT INTO sde.POINTS (OBJECTID, Shape) SELECT @id, geometry::STPointFromText( 'POINT('+str(POINT_X, 38, 8) + ' ' + str(POINT_Y, 38, 8) + ')', 2286) as SHAPE FROM sde.INPUT_TABLE where objectid = @iterator; SELECT @iterator= MIN(OBJECTID) FROM SDE.INPUT_TABLE WHERE @iterator < @RowCount ENDOracle SDO 几何示例:
SET SERVEROUTPUT ON -- 声明一个游标 DECLARE CURSOR points is select * from sde.input_table; --循环遍历游标 BEGIN FOR pt IN points LOOP INSERT INTO SDE.POINTS (OBJECTID, SHAPE) VALUES ( sde.gdb_util.next_rowid('sde', 'points'), MDSYS.SDO_GEOMETRY(2001,2286,MDSYS.SDO_POINT_TYPE(pt.point_x, pt.point_y,NULL),NULL,NULL) ); END LOOP; COMMIT; END; /Oracle ST 几何示例:
SET SERVEROUTPUT ON -- 声明一个游标 DECLARE CURSOR points is select * from sde.input_table; --循环遍历游标 BEGIN FOR pt IN points LOOP INSERT INTO SDE.POINTS (OBJECTID, SHAPE) VALUES ( sde.gdb_util.next_rowid('sde', 'points'), sde.ST_Point(pt.point_x,pt.point_y, 2286) ); END LOOP; COMMIT; END; /
从 ArcGIS 专家处获得帮助
下载 Esri 支持应用程序