操作方法

操作方法:使用 SQL 根据 XY 坐标插入几何

Last Published: April 25, 2020

摘要

在某些情况下,可能需要使用结构化查询语言 (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

过程

在以下示例中,将现有数据库表中的点几何插入到要素类中。

  1. 在 ArcMap 中,可以使用以下空间类型之一来创建一个空的点要素类:

    SQL Server:
    Geometry

    Oracle:
    ST_Geometry
    SDO_Geometry
  2. 在 SQL Server 应用程序中,创建游标或循环以迭代遍历输入数据库表。 为每个行创建一个几何。
:
如果输入数据库表中存在唯一标识符列(例如 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
END
Oracle 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;
/

文章 ID:000012317

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容