Incorporer d'autres images sur le raster avec ArcPy

Exemple de données

--Image du côté à intégrer (image satellite dans cet exemple) - before.tif, - 7871 x 7751 pixels (row x column)

![2020-02-09-11-41-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533950/e7990cdf-9576-61c6-3423-cc2040639824.png)

--Image intégrée (notation de crédit sur l'image satellite dans cet exemple) --Credit.bmp - 526 x 4300 pixels (row x column)

![2020-02-09-11-46-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533950/1474dbbd-c6f6-a64c-361e-fc57c5776b7e.png)

Résultat d'exécution

2020-02-09-11-42-53.png

Code Python

EmbedOtherImageToRaster.py


import arcpy
import numpy

inRasterLayer   = arcpy.GetParameterAsText(0)   #Raster (couche) du côté incorporé
inOtherImage    = arcpy.GetParameterAsText(1)   #Image à intégrer
outRasterData   = arcpy.GetParameterAsText(2)   #Raster de destination en sortie
inOffsetRow     = arcpy.GetParameterAsText(3)   #Incorporation des coordonnées de destination (direction des lignes)
inOffsetCol     = arcpy.GetParameterAsText(4)   #Incorporation des coordonnées de destination (direction de la colonne)

baseRaster = arcpy.Raster(inRasterLayer)
baseArray = arcpy.RasterToNumPyArray(baseRaster)

otherRaster = arcpy.Raster(inOtherImage)
otherArray = arcpy.RasterToNumPyArray(otherRaster)

offsetRow = int(inOffsetRow)
offsetCol = int(inOffsetCol)

outArray = baseArray.copy()    #Tableau de pixels de destination de sortie

#Écraser la valeur de pixel de l'image à incorporer dans le tableau de pixels de destination de sortie
for band in range(0, 3):
    for row in range(0, otherArray.shape[1]):
        for col in range(0, otherArray.shape[2]):
            outArray[band, offsetRow + row, offsetCol + col] = otherArray[band, row, col]

#Enregistrer le tableau de pixels de destination de sortie en tant que raster
outRaster = arcpy.NumPyArrayToRaster(
    outArray,
    arcpy.Point(baseRaster.extent.XMin, baseRaster.extent.YMin),
    baseRaster.meanCellWidth,
    baseRaster.meanCellHeight)
arcpy.DefineProjection_management(outRaster, baseRaster.spatialReference)

compressionTypes = {
    'LZ77'  : 'LZ77',
    'JPEG'  : 'JPEG',
    'JPEG2000'  : 'JPEG2000',
    'PACKBITS'  : 'PackBits',
    'LZW'   : 'LZW',
    'RLE'   : 'RLE',
    'CCITT GROUP 3' : 'CCITT_G3',
    'CCITT GROUP 4' : 'CCITT_G4',
    'CCITT (1D)'    : 'CCITT_1D',
    'None'  : 'NONE' }
arcpy.env.compression = compressionTypes[baseRaster.compressionType]

pixelTypes = {
    'U1'    : '1_BIT',
    'U2'    : '2_BIT',
    'U4'    : '4_BIT',
    'U8'    : '8_BIT_UNSIGNED',
    'S8'    : '8_BIT_SIGNED',
    'U16'   : '16_BIT_UNSIGNED',
    'S16'   : '16_BIT_SIGNED',
    'U32'   : '32_BIT_UNSIGNED',
    'S32'   : '32_BIT_SIGNED',
    'F32'   : '32_BIT_FLOAT',
    'F64'   : '64_BIT' }
formats = {
    'BIL'   : 'BIL',
    'BIP'   : 'BIP',
    'BMP'   : 'BMP',
    'BSQ'   : 'BSQ',
    'DAT'   : 'ENVI',
    'GIF'   : 'GIF',
    'Grid'  : 'GRID',
    'IMAGINE Image' : 'IMAGINE Image',
    'JP2000'        : 'JP2',
    'JPEG'          : 'JPEG',
    'PNG'           : 'PNG',
    'TIFF'          : 'TIFF' }
arcpy.CopyRaster_management(outRaster, outRasterData,
                            pixel_type = pixelTypes[baseRaster.pixelType],
                            format = formats[baseRaster.format],
                            nodata_value = baseRaster.noDataValue)

del baseRaster, baseArray, otherRaster, otherArray, outArray, outRaster

référence

référence

Recommended Posts

Incorporer d'autres images sur le raster avec ArcPy
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
Dessinez une figure sur la couche d'entités avec ArcPy
Afficher les images ImageField normalement sur le serveur avec Django + Google Cloud Strage
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Afficher les images sur S3 avec API Gateway + Lambda
Conseils de dessin avec matplotlib côté serveur
J'ai essayé de jouer avec la calculatrice avec tkinter
Surveiller le modèle d'entraînement avec TensorBord sur Jupyter Notebook
Faire un point d'arrêt sur la couche c avec python
utiliser autre chose que le profil par défaut avec boto3