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 ENDMuestra 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; /
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri