[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