Exemplo n.º 1
0
 def __init__(self,
              project,
              modus='zu Fuß',
              connector=None,
              steps=1,
              cutoff=10,
              parent=None):
     '''
     Parameters
     ----------
     project : Poject
         the project
     modus : str, optional
         (german) name of the traffic mode ('Auto', 'Fahrrad' or 'zu Fuß'),
         defaults to 'zu Fuß' (walking)
     connector : Feature, optional
         the traffic connector to route from, defaults to the center of the
         project areas
     steps : int, optional
         the number of equal isochrones (equal in time), defaults to one
         isochrone
     cutoff : int, optional
         the maximum cutoff time of the outer isochrone, defaults to ten
         minutes
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     '''
     super().__init__(parent=parent)
     self.isochronen = Isochronen.features(project=project)
     self.project_frame = Projektrahmendaten.features(project=project)[0]
     self.cutoff_sec = cutoff * 60
     self.n_steps = steps
     self.modus = modus
     self.connector = connector
Exemplo n.º 2
0
    def load_content(self):
        super().load_content()
        self.project_frame = Projektrahmendaten.features(
            project=self.project)[0]
        self.gemeinden = Gemeindebilanzen.features(create=True)
        if len(self.gemeinden) == 0:
            self.init_gemeinden()

        self.migration_ew.load_content()
        self.migration_svb.load_content()
        self.grundsteuer.load_content()
        self.gewerbesteuer.load_content()
Exemplo n.º 3
0
 def __init__(self, project, parent=None):
     '''
     Parameters
     ----------
     project : Poject
         the project
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     '''
     super().__init__(parent=parent)
     self.project = project
     self.bilanzen = Gemeindebilanzen.features(project=project)
     self.project_frame = Projektrahmendaten.features(project=project)[0]
Exemplo n.º 4
0
 def __init__(self, project, radius=1, parent=None):
     '''
     Parameters
     ----------
     project : Project
         the project
     radius : int, optional
         the radius in km around the project areas to query locations in
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     '''
     super().__init__(parent=parent)
     self.einrichtungen = Einrichtungen.features(project=project)
     self.project_frame = Projektrahmendaten.features(project=project)[0]
     self.radius = radius
Exemplo n.º 5
0
    def load_content(self):
        self.project_frame = Projektrahmendaten.features(
            project=self.project)[0]
        self.gemeinden = Gemeindebilanzen.features(project=self.project)
        self.grst_settings = GrundsteuerSettings.features(create=True)
        if len(self.grst_settings) == 0:
            self.init_grst_base_settings()
        self.grst_settings = self.grst_settings[0]
        self.areas = Teilflaechen.features(project=self.project)
        self.ew_wanderung = EinwohnerWanderung.features()
        self.svb_wanderung = BeschaeftigtenWanderung.features()

        self.setup_hebesatz()
        self.setup_rohmiete()
        self.setup_sachwert()
        self.setup_bauvolumen()
Exemplo n.º 6
0
 def __init__(self, project, parent=None):
     '''
     Parameters
     ----------
     project : Poject
         the project
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     '''
     super().__init__(parent=parent)
     self.project = project
     self.areas = Teilflaechen.features(project=project)
     self.gemeinden = Gemeindebilanzen.features(project=project)
     self.zensus_layer = QgsVectorLayer(f'{self.gemeinden.workspace.path}'
                                        '|layername=zensus_rings')
     self.project_frame = Projektrahmendaten.features()[0]
Exemplo n.º 7
0
 def __init__(self, project, parent=None):
     '''
     Parameters
     ----------
     project : Poject
         the project
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     '''
     super().__init__(parent=parent)
     self.project = project
     self.bilanzen = Gemeindebilanzen.features(project=project)
     self.wanderung = BeschaeftigtenWanderung.features(project=project)
     self.project_frame = Projektrahmendaten.features(project=project)[0]
     self.areas = Teilflaechen.features(project=project)
     self.gewerbe_anteile = Gewerbeanteile.features(project=project)
     self.verkaufsflaechen = Verkaufsflaechen.features(project=project)
Exemplo n.º 8
0
 def __init__(self, project, date=None, parent=None):
     '''
     Parameters
     ----------
     project : Poject
         the project
     parent : QObject, optional
         parent object of thread, defaults to no parent (global)
     date : datetime.date, optional
         date to scrape number of departures for, defaults to next working
         day
     '''
     super().__init__(parent=parent)
     self.project = project
     self.haltestellen = Haltestellen.features(create=True, project=project)
     self.zentrale_orte = ZentraleOrte.features(create=True, project=project)
     self.project_frame = Projektrahmendaten.features(project=project)[0]
     self.query = BahnQuery(date=date or next_working_day())
def init_kostenkennwerte(project: Project) -> pd.DataFrame:
    '''
    fills the project table holding the costs of line elements with defaults
    based on region and year
    '''
    kk_features = KostenkennwerteLinienelemente.features(create=True)
    kk_features.delete()

    # calculate time factor
    current_year = int(time.strftime("%Y"))

    df_frame_data = project.basedata.get_table('Rahmendaten',
                                               'Kosten').to_pandas()
    df_networks = project.basedata.get_table('Netze_und_Netzelemente',
                                             'Kosten').to_pandas()
    gemeinden = project.basedata.get_table(
        'bkg_gemeinden', 'Basisdaten_deutschland').features()

    interest = df_frame_data['Zins']
    reference_year = df_frame_data['Stand_Kostenkennwerte']
    time_factor = (1 + interest)**(current_year - reference_year)
    # get regional factor
    ags = Projektrahmendaten.get_table(project=project)[0]['ags']
    gemeinde = gemeinden.get(AGS=ags)
    regional_factor = gemeinde.BKI_Regionalfaktor
    # fill table Kostenkennwerte_Linienelemente
    regional_time_factor = time_factor * regional_factor
    rounding_factor = 5
    # multiply with factors
    df_networks.loc[:, ['Euro_EH', 'Cent_BU', 'Euro_EN']] *= \
        regional_time_factor[0]
    # round to 5
    df_networks.fillna(0, inplace=True)
    df_networks.loc[:, ['Euro_EH', 'Cent_BU', 'Euro_EN']] = \
        round_df_to(df_networks.loc[:, ['Euro_EH', 'Cent_BU', 'Euro_EN']],
                    rounding_factor)

    del df_networks['fid']
    kk_features.update_pandas(df_networks)
    return kk_features
Exemplo n.º 10
0
    def load_content(self):
        super().load_content()
        self.gebaeudetypen_base = self.basedata.get_table(
            'Wohnen_Gebaeudetypen', 'Definition_Projekt'
        )
        self.areas = Teilflaechen.features()
        self.residential_areas = Teilflaechen.features().filter(
            nutzungsart=Nutzungsart.WOHNEN.value)
        self.wohnbauland_anteile = WohnbaulandAnteile.features(create=True)
        self.wohnflaeche = WohnflaecheGebaeudetyp.features(create=True)
        self.borders = GrenzeSiedlungskoerper.features(create=True)
        self.wohneinheiten = Wohneinheiten.features(create=True)
        self.rahmendaten = Projektrahmendaten.features()[0]
        self.wohndichte_kreis = self.basedata.get_table(
            'Wohndichte_Wohnflaechendichte_Kreise', 'Flaeche_und_Oekologie')
        self.wohndichte_raumtyp = self.basedata.get_table(
            'Wohndichte_Wohnflaechendichte_RaumTypen',
            'Flaeche_und_Oekologie')
        self.raumtypen = self.basedata.get_table(
            'RaumTypen', 'Flaeche_und_Oekologie')

        self.ui.area_combo.blockSignals(True)
        self.ui.area_combo.clear()
        for area in self.residential_areas:
            self.ui.area_combo.addItem(area.name, area)
        self.ui.area_combo.blockSignals(False)

        self.add_border_output()

        self.change_area()

        self.area_union = None
        # ToDo: fix filter side effects
        self.areas.filter()
        for area in self.areas:
            self.area_union = area.geom if not self.area_union \
                else self.area_union.combine(area.geom)
        # buffer to fill gaps
        self.area_union = self.area_union.buffer(0.1, 6)
        self.bordertool.set_snap_geometry(self.area_union)
Exemplo n.º 11
0
    def change_project(self, project):
        '''
        set given project as the active project. Only one project can be active
        at a time. Reloads the definition and domain widgets.
        '''
        if not project:
            self.ui.domain_button.setEnabled(False)
            self.ui.definition_button.setEnabled(False)
            return
        projektrahmendaten = Projektrahmendaten.features(project=project)[0]
        version = projektrahmendaten.basisdaten_version
        success = self.project_manager.load_basedata(version=version)
        # check the availability of the base data the project was created with
        if not success:
            server_versions = self.project_manager.server_versions
            available = [v['version'] for v in server_versions]
            v_repr = f' (v{version})' if version else ''
            if version not in available:
                QMessageBox.warning(
                    self.ui, 'Fehler',
                    f'Die Basisdaten{v_repr}, mit denen das Projekt erstellt '
                    'wurde sind nicht mehr online verfügbar.\n\n'
                    'Sie können das Projekt leider nicht weiterverwenden. '
                    'Bitte erstellen Sie ein neues Projekt.')
            else:
                reply = QMessageBox.question(
                    self.ui, 'Basisdaten herunterladen',
                    f'Die Basisdaten{v_repr}, mit denen das Projekt erstellt '
                    'wurde, wurden lokal nicht gefunden.\n\n'
                    'Möchten Sie diese Daten jetzt herunterladen? ',
                    QMessageBox.Yes, QMessageBox.No)
                if reply == QMessageBox.Yes:
                    settings = SettingsDialog(self)
                    settings.download_basedata(version=version)
            self.ui.project_combo.setCurrentIndex(0)
            return
        try:
            if getattr(self, 'project_definitions', None):
                self.project_definitions.unload()
                del (self.project_definitions)
            for domain in self.domains:
                domain.unload()
                del (domain)
            # ToDo: put that in project.close() and get
            # workspaces of this project only
            for ws in Workspace.get_instances():
                if not ws.database.read_only:
                    ws.close()

            self.project_manager.active_project = project

            self.setup_definitions()
            self.setup_domains()

            # append groups to force initial order of layers
            ProjectLayer.add_group(self.project_definitions.layer_group,
                                   prepend=True)
            for domain in self.domains:
                group = ProjectLayer.add_group(domain.layer_group,
                                               prepend=False)
                group.setItemVisibilityChecked(False)
                parent = group.parent()
                # in case parent is sub-group of project group, hide as well
                if parent.name() != self.project.groupname:
                    parent.setItemVisibilityChecked(False)

            # check active project, uncheck other projects
            layer_root = QgsProject.instance().layerTreeRoot()
            for p in self.project_manager.projects:
                group = layer_root.findGroup(p.groupname)
                if group:
                    group.setItemVisibilityChecked(
                        p.groupname == project.groupname)

            # show area layers
            self.project_definitions.show_outputs(zoom=True)

            backgroundOSM = OSMBackgroundLayer(groupname='Hintergrundkarten')
            backgroundOSM.draw(checked=False)
            backgroundGrey = TerrestrisBackgroundLayer(
                groupname='Hintergrundkarten')
            backgroundGrey.draw()
            self.ui.domain_button.setEnabled(True)
            self.ui.definition_button.setEnabled(True)
            # ToDo: show last active widget
        except FileNotFoundError as e:
            message = QMessageBox()
            message.setIcon(QMessageBox.Warning)
            message.setText(f'Das Projekt "{project.name}" ist beschädigt.')
            message.setInformativeText('Bitte löschen Sie das Projekt oder '
                                       'wenden Sie sich an den Administrator')
            message.setWindowTitle('Fehler')
            message.setDetailedText(str(e))
            message.exec_()
Exemplo n.º 12
0
 def load_content(self):
     self.project_frame = Projektrahmendaten.features(
         project=self.project)[0]
     self.gemeinden = Gemeindebilanzen.features()
     self.project_frame = Projektrahmendaten.features()[0]
     self.areas = Teilflaechen.features()