def setModelData(self, editor, model, index): if not editor.isModified(): return text = editor.text() validator = editor.validator() if validator is not None: state, text, _ = validator.validate(text, 0) if state != QValidator.Acceptable: return originalValue = index.model().data(index, Qt.UserRole) if isinstance(originalValue, QColor): self.colorExp.exactMatch(text) value = QColor(min(int(self.colorExp.cap(1)), 255), min(int(self.colorExp.cap(2)), 255), min(int(self.colorExp.cap(3)), 255), min(int(self.colorExp.cap(4)), 255)) elif isinstance(originalValue, QDate): value = QDate.fromString(text, Qt.ISODate) if not value.isValid(): return elif isinstance(originalValue, QDateTime): value = QDateTime.fromString(text, Qt.ISODate) if not value.isValid(): return elif isinstance(originalValue, QTime): value = QTime.fromString(text, Qt.ISODate) if not value.isValid(): return elif isinstance(originalValue, QPoint): self.pointExp.exactMatch(text) value = QPoint(int(self.pointExp.cap(1)), int(self.pointExp.cap(2))) elif isinstance(originalValue, QRect): self.rectExp.exactMatch(text) value = QRect(int(self.rectExp.cap(1)), int(self.rectExp.cap(2)), int(self.rectExp.cap(3)), int(self.rectExp.cap(4))) elif isinstance(originalValue, QSize): self.sizeExp.exactMatch(text) value = QSize(int(self.sizeExp.cap(1)), int(self.sizeExp.cap(2))) elif isinstance(originalValue, list): value = text.split(',') else: value = type(originalValue)(text) model.setData(index, self.displayText(value), Qt.DisplayRole) model.setData(index, value, Qt.UserRole)
def __init__(self, parent, initial_time, label, on_update=lambda x: x): """ Args: parent: ColorMapWindow instance """ QWidget.__init__(self, parent) self.parent = parent self.on_update = on_update self.label = QLabel(label) self.qt_time = QTime.fromString(initial_time) self.time_edit = QTimeEdit(self.qt_time) self.time_edit.timeChanged.connect(self.update) self.grid = QGridLayout() self.fill_layout() self.setLayout(self.grid)
def has_time(self, time): self.has(properties.time(), QTime.fromString(time, self.display_format()))
def processAlgorithm(self, parameters, context, feedback): """ Here is where the processing itself takes place. """ # Retrieve the feature source and sink. The 'dest_id' variable is used # to uniquely identify the feature sink, and must be included in the # dictionary returned by the processAlgorithm function. rep_GTFS = self.parameterAsFile(parameters, self.REP_GTFS, context) debut_periode=self.parameterAsString(parameters,self.DEBUT_PERIODE,context) fin_periode=self.parameterAsString(parameters,self.FIN_PERIODE,context) t1=self.parameterAsString(parameters,self.T1,context) t2=self.parameterAsString(parameters,self.T2,context) prefixe=self.parameterAsString(parameters,self.PREFIXE,context) proj=self.parameterAsCrs(parameters,self.PROJ,context) rep_sortie = self.parameterAsFile(parameters, self.REP_SORTIE, context) encodage = self.parameterAsString(parameters, self.ENCODAGE, context) debut_periode=QDate.fromString(debut_periode, "d/M/yyyy").toPyDate() fin_periode=QDate.fromString(fin_periode, "d/M/yyyy").toPyDate() t1=QTime.fromString(t1,"h:m:s") t2=QTime.fromString(t2,"h:m:s") nom_rep=rep_GTFS lname=prefixe isnodes=True islines=True if "stops.txt" in os.listdir(nom_rep) : fich_noeuds=io.open(nom_rep+"/stops.txt","r",encoding=encodage) t_noeuds=QgsFields() t_noeuds.append(QgsField(self.tr("ident"),QVariant.String,len=15)) t_noeuds.append(QgsField(self.tr("name"),QVariant.String,len=40)) t_noeuds.append(QgsField(self.tr("arrivals"),QVariant.Double)) t_noeuds.append(QgsField(self.tr("departures"),QVariant.Double)) t_links=QgsFields() t_links.append(QgsField(self.tr("line_num"),QVariant.String,len=15)) t_links.append(QgsField(self.tr("ligne_name"),QVariant.String,len=50)) t_links.append(QgsField("i",QVariant.String,len=15)) t_links.append(QgsField("j",QVariant.String,len=15)) t_links.append(QgsField(self.tr("lines_count"),QVariant.Int)) t_links.append(QgsField(self.tr("services_count"),QVariant.Int)) t_links.append(QgsField("delta1",QVariant.Int)) t_links.append(QgsField("delta2",QVariant.Int)) src=QgsCoordinateReferenceSystem("EPSG:4326") dest=QgsCoordinateReferenceSystem(proj) xtr=QgsCoordinateTransform(src,dest,QgsProject.instance()) t_arcs=QgsFields() t_arcs.append(QgsField("i",QVariant.String,len=15)) t_arcs.append(QgsField("j",QVariant.String,len=15)) t_arcs.append(QgsField("ij",QVariant.String,len=40)) l_noeuds=QgsVectorFileWriter(rep_sortie+"/"+lname+"_stops.shp","UTF-8",t_noeuds,QgsWkbTypes.Point,dest,"ESRI Shapefile") l_arcs=QgsVectorFileWriter(rep_sortie+"/"+lname+"_arcs.shp","UTF-8",t_arcs,QgsWkbTypes.MultiLineString,dest,"ESRI Shapefile") l_links=QgsVectorFileWriter(rep_sortie+"/"+lname+"_lines.shp","UTF-8",t_links,QgsWkbTypes.MultiLineString,dest,"ESRI Shapefile") arrets={} feedback.setProgressText("Lecture des stops") for i,ligne in enumerate(fich_noeuds): if i==0: entete=re.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)",ligne[:-1]) for e1,e in enumerate(entete): entete[e1]=entete[e1].strip("\"") idx=entete.index('stop_lon') idy=entete.index('stop_lat') iid=entete.index('stop_id') iname=entete.index('stop_name') else: elements=re.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)",ligne[:-1]) arrets[elements[iid]]=[elements[iid],elements[iname].strip("\""),elements[idx].strip("\""),elements[idy].strip("\""),0.0,0.0] calendar={} if ("calendar.txt" in os.listdir(nom_rep)): fich_calendar=io.open(nom_rep+"/calendar.txt","r",encoding=encodage) feedback.setProgressText(self.tr("Reading calendars...")) for i,cal in enumerate(fich_calendar): if i==0: entete=cal.strip().split(',') iid=entete.index('service_id') idato=entete.index('start_date') idatd=entete.index('end_date') i1=entete.index('monday') i2=entete.index('tuesday') i3=entete.index('wednesday') i4=entete.index('thursday') i5=entete.index('friday') i6=entete.index('saturday') i7=entete.index('sunday') else: elements=cal.strip().split(",") dato=elements[idato] dato=datetime.date(int(dato[0:4]),int(dato[4:6]),int(dato[6:8])) datd=elements[idatd] datd=datetime.date(int(datd[0:4]),int(datd[4:6]),int(datd[6:8])) calendar[elements[iid]]=[elements[iid],dato,datd,elements[i1],elements[i2],elements [i3],elements[i4],elements[i5],elements[i6],elements[i7]] calendar_dates={} calendar_dates2={} if ("calendar_dates.txt" in os.listdir(nom_rep)): fich_calendar_dates=io.open(nom_rep+"/calendar_dates.txt","r",encoding=encodage) feedback.setProgressText(self.tr("reading calendar dates...")) for i,calendar_date in enumerate(fich_calendar_dates): if i==0: entete=calendar_date.strip().split(',') for i1,i2 in enumerate(entete): entete[i1]=i2.strip('"') iid=entete.index('service_id') idate=entete.index('date') iex=entete.index('exception_type') else: elements=calendar_date.strip().split(",") vdate=elements[idate].strip('"') vdate=datetime.date(int(vdate[0:4]),int(vdate[4:6]),int(vdate[6:8])) calendar_dates[(elements[iid],vdate,elements[iex])]=[elements[iid],vdate,elements[iex]] if elements[iex]=="1": if elements[iid] not in calendar_dates2: calendar_dates2[elements[iid]]=[] calendar_dates2[elements[iid]].append([elements[iid],vdate]) routes={} test_l=int(("routes.txt" in os.listdir(nom_rep))*("trips.txt" in os.listdir(nom_rep))* ("stop_times.txt" in os.listdir(nom_rep))) if test_l==1 and islines: fich_routes=io.open(nom_rep+"/routes.txt","r",encoding=encodage) feedback.setProgressText(self.tr("Reading routes...")) for i,route in enumerate(fich_routes): if i==0: entete=route.strip().split(',') for i1,i2 in enumerate(entete): entete[i1]=i2.strip('"') iid=entete.index('route_id') if 'route_short_name' not in entete: iname=entete.index('route_long_name') else: iname=entete.index('route_short_name') if 'route_long_name' not in entete: ilong=entete.index('route_desc') else: ilong=entete.index('route_long_name') else: elements=route.strip().split(",") if elements[iname]=="": elements[iname]=u' ' if elements[ilong]=="": elements[ilong]=u' ' routes[elements[iid]]=[elements[iid],elements[iname],elements[ilong]] trips={} fich_trips=io.open(nom_rep+"/trips.txt","r",encoding=encodage) feedback.setProgressText(self.tr("Reading trips...")) for i,trip in enumerate(fich_trips): if i==0: entete=trip.strip(" ").split(',') for i1,i2 in enumerate(entete): entete[i1]=i2.strip('"') entete[i1]=i2.strip('\n').strip('\r') iid=entete.index('route_id') itrip=entete.index('trip_id') iservice=entete.index('service_id') if 'shape_id' in entete: ishape=entete.index('shape_id') else: elements=trip.strip(" ").strip('\n').strip('\r').split(",") trips[elements[itrip]]=[elements[itrip],elements[iid],elements[iservice]] stop_times={} fich_stop_times=io.open(nom_rep+"/stop_times.txt","r",encoding=encodage) id_trip=None id_stop=None hi2=None segments={} links={} feedback.setProgressText(self.tr("Reading stop times...")) nb=float(os.stat(nom_rep+"/stop_times.txt").st_size) for i,stop_time in enumerate(fich_stop_times): if i==0: entete=stop_time.strip().split(",") iid=entete.index('trip_id') iharr=entete.index('arrival_time') ihdep=entete.index('departure_time') istop=entete.index('stop_id') iseq=entete.index('stop_sequence') else: #progress.setPercentage(float(fich_stop_times.tell())*100/nb) elements=stop_time.strip().split(',') #print((istop,iid,elements[istop],elements[iid])) if elements[istop] in arrets and trips[elements[iid]][1] in routes: id_stop2=elements[istop] id_trip2=elements[iid] ligne=trips[elements[iid]][1] num_ligne=routes[ligne][1].strip() descr=routes[ligne][2].strip() hi1=QTime(int(elements[ihdep][0:2]),int(elements[ihdep][3:5]),int(elements[ihdep][6:8])) hj=QTime(int(elements[iharr][0:2]),int(elements[iharr][3:5]),int(elements[iharr][6:8])) if (id_trip2==id_trip): nbservices=0 nbs1=0 nbs2=0 if ("calendar.txt" in os.listdir(nom_rep)): if trips[elements[iid]][2] in calendar: dp=calendar[trips[elements[iid]][2]][1] fp=calendar[trips[elements[iid]][2]][2] nb_jours=(fin_periode-debut_periode).days for k in range(nb_jours+1): date_offre=debut_periode+datetime.timedelta(days=k) if dp<=date_offre<=fp: jour=date_offre.isoweekday() if int(calendar[trips[id_trip][2]][2+jour])==1: nbservices+=1 if (trips[id_trip][2],date_offre,'1') in calendar_dates: nbservices+=1 if (trips[id_trip][2],date_offre,'2') in calendar_dates: nbservices+=-1 elif trips[elements[iid]][2] in calendar_dates2: for k in calendar_dates2[trips[elements[iid]][2]]: nbservices+=1 segment_id=(num_ligne, id_stop,id_stop2) if (t1<=hi2<=t2): nbs1=nbservices if (t1<=hj<=t2): nbs2=nbservices if (id_stop,id_stop2) not in links: links[(id_stop,id_stop2)]={} if num_ligne not in links[(id_stop,id_stop2)]: links[(id_stop,id_stop2)][num_ligne]=(1,nbs1,descr) else: seg= links[(id_stop,id_stop2)][num_ligne] links[(id_stop,id_stop2)][num_ligne]=(1,seg[1]+nbs1,descr) arrets[id_stop][5]+=nbs1 arrets[id_stop2][4]+=nbs2 hi2=hi1 id_stop=id_stop2 id_trip=id_trip2 feedback.setProgressText(self.tr("Generating arcs and lines...")) for i,s in enumerate(links): i1=0 i2=0 g_links=QgsFeature() g_arcs=QgsFeature() #print([unicode(s[0]),unicode(s[1]),unicode(s[0])+"-"+unicode(s[1])]) g_links.setGeometry(QgsGeometry.fromPolylineXY([(xtr.transform(QgsPointXY(float(arrets[s[0]][2]),float(arrets[s[0]][3])))),xtr.transform(QgsPointXY(float(arrets[s[1]][2]),float(arrets[s[1]][3])))])) g_arcs.setAttributes([unicode(s[0]),unicode(s[1]),unicode(s[0])+"-"+unicode(s[1])]) g_arcs.setGeometry(g_links.geometry()) if g_arcs.geometry().length()<1600000: l_arcs.addFeature(g_arcs) for t in links[s]: if t=="" or t==None: tt= " " else: tt=t #print([tt.decode("cp1252"),links[s][t][2].decode("cp1252"),unicode(s[0]),unicode(s[1]),links[s][t][0],links[s][t][1],i1,i2]) try: g_links.setAttributes([unicode(t),unicode(links[s][t][2]),unicode(s[0]),unicode(s[1]),links[s][t][0],links[s][t][1],i1,i2]) except: print(t,links[s][t][2]) i1+=1 i2+=links[s][t][1] if g_links.geometry().length()<1600000: l_links.addFeature(g_links) del(stop_times) del(trips) del(routes) del(calendar) del(calendar_dates) if (isnodes): for s in arrets: g_noeuds=QgsFeature() g_noeuds.setGeometry(QgsGeometry.fromPointXY(xtr.transform(QgsPointXY(float(arrets[s][2]),float(arrets[s][3]))))) #print([unicode(arrets[s][0]),arrets[s][1].decode('cp1252'),arrets[s][4],arrets[s][5]]) try: g_noeuds.setAttributes([unicode(arrets[s][0]),unicode(arrets[s][1]),arrets[s][4],arrets[s][5]]) except: print(arrets[s][1]) l_noeuds.addFeature(g_noeuds) del(arrets) del(l_noeuds) del(l_links) del(l_arcs) return {self.REP_GTFS: self.REP_GTFS}
def setMinimum(self, val: str = None) -> None: if val is None: self.timeedit.setMinimumTime(QTime(0, 0)) else: self.timeedit.setMinimumTime(QTime.fromString(val, 'hh:mm:ss.zzz'))
def setRange(self, minval: str, maxval: str) -> None: self.timeedit.setTimeRange(QTime.fromString(minval, 'hh:mm:ss.zzz'), QTime.fromString(maxval, 'hh:mm:ss.zzz'))