Ответы пользователя по тегу Программирование
  • Как не растерять навыки за время отсутствия?

    @zedxxx
    Через месяц голова наоборот заработает с удвоенной силой. Делать перерывы иногда очень даже полезно - подкорка-то продолжает работать и переваривать полученную информацию. Главное после перерыва не впасть в прокрастинацию, а быстро заняться полезным делом.
    Ответ написан
    Комментировать
  • Как распаковать портабельную программу на python?

    @zedxxx
    Лень тратить много времени на поиск продукта с помощью которого она была упакована

    А что их искать-то? Вот список ходовых утилит: www.freehackers.org/Packaging_a_python_program
    library.zip <--- тут лежат питоновские библиотеки

    Там же должны лежать и скомпилированные модули самой программы. Распотрошите архив и сравните содержимое с оригинальным питоном. Все "лишние" файлы и будут вашей программой.
    Ответ написан
    Комментировать
  • На какой язык переходить после Pascal?

    @zedxxx
    Считаю, что Pascal я уже познал.

    Вы познали основы и уже спешите перейти к следующему языку. Только вот проблема - зная основы, что-то серьёзное написать очень трудно. Нужно углубляться в технологии и фреймворки, на что обычно и тратится львиная доля времени при изучении ЯП.

    Ну а по поводу фриланса - css + html + JS + PHP вас вполне себе прокормят.
    Ответ написан
  • Как работать с растрами в памяти в GDAL (Python 2.x)?

    @zedxxx Автор вопроса
    Придумал загрузку и выгрузку растров через Pillow и numpy. Возможно, не совсем оптимально с точки зрения производительности, но работает:
    warp.py
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import osr
    import gdal
    import numpy
    from PIL import Image
    from StringIO import StringIO
    
    
    def reproject_vrt(src_epsg, src_gt, src_size, dst_epsg):
    
        src_proj = osr.SpatialReference()
        src_proj.ImportFromEPSG(src_epsg)
    
        driver = gdal.GetDriverByName('VRT')
        src_ds = driver.Create('', src_size[0], src_size[1])
    
        src_ds.SetGeoTransform(src_gt)
        src_ds.SetProjection(src_proj.ExportToWkt())
    
        dst_proj = osr.SpatialReference()
        dst_proj.ImportFromEPSG(dst_epsg)
    
        dst_ds = gdal.AutoCreateWarpedVRT(
            src_ds,
            src_proj.ExportToWkt(),
            dst_proj.ExportToWkt())
    
        return dst_ds.GetGeoTransform(), dst_ds.RasterXSize, dst_ds.RasterYSize
    
    
    def reproject_band(band, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height):
    
        src_height, src_width = band.shape
    
        driver = gdal.GetDriverByName('MEM')
    
        src_ds = driver.Create('', src_width, src_height)
        src_ds.GetRasterBand(1).WriteArray(band)
    
        src_proj = osr.SpatialReference()
        src_proj.ImportFromEPSG(src_epsg)
    
        src_ds.SetGeoTransform(src_gt)
        src_ds.SetProjection(src_proj.ExportToWkt())
    
        dst_ds = driver.Create('', dst_width, dst_height)
    
        dst_proj = osr.SpatialReference()
        dst_proj.ImportFromEPSG(dst_epsg)
    
        dst_ds.SetGeoTransform(dst_gt)
        dst_ds.SetProjection(dst_proj.ExportToWkt())
    
        gdal.ReprojectImage(src_ds, dst_ds, None, None, gdal.GRA_Bilinear)
    
        return dst_ds.ReadAsArray()
    
    
    def reproject_raster(raster, src_epsg, src_gt, dst_epsg):
    
        src_img = Image.open(StringIO(raster))
    
        dst_gt, dst_width, dst_height = reproject_vrt(src_epsg, src_gt, src_img.size, dst_epsg)
    
        src_array = numpy.array(src_img)
    
        if src_array.ndim == 3:
            dst_array_shape = (dst_height, dst_width, src_array.shape[2])
            dst_array = numpy.zeros(dst_array_shape, src_array.dtype)
            for i in range(0, src_array.shape[2]):
                band = src_array[:, :, i]
                band = reproject_band(band, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height)
                dst_array[:, :, i] = band
        elif src_array.ndim == 2:
            dst_array = reproject_band(src_array, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height)
        else:
            raise Exception('Unexpected array geometry!')
    
        dst_img = Image.frombytes(src_img.mode, (dst_width, dst_height), dst_array.data)
    
        raster = StringIO()
        dst_img.save(raster, format=src_img.format)
    
        return raster.getvalue()

    И ещё, как я понял перепроецировать нужно каждый канал (RGB) отдельно, иначе получается каша...
    Ответ написан
    Комментировать