Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 def has_time(self, time):
     self.has(properties.time(), QTime.fromString(time, self.display_format()))
Exemplo n.º 4
0
    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}
Exemplo n.º 5
0
 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'))
Exemplo n.º 6
0
 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'))