ArcGIS Desktop

  • Dokumentation
  • Support

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS for Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Arbeitsablauf: Aktualisieren der Pixeldaten in einem ST_Raster-Wert

  • Aktualisieren eines ST_Raster-Wertes mit der temporären Variable "ST_PixelData"
  • Aktualisieren eines ST_Raster-Wertes mit der dauerhaften Spalte "ST_PixelData"
Komplexität:
Fortgeschritten
Erforderliche Daten:
Eigene Daten verwenden
Ziel:
Sie haben zwei Möglichkeiten, "ST_PixelData" aus einem ST_Raster-Wert zu extrahieren, zu bearbeiten und die bearbeiteten Pixel zurück in den ST_Raster-Wert zu schreiben.

Die Bearbeitung der Pixeldaten beinhaltet Folgendes:

  1. Abrufen der "ST_PixelData" aus einem ST_Raster-Wert
  2. Bearbeiten der Pixel der "ST_PixelData"
  3. 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.

  1. 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.

  1. 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);
    
  2. 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;
    
  3. 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;
    
  4. 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;
    

Verwandte Themen

  • ST_Raster.getPixelData
  • ST_PixelData.setValue

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS Plattform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Insider-Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2017 Esri. | Datenschutz | Rechtliches