#Nombre del proyecto: Generar reporte de viaje del servicio Sub-urbano Asunción-Ypacarai del FCPPCAL y crear capa de ubicación final en un tiempo indicado #Por: Sergio Spiridonoff Reyes #Profesor: Óscar Martínez #Capa: FCPPCAL_servicio_suburbano.shp #EPSG: 32721 (WGS84/UTM Zona21S) #País: República del Paraguay #FCPPCAL: Ferrocarril Central del Paraguay Presidente Carlos Antonio López #Para modificar nombres de archivos y rutas: #Para el TXT -> ir a la línea de código 62 #Para el SHP -> ir a la línea de código 533 from gvsig import * from geom import * from commonsdialog import * import time import math def main(): layer = currentLayer() features = layer.features() if features == None: return msgbox(u"Calcularemos la posición final del tren suburbano\nen un tiempo t[hh:mm] luego de partir de la 1ra. estación", "Bienvenido!!",1) pp = confirmDialog(u"Datos a introducir:\n1) v(máxima)[km/h]\n2) a(+)[m/s^2]\n3) a(-)[m/s^2]\n4) t(tiempo de interés)[hh:mm]\n\n¿Desea continuar?","TREN SUBURBANO", 0, 3) if pp == 1: # opcion no return vCtekmh="" while (vCtekmh=="" or vCtekmh==None): vCtekmh = inputbox(u"Introduce:\nVelocidad máxima deceada\n\nv(máxima)[km/h]","TREN SUBURBANO (1/4)",3) a1="" while (a1=="" or a1==None): a1 = inputbox(u"Introduce:\nAceleración para aumentar velocidad\n\na(+)[m/s^2]","TREN SUBURBANO (2/4)",3) a3="" while (a3=="" or a3==None): a3 = inputbox(u"Introduce:\nAceleración para disminuir velocidad\n\nDigítelo con signo (-)\n\na(-)[m/s^2]","TREN SUBURBANO (3/4)",3) msgbox(u"El tiempo cuando el tren inicia el movimiento es\n\nt=0 ", "ACLARACION",1) msgbox(u"Al introducir el tiempo de interés no olvides\ndigitar ':' para separar los minutos de las horas\n\nhh:mm ", "ACLARACION",1) tTotalhm="" while (tTotalhm=="" or tTotalhm==None): tTotalhm = inputbox(u"Introduce:\nTiempo de interés\n\nt[hh:mm]","TREN SUBURBANO (4/4)",3) hh = tTotalhm.split(":")[0] mm = tTotalhm.split(":")[1] msgbox(u"Se generará un archivo txt y una capa shp de punto\n\nPor: Sergio Spiridonoff Reyes\nProfesor: Óscar Martínez", "TREN SUBURBANO",1) t = 0.00 #tiempo inicial perimetroTotal = 0.00 for f in features: perimetroTramo = f.geometry().perimeter() #Accede a las geometrías del tramo y calcula su perimetro perimetroTotal = perimetroTotal + perimetroTramo print "\nDATOS INTRODUCIDOS:" print "..Velocidad maxima:",vCtekmh,"[km/h]" print "..Aceleracion para aumentar velocidad:",a1,"[m/s^2]" print "..Aceleracion para disminuir velocidad:",a3,"[m/s^2]" print "..Tiempo de interes:",hh,"[hs]",mm,"[min]" print "\nLongitud total de la via ferrea:",perimetroTotal,"[m]" print "Tiempo inicial:",t,"[min]" #RUTA DONDE SE GUARDARÁ EL INFORME (en formato txt) f = open('C:/Sergio/Reporte_TREN.txt', 'w') ### ### ### ### ### ### ### ### ### ### print "Informe: ",f,"\n" fyh = 'Informe generado en fecha '+str((time.strftime("%d/%m/%y")))+' y hora '+str(time.strftime("%H:%M:%S"))+'\n\n' f.write(fyh) #escribe en el archivo txt tsu = 'TREN SUBURBANO\n' f.write(tsu) proyecto = currentProject() proyectoo = 'Proyecto: '+str(proyecto)+'\n\n' f.write(proyectoo) dd = 'DATOS INTRODUCIDOS:\n' f.write(dd) d1 = '-> Velocidad máxima: '+str(vCtekmh)+'[km/h]\n' f.write(d1) d2 = '-> Aceleración para aumentar velocidad: '+str(a1)+'[m/s^2]\n' f.write(d2) d3 = '-> Aceleración para disminuir velocidad: '+str(a3)+'[m/s^2]\n' f.write(d3) d4 = '-> Tiempo de interés: '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(d4) lTv = 'Longitud total de la vía férrea: '+str(perimetroTotal)+'[m]\n' f.write(lTv) t0 = 'Tiempo inicial: '+str(t)+'[min]\n\n' f.write(t0) vCtekmh = float(vCtekmh) vCte = vCtekmh*5/18 # km/h -> m/s a1 = float(a1) #m/s^2 a3 = float(a3) #m/s^2 hhh = float(hh) mmm = float(mm) tTotal = hhh*3600+mmm*60 # hh:mm -> s vistas = proyecto.getViews() #Acceso a vistas output = crearShape() #Crea nuevo shapefile sumaLtramos = 0.00 Lsuma = 0.00 ite = 0 for feature in features: #Recorre los tramos L1m = calcularLm(vCte,a1) #SUPOSICIÓN: Longitud del tramo necesario para acelerar completamente L3m = -1*calcularLm(vCte,a3) #SUPOSICIÓN: Longitud del tramo necesario para frenar completamente tminParada = feature.t_sig_min_ #Tiempo de parada [min] tsegParada = tminParada*60 # min -> s geom = feature.geometry() #Accede a las geometrías del tramo vertices = geom.getNumVertices() #Número de vértices del tramo L = geom.perimeter() #Longitud del tramo sumaLtramos = sumaLtramos + L print "La longitud del tramo entre las estaciones",feature.Estac_ant,"y",feature.Estac_sig,"es de",L,"[m]" lt = u'La longitud del tramo entre las estaciones '+str(feature.Estac_ant)+' y '+str(feature.Estac_sig)+' es de '+str(L)+'[m]\n' f.write(lt) if L > L1m + L3m: #CASO 1 print "..es suficiente para alcanzar",vCtekmh,"[km/h], mantenerlo por un tiempo y luego frenar completamente" c1 = '..es suficiente para alcanzar ' +str(vCtekmh)+'[km/h], mantenerlo por un tiempo y luego frenar completamente\n' f.write(c1) L2 = L-L1m-L3m #SUPOSICIÓN: Longitud del tramo por donde el tren avanza a velocidad constante t1 = vCte/a1 #SUPOSICIÓN: Tiempo necesario para acelerar completamente t2 = L2/vCte #SUPOSICIÓN: Tiempo necesario para recorrer el tramo donde su velocidad es constante t3 = -1*vCte/a3 #SUPOSICIÓN: Tiempo necesario para frenar completamente t = t+t1 #SUPOSICIÓN: Tiempo justo en el momento en que termina de acelerar if t > tTotal: #CASO 1.1 t = t-t1 t1f = tTotal-t #Tiempo desde que comienza a acelerar hasta el tiempo de interés Lfin = calcularLx1(a1,t1f) #Longitud desde la estación pasada vFinal = a1*t1f #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] su velocidad es de",vFinalkmh,"[km/h] y esta acelerando" c11 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] su velocidad es de '+str(vFinalkmh)+'[km/h] y está acelerando\n' f.write(c11) #escribe en el archivo txt parteFinal(output,ite,geom,vertices,Lfin,L) #Se añade la capa creada a la vista activa" cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: #Muestra nombre de vistas, nombre de capas, tipo de capas y número de entidades vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return elif t == tTotal: #CASO 1.2 Lfin = L1m vFinal = vCte vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] deja de acelerar y su velocidad es de",vFinalkmh,"[km/h]" c12 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] deja de acelerar y su velocidad es de '+str(vFinalkmh)+'[km/h]\n' f.write(c12) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 1.3: Luego de dejar de acelerar t = t+t2 #SUPOSICIÓN: Tiempo justo en el momento en que comienza a frenar if t > tTotal: #CASO 1.3.1 t = t-t2 t2f = tTotal-t Lfin = L1m + vCte*t2f vFinal = vCte #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] avanza con una velocidad constante de",vFinalkmh,"[km/h]" c131 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] avanza con una velocidad constante de '+str(vFinalkmh)+'[km/h]\n' f.write(c131) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return elif t == tTotal: #CASO 1.3.2 Lfin = L1m + L2 vFinal = vCte #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] su velocidad es de",vFinalkmh,"[km/h] y comienza a frenar" c132 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] su velocidad es de '+str(vFinalkmh)+'[km/h] y comienza a frenar\n' f.write(c132) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 1.3.3: Frena t = t+t3 #SUPOSICIÓN: Tiempo justo en el momento en que termina de frenar completamente if t > tTotal: #CASO 1.3.3.1 t = t-t3 t3f = tTotal-t Lfin = L1m + L2 + calcularLx3(a3,t3f,vCte) vFinal = vCte + a3*t3f #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] su velocidad es de",vFinalkmh,"[km/h] y esta frenando" c1331 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] su velocidad es de '+str(vFinalkmh)+'[km/h] y está frenando\n' f.write(c1331) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return elif t == tTotal: #CASO 1.3.3.2 Lfin = L vFinal = 0 #Velocidad en tTotal print "En el instante",hh,"[h]",mm,"[min] termina de frenar completamente en la estacion",feature.Estac_sig c1332 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] termina de frenar completamente en la estación '+str(feature.Estac_sig)+'\n' f.write(c1332) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 1.3.3.3: Luego de frenar completamente no se ha alcanzado todavía tTotal print "Llega a la estacion",feature.Estac_sig,"en el instante",tiempohh(t),"[h]",tiempomm(t),"[min]" c1333 = 'Llega a la estación '+str(feature.Estac_sig)+' en el instante '+str(tiempohh(t))+'[h] '+str(tiempomm(t))+'[min]\n' f.write(c1333) t = t + tsegParada #SUPOSICIÓN: Tiempo justo en el momento en que comienza a acelerar nuevamente Lfin = L if t >= tTotal: #CASO 1.3.3.3.1 vFinal = 0 #Velocidad en tTotal print "En el instante",hh,"[h]",mm,"[min] se encuentra parado en la estacion",feature.Estac_sig c13331 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] se encuentra parado en la estación '+str(feature.Estac_sig)+'\n' f.write(c13331) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 1.3.3.3.2 if sumaLtramos == perimetroTotal: #CASO 1.3.3.3.2.1 print "ESTA ES LA ULTIMA ESTACION" c133321 = 'ESTA ES LA ÚLTIMA ESTACIÓN\n' f.write(c133321) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 1.3.3.3.2.2 print "Tiempo de parada:",feature.t_sig_min_,"[min]" print "En el instante",tiempohh(t),"[h]",tiempomm(t),"[min] parte de la estacion",feature.Estac_sig,"\n" c133322a = 'Tiempo de parada: '+str(feature.t_sig_min_)+'[min]\n' f.write(c133322a) c133322b = 'En el instante '+str(tiempohh(t))+'[h] '+str(tiempomm(t))+'[min] parte de la estación '+str(feature.Estac_sig)+'\n\n' f.write(c133322b) #EL BUCLE DEBE CONTINUAR else: #CASO 2 ##L <= L1m + L3m## print "..no es suficiente para mantener una velocidad constante de",vCtekmh,"[km/h] durante el tramo" c2 = '..no es suficiente para mantener una velocidad constante de '+str(vCtekmh)+'[km/h] durante el tramo\n' f.write(c2) t3 = calculartx3(a1,a3,L) t1 = -1*a3*t3/a1 t = t+t1 #SUPOSICIÓN: Tiempo justo en el momento en que termina de acelerar if t > tTotal: #CASO 2.1 t = t-t1 t1f = tTotal-t #Tiempo desde que comienza a acelerar hasta el tiempo de interés Lfin = calcularLx1(a1,t1f) #Longitud desde la estación pasada vFinal = a1*t1f #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] su velocidad es de",vFinalkmh,"[km/h] y esta acelerando" c21 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] su velocidad es de '+str(vFinalkmh)+'[km/h] y está acelerando\n' f.write(c21) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return elif t == tTotal: #CASO 2.2 Lfin = calcularLx1(a1,t1) vFinal = a1*t1 #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] deja de acelerar y su velocidad es de",vFinalkmh,"[km/h]" c22 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] deja de acelerar y su velocidad es de '+str(vFinalkmh)+'[km/h]\n' f.write(c22) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 2.3: Frena t = t+t3 L1 = calcularLx1(a1,t1) if t > tTotal: #CASO 2.3.1 t = t-t3 t3f = tTotal-t vMax = a1*t1 Lfin = L1 + calcularLx3(a3,t3f,vMax) vFinal = vMax + a3*t3f #Velocidad en tTotal vFinalkmh = vFinal*18/5 # m/s -> km/h print "En el instante",hh,"[h]",mm,"[min] su velocidad es de",vFinalkmh,"[km/h] y esta frenando" c231 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] su velocidad es de '+str(vFinalkmh)+'[km/h] y está frenando\n' f.write(c231) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return elif t == tTotal: #CASO 2.3.2 Lfin = L vFinal = 0 #Velocidad en tTotal print "En el instante",hh,"[h]",mm,"[min] termina de frenar completamente en la estacion",feature.Estac_sig c232 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] termina de frenar completamente en la estación '+str(feature.Estac_sig)+'\n' f.write(c232) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 2.3.3: Luego de frenar completamente no se ha alcanzado todavía tTotal print "Llega a la estacion",feature.Estac_sig,"en el instante",tiempohh(t),"[h]",tiempomm(t),"[min]" c1333 = 'Llega a la estación '+str(feature.Estac_sig)+' en el instante '+str(tiempohh(t))+'[h] '+str(tiempomm(t))+'[min]\n' f.write(c1333) t = t + tsegParada #SUPOSICIÓN: Tiempo justo en el momento en que comienza a acelerar nuevamente Lfin = L if t >= tTotal: #CASO 2.3.3.1 vFinal = 0 #Velocidad en tTotal print "En el instante",hh,"[h]",mm,"[min] se encuentra parado en la estacion",feature.Estac_sig c2331 = 'En el instante '+str(hh)+'[h] '+str(mm)+'[min] se encuentra parado en la estación '+str(feature.Estac_sig)+'\n' f.write(c2331) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 2.3.3.2 if sumaLtramos == perimetroTotal: #CASO 2.3.3.2.1 print "ESTA ES LA ULTIMA ESTACION" c23321 = 'ESTA ES LA ÚLTIMA ESTACIÓN\n' f.write(c23321) parteFinal(output,ite,geom,vertices,Lfin,L) cpn = '\n\nSe ha creado una nueva capa de tipo Point2D con 1 punto que indica la ubicación del tren en el instante '+str(hh)+'[hs] '+str(mm)+'[min]\n\n' f.write(cpn) for vista in vistas: vista = proyecto.getView(vista.name) vista2 = '\n'+str(vista.name)+'\n' f.write(vista2) capas = vista.getLayers() for capa in capas: capaa = '..capa: ' +str(capa.name)+'; tipo: ' +str(capa.getTypeVectorLayer().name)+'; entidades: ' +str(capa.features().getCount())+'\n' f.write(capaa) f.close() return else: #CASO 2.3.3.2.2 print "Tiempo de parada:",feature.t_sig_min_,"[min]" print "En el instante",tiempohh(t),"[h]",tiempomm(t),"[min] parte de la estacion",feature.Estac_sig,"\n" c23322a = 'Tiempo de parada: '+str(feature.t_sig_min_)+'[min]\n' f.write(c23322a) c23322b = 'En el instante '+str(tiempohh(t))+'[h] '+str(tiempomm(t))+'[min] parte de la estación '+str(feature.Estac_sig)+'\n\n' f.write(c23322b) #EL BUCLE DEBE CONTINUAR ite = ite + 1 def parteFinal(output,ite,geom,vertices,Lfin,L): #Crea el punto de ubicación final del tren #Actualiza la capa de punto creada #Retorna "añadir la capa a la vista activa" dSuma = 0.00 for i in range(vertices): lista = creaLista(i,vertices) pto0,pto1,pto2 = asignarVertices(geom,lista) dSuma = dSuma + distancia(pto0,pto1) if dSuma > Lfin: dSuma = dSuma - distancia(pto0,pto1) Lf = Lfin - dSuma #Crear el punto ptoFinal ptoFinal = puntoFinal(pto0,pto1,Lf) crearPunto(ptoFinal,output,ite) if Lfin != L: print "El tren ha avanzado:", Lfin, "[m] desde la ultima estacion" try: output.commit() print "End" except: print "Comprueba: nombre repetido, seleccion" return currentView().addLayer(output) #El bucle continúa def calcularLm(v,a): Lm = pow(v,2)/(2*a) return Lm def calculartx3(a11,a13,L): tx3 = math.sqrt((2*a11*L)/(a13*(a13-a11))) #Frena return tx3 def calcularLx1(a,t): Lx1 = a*pow(t,2)/2 #Acelera return Lx1 def calcularLx3(a,t,v): Lx3 = v*t + a*pow(t,2)/2 #Frena return Lx3 def tiempohh(tseg): thora = tseg/3600 # seg -> h thh = int(thora) # hh return thh def tiempomm(tseg): thora = tseg/3600 # seg -> h trhora = thora-int(thora) tmm = trhora*60 #min return tmm def distancia(pto0,pto1): x0 = pto0.getX() y0 = pto0.getY() x1 = pto1.getX() y1 = pto1.getY() disx = x1 - x0 disy = y1 - y0 dist = math.sqrt(pow(disx,2)+pow(disy,2)) #Distancia return dist def asignarVertices(geom,lista): pto0 = geom.getVertex(lista[0]) pto1 = geom.getVertex(lista[1]) pto2 = geom.getVertex(lista[2]) return pto0,pto1,pto2 def puntoFinal(pto0,pto1,Lf): x0 = pto0.getX() y0 = pto0.getY() x1 = pto1.getX() y1 = pto1.getY() disx = x1 - x0 disy = y1 - y0 Ld = math.sqrt(pow(disx,2)+pow(disy,2)) xF = x0 + disx*Lf/Ld #Coordenada "x" del punto de ubicación final del tren yF = y0 + disy*Lf/Ld #Coordenada "y" del punto de ubicación final del tren ptoFinal = createPoint(xF,yF) #Crea un punto con las coordenadas mencionadas print "Ubicacion del tren: X =",xF,"; Y =",yF return ptoFinal def crearShape(): #RUTA DONDE SE GUARDARÁ LA CAPA DE PUNTO (en formato shp) ruta = "C:/Sergio/Ubicacion_TREN.shp" ### ### ### ### ### ### ### ### ### ### ### CRS = currentLayer().getProjectionCode() schema = createSchema() schema.append("GEOMETRY", "GEOMETRY") schema.append("ID", "INTEGER", size = 10) output = createShape( schema, ruta , CRS = CRS, geometryType=POINT) return output def crearPunto(punto,output,ite): #añade punto a capa y con una ite == ID #la ID es para saber cuántos tramos el tren ya ha dejado atrás values = dict() values["ID"] = ite values["GEOMETRY"] = punto output.append(values) return output def creaLista(ite,vertices): #lista de vértices siguientes puntos = 3 lista = list() for i in range(puntos): i = i + ite if i >= vertices: i = i - vertices lista.append(i) return lista