Экспорт gdal geotiff в MySQL - PullRequest
       106

Экспорт gdal geotiff в MySQL

0 голосов
/ 13 июля 2020

Я умею читать в geotiff файле. Я могу без проблем построить и тд ... Но я хочу иметь возможность экспортировать его на MySQL -сервер через python код, а затем снова прочитать его с этого сервера через python код. Возможно ли это вообще и как лучше всего это сделать?

1 Ответ

0 голосов
/ 13 июля 2020

Так что просто мой ответ на случай, если это кому-то понадобится: Я нашел методы, которые мне понравились:

  1. Blob Data
  • Это означает, что данные преобразуются в двоичные данные, а затем помещаются в mysql -table

  • Затем его можно извлечь из этой таблицы и прочитать с помощью python gdal Код выглядит так:

      def convert_to_binary_data(self, filename):
          # Convert digital data to binary format
          with open(filename, 'rb') as file:
              blobData = file.read()
          return blobData
    
      def insert_image(self, photo_path, name, table_name, id):
          binary_photo = self.convert_to_binary_data(photo_path)
          insert_blob_query = "INSERT INTO {} (id, name, photo) VALUES ('{}','{}',COMPRESS({}))".format(table_name, id,
                                                                                                        name,
                                                                                                        str(
                                                                                                            base64.b64encode(
                                                                                                                binary_photo))[
                                                                                                        1:])
          self.connection.execute(insert_blob_query)
    
      def read_blob_data_by_id(self, id, table_name, path):
          sql_fetch_blob_query_data = "SELECT (UNCOMPRESS(photo)) from {} where id = '{}'".format(table_name, id)
          sql_fetch_blob_query_name = "SELECT (name) from {} where id = '{}'".format(table_name, id)
          result = self.connection.execute(sql_fetch_blob_query_data)
          name = self.connection.execute(sql_fetch_blob_query_name)
          for n in name:
              nam = n[0]
          for row in result:
              photo
    

    = base64.b64decode (row [0]) file_like = io.BytesIO (photo) img = Image.open (file_like) img.save (path + '\' + нам + '.jpg')

Чтение в массив
  • второй метод работает с numpy массивом
  • массив numpy считывается, а затем сохраняется в таблицу
  • затем его можно извлечь и преобразовать обратно в файл tif
  • тогда потребуется дополнительная информация lioke pixelx, pixelsy ...

Код выглядит следующим образом :

def array_to_raster(self, geotransform, array, newRasterfn, desc=None,
                    default_no_data=-99999, dtype=gdal.GDT_Float32):
    # converting array to raster and then exporting it into a file
    # reading in single value of geo settings
    if desc is None:
        desc = {'AREA_OR_POINT': 'Area', 'DataType': 'Generic'}
    pixelWidth = geotransform[1]
    pixelHeight = geotransform[5]
    # getting shape
    cols = array.shape[1]
    rows = array.shape[0]
    # getting origin
    originX = geotransform[0]
    originY = geotransform[3]
    # getting driver for file
    driver = gdal.GetDriverByName('GTiff')
    # creating file
    outRaster = driver.Create(newRasterfn, cols, rows, 1, dtype)
    # setting geo settings in file
    outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
    # setting band data
    outband = outRaster.GetRasterBand(1)
    # setting no data normal -99999
    outband.SetNoDataValue(default_no_data)
    # writing the array in data
    outband.WriteArray(array)
    # export settings
    outRasterSRS = osr.SpatialReference()
    outRasterSRS.ImportFromEPSG(25832)
    outRaster.SetProjection(outRasterSRS.ExportToWkt())
    # setting metadata
    outRaster.SetMetadata(desc)
    # clearing flush
    outband.FlushCache()
    # retuning value
    return outRaster
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...