On Miércoles 13 Abril 2011 14:40:19 Oscar Fonts escribió:
> Iván, mira a ver si puedes aprovechar algo y me dices.

A ver si puedo hacer algo con mi propio script en python para parsear los 
.cat... y aprender GIT a marchas forzadas.

-- 
----------------------------------
Iván Sánchez Ortega <[email protected]> <[email protected]>

http://ivan.sanchezortega.es
MSN:[email protected]
Jabber:[email protected] ; [email protected]
IRC: ivansanchez @ OFTC & freenode
# -*- coding: utf-8 -*-

# Parser para ficheros CAT de Catastro
# Básicamente es la especificación de los campos, metida a capón para extraer subcadenas del fichero .cat
# @author <[email protected]>



filename = "Catastro_SantaEugeniaDeBerga/Urbana/08_246_U_2011-01-30.CAT"

# Itera sobre las líneas del fichero
for line in open(filename,'r'):
	
	tipoRegistro = int(line[0:2])
	
	if tipoRegistro == 1:
		
		entidadGeneradoraTipo    = line[2:2+1]	# Siempre "G" de Gerencia
		entidadGeneradoraCodigo  = line[3:3+9]
		entidadGeneradoraNombre  = line[12:12+27]
		
		# FIXME: parsear correctamente fecha y hora
		ficheroFechaGeneracion   = line[39:39+8] # YYYYMMDD
		ficheroHoraGeneracion    = line[47:47+6] # HHMMSS
		ficheroTipo              = line[53:53+4] # CCAT (Información de fincas de Catastro)
		ficheroDescripcion       = line[57:57+39]
		ficheroNombre            = line[96:96+21] 
		ficheroEntidadDestinaria = line[117:117+3] # Código 
		 
		print "Cabecera:"
		print " Entidad generadora: %s - %s - %s" % (entidadGeneradoraTipo, entidadGeneradoraCodigo, entidadGeneradoraNombre)
		print " Info fichero: %s - %s - %s - %s - %s - %s" % (ficheroFechaGeneracion, ficheroHoraGeneracion, ficheroTipo, ficheroDescripcion, ficheroNombre, ficheroEntidadDestinaria)
		print
	
	elif tipoRegistro == 11:
		
		idDelegacionMEH              = int(line[23:23+2] )
		idMunicipio                  = int(line[25:25+3] ) # Según DGC
		idParcela                    =     line[30:30+14]
		
		domicilioProvinciaCodigo     = int(line[50:50+2])
		domicilioProvinciaNombre     =     line[52:52+25]
		domicilioMunicipioCodigoDGC  = int(line[77:77+3]) # Según DGC
		domicilioMunicipioCodigoINE  = int(line[80:80+3]) # Según INE, sin dígito de control
		domicilioMunicipioNombre     =     line[83:83+40]
		domicilioEntidadMenor        =     line[123:123+30]
		domicilioViaCodigo           = int(line[153:153+5]) # Según DGC, se usa para cruzarlo con shape de ejes y de parcelas
		domicilioViaTipo             =     line[158:158+5]
		domicilioViaNombre           =     line[163:163+25]
		domicilioNumeroPolicia1      = int(line[188:188+4]) # Se usa para cruzarlo con el shape de parcelas
		domicilioNumeroPolicia1Letra =     line[192:192+1] # a, b, c, etc, como en 12a, 12b, 12c. Se usa para cruzarlo con el shape de parcelas
		domicilioNumeroPolicia2      = int(line[193:193+4])
		domicilioNumeroPolicia2Letra =     line[197:197+1]
		domicilioKilometro           = int(line[198:198+5]) / 100.0 # tres enteros, dos decimales
		domicilioBloque              =     line[203:203+4]
		domicilioDirNoEstructurada   =     line[215:215+25]
		domicilioCodigoPostal        = int(line[240:240+5])
		domicilioDistrito            =     line[245:245+2]
		domicilioMunicipioAgregado   = int(line[247:247+3]) # Código de municipio origen en agregaciones
		domicilioZonaConcentracion   =     line[250:250+2]
		domicilioPoligono            =     line[252:252+3]
		domicilioParcela             =     line[255:255+5]
		domicilioParajeCodigo        =     line[260:260+5]
		domicilioParajeNombre        =     line[265:265+30]
		
		fisicoSuperficieFinca        = int(line[295:295+10]) # En metros cuadrados
		fisicoSuperficieConstruida   = int(line[305:305+7] ) # En metros cuadrados
		fisicoSuperficieSobreRasante = int(line[312:312+7] ) # En metros cuadrados
		fisicoSuperficieBajoRasante  = int(line[319:319+7] ) # En metros cuadrados
		fisicoSuperficieCubierta     = int(line[326:326+7] ) # En metros cuadrados
		fisicoCoordenadaX            = int(line[333:333+9] ) / 100.0 # UTM, dos decimales sin separador
		fisicoCoordenadaY            = int(line[342:342+10]) / 100.0 # UTM, dos decimales sin separador
		
		biceReferencia               = line[581:581+20]
		biceDenominacion             = line[601:601+65]
		
		fisicoCoordenadaEPSG         = line[666:666+10]
		
		print "Finca"
		print " ID %s - %s - %s" % (idDelegacionMEH, idMunicipio, idParcela)
		print " Provincia/municipio: %s - %s - %s - %s - %s - %s" % (domicilioProvinciaCodigo, domicilioProvinciaNombre, domicilioMunicipioCodigoDGC, domicilioMunicipioCodigoINE, domicilioMunicipioNombre, domicilioEntidadMenor)
		print " Via/número policía: %s - %s - %s - %s - %s - %s - %s - %s - %s" % (domicilioViaCodigo, domicilioViaTipo, domicilioViaNombre, domicilioNumeroPolicia1, domicilioNumeroPolicia1Letra, domicilioNumeroPolicia2, domicilioNumeroPolicia2Letra, domicilioKilometro, domicilioBloque)
		print " CP/distrito/etc: %s - %s - %s - %s - %s" % (domicilioDirNoEstructurada, domicilioCodigoPostal, domicilioDistrito, domicilioMunicipioAgregado, domicilioZonaConcentracion )
		print " Poligono/Parcela/Paraje: %s - %s - %s - %s" % (domicilioPoligono, domicilioParcela, domicilioParajeCodigo, domicilioParajeNombre)
		print " Superficie: %s - %s - %s - %s - %s" % (fisicoSuperficieFinca, fisicoSuperficieConstruida, fisicoSuperficieSobreRasante, fisicoSuperficieBajoRasante, fisicoSuperficieCubierta)
		print " Coordenadas: %s,%s @ %s" % (fisicoCoordenadaX, fisicoCoordenadaY, fisicoCoordenadaEPSG)
		
	#print line
	#print "---"
	
	
	
    

_______________________________________________
Spanish mailing list
http://lists.osgeo.org/mailman/listinfo/spanish
http://es.osgeo.org
http://twitter.com/osgeoes

Responder a