CÓMO
En algunos casos, puede ser necesario insertar geometrías en una clase de entidad mediante Lenguaje Estructurado de Consultas (SQL). Para ello, se puede utilizar un bucle o un cursor de base de datos en SQL. En ocasiones, debido al rendimiento, los recursos o los flujos de trabajo, es preferible crear datos a través de SQL que crear los datos en ArcMap.
-- Obtener el número de filas en la tabla de bucles
DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(*) FROM sde.INPUT_TABLE)
-- Declarar un iterador
DECLARE @iterator INT
-- Inicializar el iterador
SELECT @iterator = MIN(OBJECTID) FROM SDE.INPUT_TABLE
-- Recorrer las filas de una tabla @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
En el ejemplo siguiente, se inserta una geometría de puntos en una clase de entidad desde una tabla de base de datos existente.
Nota: Este procedimiento funciona mejor si hay una columna de identificador único en la tabla de base de datos de entrada, como un campo rownum o OID en SQL Server. De este modo, se asegura que el bucle WHILE no se salte ninguna fila que no sea única.
Nota: Para insertar datos en una clase de entidad registrada, se debe especificar un valor no nulo único para la columna ObjectID. Para ello, se debe usar el procedimiento Next_RowID.Muestra de SQL Server Geometry:
-- Obtener el número de filas en la tabla de bucles
DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(*)FROM sde.INPUT_TABLE)
-- Declarar un iterador
DECLARE @iterator INT
-- Inicializar el iterador
SELECT @iterator = MIN(OBJECTID) FROM SDE.INPUT_TABLE
-- Recorrer las filas de una tabla
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
Muestra de Oracle SDO Geometry:
SET SERVEROUTPUT ON
-- Declarar un cursor
DECLARE
CURSOR points is
select *
from sde.input_table;
-- Recorrer el cursor
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;
/
Muestra de Oracle ST Geometry:
SET SERVEROUTPUT ON
-- Declarar un cursor
DECLARE
CURSOR points is
select *
from sde.input_table;
-- Recorrer el cursor
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. de artículo: 000012317
Obtener ayuda de expertos en ArcGIS
Empieza a chatear ahora