Arbeitsablauf: Aktualisieren der Pixeldaten in einem ST_Raster-Wert
Die Bearbeitung der Pixeldaten beinhaltet Folgendes:
- Abrufen der "ST_PixelData" aus einem ST_Raster-Wert
- Bearbeiten der Pixel der "ST_PixelData"
- Schreiben der bearbeiteten Pixel der "ST_PixelData" zurück in den ST_Raster-Wert
Sie können die "ST_PixelData" in eine Variable extrahieren oder in eine Pixeltabelle einfügen. Wenn Sie den Wert in eine Variable extrahieren, können alle drei Schritte als Teil der gleichen SQL-Anweisung ausgeführt werden. Wenn Sie den Wert in eine Tabelle einfügen, wird der Wert beibehalten. Sie können die einzelnen Schritte separat ausführen.
Extrahieren Sie mit der ST_Raster-Funktion "getPixelData" die "ST_PixelData" aus dem ST_Raster-Wert, und schreiben Sie sie mithilfe der ST_Raster-Funktion "Mosaik" zurück.
Aktualisieren eines ST_Raster-Wertes mit der temporären Variable "ST_PixelData"
Sie können die Variable "ST_PixelData" angeben und dann die "ST_PixelData" mit der Funktion "getPixelData" aus einem ST_Raster-Wert in die Variable extrahieren.
-
Geben Sie eine Variable an, extrahieren Sie die Pixeldaten in die Variable, bearbeiten Sie die Pixel, und mosaikieren Sie die geänderten Werte dann zurück zum ST_Raster-Wert.
In diesen Beispielen wird der ST_PixelData-Wert aus der ST_Raster-Spalte der Tabelle "urban_area" extrahiert, in die Variable "ST_PixelData" eingefügt, bearbeitet und zurück zum ST_Raster-Wert mosaikiert.
Oracle
--Define the variable. DECLARE p sde.st_pixeldata; --Fetch the ST_PixelData from the urban_area table into the variable. BEGIN SELECT t.raster.getPixelData() INTO p FROM URBAN_AREA t WHERE t.raster.rasterid = 1; --Reset pixel values FOR i IN 1..256 LOOP FOR j IN 1..256 LOOP IF(p.getvalue(1,i,j)=0) THEN p.setvalue(1,i,j,100); END IF; END LOOP; END LOOP; --Mosaic the altered pixels to the urban_area table. UPDATE URBAN_AREA t SET raster = t.raster.mosaic(p,'compression=lz77,level=-1,nearest') WHERE t.raster.raster_id = 1; END; /
PostgreSQL
--Drop the variable (function) if it already exists. DROP FUNCTION IF EXISTS edit_pixeldata(); --Define a varaible. CREATE OR REPLACE FUNCTION edit_pixeldata() RETURNS integer AS ' DECLARE p st_pixeldata; --Fetch the ST_PixelData from the urban_area table into the variable. BEGIN SELECT getPixelData(raster) INTO p FROM urban_area WHERE raster_id(raster) = 1; --Reset pixel values FOR i IN 1..256 LOOP FOR j IN 1..256 LOOP IF(getvalue(p,1,i,j)=0) THEN p := setvalue(p,1,i,j,100); END IF; END LOOP; END LOOP; --Mosaic the altered pixels to the urban_area table. UPDATE urban_area SET raster = mosaic(raster,p,''compression=lz77,level=-1,nearest'') WHERE raster_id(raster) = 1; END;' LANGUAGE plpgsql; --Drop the variable. SELECT edit_pixeldata(); DROP FUNCTION IF EXISTS edit_pixeldata();
SQL Server
--Define the variable. DECLARE @p ST_PIXELDATA, @i int, @j int; --Fetch the ST_PixelData from the urban_area table into the variable. SET @p = (SELECT raster.getPixelData(NULL) FROM raster.urban_area WHERE raster.raster_id = 1); --Reset pixel values. WHILE( @i<256) BEGIN WHILE(@j<256) BEGIN IF(@p.getValue(1,@i,@j)=0) SELECT @p = @p.setValue(1,@i,@j,100) SET @j=@j+1 END SET @i=@i+1 END --Mosaic the altered pixels to the urban_area table UPDATE raster.urban_area SET raster = raster.mosaic(NULL,@p,'compression=lz77,level=-1,nearest') WHERE raster.raster_id = 1;
Aktualisieren eines ST_Raster-Wertes mit der dauerhaften Spalte "ST_PixelData"
Sie können den ST_PixelData-Wert in eine Tabelle extrahieren, bearbeiten und dann zurück zum ST_Raster-Wert mosaikieren. Dies erfolgt in drei separaten Schritten.
Sie können auf diese Weise den extrahierten Wert in der zweiten Tabelle beibehalten.
- Erstellen Sie eine Tabelle, um den Pixeldaten-Wert zu speichern.
In diesen Beispielen wird die Tabelle "pixels" erstellt.
Oracle
CREATE TABLE pixels (pdata sde.ST_PixelData);
PostgreSQL
CREATE TABLE pixels (pdata sde.ST_PixelData);
SQL Server
CREATE TABLE pixels (pdata dbo.ST_PixelData);
- Verwenden Sie die Funktion "getPixelData" in einer INSERT-Anweisung, um die "ST_PixelData" für eine Pixelspalte in der Pixeltabelle zu extrahieren.
In diesen Beispielen wird der ST_PixelData-Wert in die Pixeltabelle extrahiert.
Oracle
INSERT INTO pixels (pdata) SELECT t.raster.getPixelData(), t.raster.raster_id FROM urban_area t WHERE t.raster.raster_id = 1;
PostgreSQL
INSERT INTO pixels (pdata) SELECT getPixelData(raster,'level=1') FROM urban_area WHERE raster_id(raster) = 1;
SQL Server
INSERT INTO pixels (pdata) SELECT raster.getPixelData('level=1') FROM urban_area WHERE raster.raster_id = 1;
- Extrahieren Sie den Wert aus der Pixeltabelle in eine Variable, aktualisieren Sie die Pixelwerte, und fügen Sie die geänderten Werte dann wieder in der Pixeltabelle ein.
Oracle
DECLARE p sde.st_pixeldata; BEGIN SELECT pdata INTO p FROM PIXELS; FOR i IN 1..256 LOOP FOR j IN 1..256 LOOP IF(p.getvalue(1,i,j)=0) THEN p.setvalue(1,i,j,100); END IF; END LOOP; END LOOP; UPDATE PIXELS t SET pdata = p; END; /
PostgreSQL
DROP FUNCTION EXISTS edit_pixels(); CREATE OR REPLACE FUNCTION EDIT_PIXELS() RETURNS void AS ' DECLARE p st_pixeldata; BEGIN SELECT pdata INTO p FROM pixels; FOR i IN 1..256 LOOP FOR j IN 1..256 LOOP IF(getvalue(p,1,i,j)=0) THEN p := setvalue(p,1,i,j,100); END IF; END LOOP; END LOOP; UPDATE pixels SET pdata = p; END;' LANGUAGE plpgsql;
SQL Server
DECLARE @p sde.st_pixeldata, @i int, @j int; SET @p = (SELECT pdata FROM pixels); SET @i = 0; SET @j = 0; WHILE (@i<256) BEGIN WHILE (@j<256) BEGIN IF(@p.getValue(1,@i,@j)=0) SELECT @p=@p.setValue(1,@i,@j,100); SET @j=@j+1 END SET @i=@i+1 END UPDATE raster.pixels SET pdata = @p;
- Mosaikieren Sie die geänderten Werte der Pixeltabelle zum ST_Raster-Wert in der Tabelle "urban_area".
Oracle
DECLARE p sde.st_pixeldata; BEGIN SELECT pdata INTO p FROM PIXELS; UPDATE URBAN_AREA t SET raster = t.raster.mosaic(p,'compression=lz77,level=-1,nearest') WHERE t.raster.raster_id = 1; END; /
PostgreSQL
SELECT edit_pixels(); DROP FUNCTION IF EXISTS edit_pixels(); DROP FUNCTION IF EXISTS update_pixels(); CREATE OR REPLACE FUNCTION UPDATE_PIXELS() RETURNS void AS ' DECLARE p st_pixeldata; BEGIN SELECT pdata INTO p FROM pixels; UPDATE urban_area t SET raster = mosaic(raster,p, ''compression=lz77,level=-1,nearest'') WHERE raster_id(raster) = 1; END;' LANGUAGE plpgsql; SELECT update_pixels(); DROP FUNCTION IF EXISTS update_pixels();
SQL Server
DECLARE @p sde.ST_Pixeldata; SET @p = (SELECT pdata FROM pixels); UPDATE raster.urban_area SET raster = raster.mosaic(NULL,@p,'compression=lz77,level=-1,nearest') WHERE raster.raster_id = 1;