[Portugal] Qgis Trunk 1.7.0 / Georeferenciar imagens raster

Eloi Ribeiro eloi.ribeiro at gmail.com
Fri Dec 10 04:37:55 EST 2010


Já à algum tempo fiz um *script* em *Python* para fazer isso.
Seguramente terás de o modificar para que funcione correctamente no teu
entorno.
Sorte,

def gdal_georeferenciar_mapas_50K(pasta_entrada, pasta_saida):
    '''Georeferenciar os mapas 1:50 000 com base na cartografia vectorial
       com a delemitacao dos mapas. Com postgis ler as coordenadas das
       esquinas de cada poligono e depois com gdal georeferenciar a
imagem.'''
    # ligar-me a base de dados
    conn = psycopg2.connect("dbname='*****************'
user='*****************' host='localhost' password='*****************'")
    cur = conn.cursor()
    # listar mapas
    ficheiros = os.listdir(pasta_entrada)
    for ficheiro in ficheiros:
        if ficheiro[-3:] == 'jpg' or ficheiro[-3:] == 'png':
            # saber o numero de colunas e filas da imagem
            img = pasta_entrada+'/'+ficheiro
            saida = pasta_saida+'/'+ficheiro[:-4]+'_geo.tif'
            ext = ficheiro[-3:].lower()
            dataset = gdal.Open(img, gdal.GA_ReadOnly)
            if dataset is None:
                print 'nao foi possivel carregar a imagem'
            c = dataset.RasterXSize
            l = dataset.RasterYSize
            # numero do mapa
            numero = ficheiro[18:22]
            # consulta dos vertices com PostGIS
            cur.execute("select st_astext(geom),st_astext(st_centroid(geom))
from sch_sig.es_hojas_1_50000 where hoja='%s';" % numero)
            linhas = cur.fetchall()
            for linha in linhas:
                vertices  = linha[0].replace('MULTIPOLYGON(((',
'').replace(')))','')
                centroide = linha[1].replace('POINT(', '').replace(')','')
                # vertices
                for vertice in vertices.split(','):
                    x = vertice.split(' ')[0]
                    y = vertice.split(' ')[1]
                    # superior esquerdo
                    if float(x) < float(centroide.split(' ')[0])-10000 and
float(y) > float(centroide.split(' ')[1])+8000:
                        se = x + ' ' + y
                    # superior direito
                    if float(x) > float(centroide.split(' ')[0])+10000 and
float(y) > float(centroide.split(' ')[1])+8000:
                        sd = x + ' ' + y
                    # inferior direito
                    if float(x) > float(centroide.split(' ')[0])+10000 and
float(y) < float(centroide.split(' ')[1])-8000:
                        id = x + ' ' + y
                    # inferior esquerdo
                    if float(x) < float(centroide.split(' ')[0])-10000 and
float(y) < float(centroide.split(' ')[1])-8000:
                        ie = x + ' ' + y
            # geo referenciacao
            os.system('gdal_translate -of GTiff -gcp 0 0 %s -gcp %s 0 %s
-gcp %s %s %s -gcp 0 %s %s %s %s'
%(se,c,sd,c,l,id,l,ie,img,(img[:-4]+'_t.tif')))
            os.system('gdalwarp -of GTiff -co COMPRESS=LZW -co PREDICTOR=2
-dstnodata 0 -t_srs EPSG:23030 %s %s' %((img[:-4]+'_t.tif'),saida))
            os.system('rm %s' % (img[:-4]+'_t.tif'))
            # actualizar a base de dados
            cur.execute("update sch_sig.es_hojas_1_50000 set sup_izq    =
'%s' where hoja = '%s';" % (se,numero))
            cur.execute("update sch_sig.es_hojas_1_50000 set sup_der    =
'%s' where hoja = '%s';" % (sd,numero))
            cur.execute("update sch_sig.es_hojas_1_50000 set inf_der    =
'%s' where hoja = '%s';" % (id,numero))
            cur.execute("update sch_sig.es_hojas_1_50000 set inf_izq    =
'%s' where hoja = '%s';" % (ie,numero))
            cur.execute("update sch_sig.es_hojas_1_50000 set raster     =
't'  where hoja = '%s';" % numero)
            cur.execute("update sch_sig.es_hojas_1_50000 set raster_col = %i
  where hoja = '%s';" % (c,numero))
            cur.execute("update sch_sig.es_hojas_1_50000 set raster_lin = %i
  where hoja = '%s';" % (l,numero))
            conn.commit()
            print '\n',numero,'ok \n'
    conn.close()
    return

gdal_georeferenciar_mapas_50K('/home/user/Geo/tmp/input/',
'/home/user/Geo/tmp/output/')



Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com


2010/12/10 Pedro Venâncio <pedrongvenancio  yahoo.com>

> Orlando,
>
> Não conheço uma ferramenta que faça isso, mas uma forma de contornar a
> situação é obter as coordenadas da grelha e o tamanho da imagem, e atribuir
> os srcX, srcY, dstX, dstY manualmente.
>
> Por exemplo, o canto superior esquerdo da imagem:
> srcX: 0
> srcY: 0
> dstX: coordenada X retirada dos cantos da grelha
> dstY: coordenada Y retirada dos cantos da grelha
>
>
> Abraço,
> Pedro Venâncio
>
>
>
> --- On *Thu, 12/9/10, legiopatrianostra <legio.patria  gmail.com>* wrote:
>
>
>
> Boa tarde a todos,
>
> Estou a georeferenciar algumas imagens raster, com o Qgis Trunk 1.7.0, e
> gostaria de saber se existe algum plugin, que faça um snapping aos vértices
> das imagens?.
>
> Tenho uma grelha em formato shape, e queria que as imagens ficassem
> ajustadas correctamente com as grelhas.
>
> Sei que o snapping existe para ficheiros vectoriais, bastando para isso
> aceder ao menu "Configurações".
>
> Se alguém me puder ajudar, agradeço desde já.
>
> Orlando Bernardo
>
> --
> ** Antes de imprimir este e-mail pense bem se é mesmo necessário
> fazê-lo: O meio ambiente é de todos.
>
>
> -----Inline Attachment Follows-----
>
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org <http://mc/compose?to=Portugal@lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/portugal
>
>
>
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/portugal
>
>
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: http://lists.osgeo.org/pipermail/portugal/attachments/20101210/cb73a8cb/attachment.html


More information about the Portugal mailing list