def run(self): """run FLA Tool""" params = self.par projektname = self.projectname tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb") fields = ['FamLeistAusgl', 'ESt', 'AGS'] tablepath_landesfaktor = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "FLA_Landesfaktoren") fields2 = ['AGS_Land', 'FLA_Faktor'] cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields) for gemeinde in cursor: ags2 = gemeinde[2][0:2] where = '"AGS_Land"' + "='" + ags2 + "'" cursor2 = arcpy.da.SearchCursor(tablepath_landesfaktor, fields2, where) for land in cursor2: landesfaktor = land[1] FLA_Gemeindebilanz = gemeinde[1] * landesfaktor gemeinde[0] = FLA_Gemeindebilanz cursor.updateRow(gemeinde) c.set_chronicle("Familienleistungsausgleich", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): """run FLA Tool""" params = self.par projektname = self.projectname tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb") fields = ['FamLeistAusgl', 'ESt', 'AGS'] tablepath_landesfaktor = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "FLA_Landesfaktoren") fields2 = ['AGS_Land', 'FLA_Faktor'] cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields) for gemeinde in cursor: ags2 = gemeinde[2][0:2] where = '"AGS_Land"' + "='" + ags2 + "'" cursor2 = arcpy.da.SearchCursor(tablepath_landesfaktor, fields2, where) for land in cursor2: landesfaktor = land[1] FLA_Gemeindebilanz = gemeinde[1] * landesfaktor gemeinde[0] = FLA_Gemeindebilanz cursor.updateRow(gemeinde) c.set_chronicle( "Familienleistungsausgleich", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def run(self): """run Gesamtsumme Tool""" params = self.par projektname = self.projectname tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb") fields = self.parent_tbx.spalten arcpy.AddMessage(fields) cursor_bilanz = arcpy.da.UpdateCursor(tablepath_bilanz, fields) for gemeinde in cursor_bilanz: gemeinde[0] = 0 for spalte in range (1, len(fields)): #arcpy.AddMessage(gemeinde[spalte]) gemeinde[0] += gemeinde[spalte] cursor_bilanz.updateRow(gemeinde) c.set_chronicle("Gesamtbilanz", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): """run Umsatzsteuer Tool""" params = self.par projektname = self.projectname tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb") fields = ['USt', 'GewSt', 'SvB_Saldo'] tablepath_kennwerte = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "USt_Kennwerte") fields2 = ['GemAnt_USt_EUR_pro_EUR_GewSt', 'GemAnt_USt_EUR_pro_SvB'] cursor_kennwerte = arcpy.da.SearchCursor(tablepath_kennwerte, fields2) for row in cursor_kennwerte: GemAnt_GewSt = row[0] GemAnt_SvB = row[1] cursor_bilanz = arcpy.da.UpdateCursor(tablepath_bilanz, fields) for gemeinde in cursor_bilanz: gemeinde[0] = GemAnt_GewSt * gemeinde[1] + GemAnt_SvB * gemeinde[2] cursor_bilanz.updateRow(gemeinde) c.set_chronicle("Umsatzsteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): """run Steuersalden Tool""" params = self.par projektname = self.projectname Gewerbesteuermessbetrag_Projekt = 0 gewerbe_vorhanden = False gewerbe_messbetrag = 0 einzelhandel_vorhanden = False einzelhandel_messbetrag = 0 fields1 = ['Nutzungsart', 'id_teilflaeche', 'ags_bkg'] table_teilflaechen = self.folders.get_table( 'Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb") cursor1 = arcpy.da.SearchCursor(table_teilflaechen, fields1) for row1 in cursor1: ags = row1[2] ags2 = ags[0:2] if row1[0] == Nutzungsart.GEWERBE and not gewerbe_vorhanden: gewerbe_vorhanden = True Summe_Arbeitsplatzschaetzungen = 0 fields2 = ['anzahl_jobs_schaetzung'] table_gewerbeanteile = self.folders.get_table( 'Gewerbe_Anteile', "FGDB_Definition_Projekt.gdb") cursor2 = arcpy.da.SearchCursor(table_gewerbeanteile, fields2) for row2 in cursor2: Summe_Arbeitsplatzschaetzungen += row2[0] #arcpy.AddMessage("Summe_Arbeitsplatzschaetzungen: " + str(Summe_Arbeitsplatzschaetzungen)) Reale_Summe_AP = 0 fields3 = ['Arbeitsplaetze'] table_arbeitsplaetze = self.folders.get_table( 'Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb") cursor3 = arcpy.da.SearchCursor(table_arbeitsplaetze, fields3) for row3 in cursor3: Reale_Summe_AP += row3[0] Korrekturfaktor_AP = Reale_Summe_AP / Summe_Arbeitsplatzschaetzungen #arcpy.AddMessage("Korrekturfaktor_AP: " + str(Korrekturfaktor_AP)) fields4 = ['anzahl_jobs_schaetzung', 'IDBranche'] cursor4 = arcpy.da.SearchCursor(table_gewerbeanteile, fields4) for row4 in cursor4: Messbetrag = 0 fields5 = [ 'AGS2', 'IDBranche', 'GewStMessbetrag_pro_Arbeitsplatz' ] where1 = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"IDBranche"' + "=" + str( row4[1]) table_messbetrag_pro_ap = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_pro_Arbeitsplatz") cursor5 = arcpy.da.SearchCursor(table_messbetrag_pro_ap, fields5, where1) for branche in cursor5: Messbetrag_pro_Arbeitsplatz = branche[2] Messbetrag = cursor4[ 0] * Korrekturfaktor_AP * Messbetrag_pro_Arbeitsplatz gewerbe_messbetrag += Messbetrag #arcpy.AddMessage("Messbetrag row4: " + str(Messbetrag)) if row1[0] == Nutzungsart.EINZELHANDEL: einzelhandel_vorhanden = True fields6 = [ 'Verkaufsflaeche_qm', 'IDTeilflaeche', 'IDSortiment' ] where2 = '"IDTeilflaeche"' + "=" + str(row1[1]) table_verkaufsflaechen = self.folders.get_table( 'Einzelhandel_Verkaufsflaechen', "FGDB_Definition_Projekt.gdb") cursor6 = arcpy.da.SearchCursor(table_verkaufsflaechen, fields6, where2) for row6 in cursor6: Messbetrag = 0 verkaufsflaeche = row6[0] fields7 = [ 'GewStMessbetrag_pro_qm_Verkaufsflaeche', 'ID_Sortiment' ] where3 = '"ID_Sortiment"' + "=" + str(row6[2]) table_messbetrag_pro_qm = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_und_SvB_pro_qm_Verkaufsflaeche") cursor7 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields7, where3) for row7 in cursor7: messbetrag_pro_qm = row7[0] Messbetrag = verkaufsflaeche * messbetrag_pro_qm einzelhandel_messbetrag += Messbetrag Gewerbesteuermessbetrag_Projekt = gewerbe_messbetrag + einzelhandel_messbetrag #arcpy.AddMessage("Gewerbesteuermessbetrag_Projekt: " + str(Gewerbesteuermessbetrag_Projekt)) SvB_Branchen = 0 if gewerbe_vorhanden: fields = ['Arbeitsplaetze'] table_arbeitsplaetze = self.folders.get_table( 'Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(table_arbeitsplaetze, fields) for gewerbe in cursor: SvB_Branchen += gewerbe[0] #arcpy.AddMessage("SvB_Branchen: " + str(SvB_Branchen)) SvB_Verkaufsflaechen = 0 if einzelhandel_vorhanden: fields = ['Verkaufsflaeche_qm', 'IDSortiment'] cursor = arcpy.da.SearchCursor(table_verkaufsflaechen, fields) for verkaufsflaeche in cursor: fields2 = ['SvB_pro_qm_Verkaufsflaeche', 'ID_Sortiment'] where2 = '"ID_Sortiment"' + "=" + str(verkaufsflaeche[1]) cursor2 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields2, where2) for row in cursor2: SvB_Verkaufsflaechen += verkaufsflaeche[0] * row[0] #arcpy.AddMessage("SvB_Verkaufsflaechen: " + str(SvB_Verkaufsflaechen)) Gewerbesteuermessbetrag_pro_SvB_Projekt = Gewerbesteuermessbetrag_Projekt / ( SvB_Branchen + SvB_Verkaufsflaechen) #arcpy.AddMessage("Gewerbesteuermessbetrag_pro_SvB_Projekt: " + str(Gewerbesteuermessbetrag_pro_SvB_Projekt)) table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb") fields = ["AGS", "GewSt", "Hebesatz_GewSt", "SvB_Saldo"] cursor = arcpy.da.UpdateCursor(table_bilanzen, fields) table_umlage = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GewSt_Umlage_Vervielfaeltiger") fields8 = ['Summe_BVV_LVV_EHZ'] for row in cursor: agsGem = row[0] agsLand = agsGem[0:2] where8 = '"AGS_Land"' + "='" + agsLand + "'" cursor8 = arcpy.da.SearchCursor(table_umlage, fields8, where8) for row8 in cursor8: bvv_plus_lvv_plus_ehz = row8[0] #arcpy.AddMessage("Summe Bundes- und Landesvervielfältiger plus Erhöhungszahl: " + str(bvv_plus_lvv_plus_ehz)) umlagesatz = bvv_plus_lvv_plus_ehz / row[2] #arcpy.AddMessage("Umlagesatz Gewerbesteuerumlage: " + str(umlagesatz)) if row[0] == ags: row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * (row[3] + SvB_Verkaufsflaechen)) * (1 - umlagesatz) else: row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * row[3]) * (1 - umlagesatz) cursor.updateRow(row) c.set_chronicle( "Gewerbesteuer", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def run(self): parameters = self.par projektname = self.par.name.value saldo = self.par.saldo.value target_gemeinde = self.par.gemeinde.value target_gemeinde_kurz = target_gemeinde.split(" ||")[0] workspace_projekt_einnahmen = self.folders.get_db( 'FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen') fields = ["GEN", "Einw_Saldo"] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for gemeinde in cursor: if gemeinde[0] == target_gemeinde.split(" ||")[0]: gemeinde[1] = saldo cursor.updateRow(gemeinde) # Bestimme AGS der Projektgemeinde pfad_rahmendaten = self.folders.get_table( tablename='Projektrahmendaten', workspace="FGDB_Definition_Projekt.gdb", project=projektname) cursor = arcpy.da.SearchCursor(pfad_rahmendaten, ["AGS"]) for projekt in cursor: ags_projekt = projekt[0] if self.par.kontrolle.value == True: fields = ['AGS', 'Gemeindename'] tablepath_rahmendaten = self.folders.get_table( 'Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeinde_plangebiet = row[1] fields = ['AGS', "Einw_Saldo", "Wanderungsanteil_Ew"] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for x in range(0, 3): saldo_summe = 0 fields_saldo = ["Einw_Saldo"] cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] if saldo_summe == 0: break arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe)) if saldo_summe < 0: arcpy.AddMessage(gemeinde_plangebiet) arcpy.AddMessage(target_gemeinde_kurz) if gemeinde_plangebiet == target_gemeinde_kurz: arcpy.AddMessage("Step 1") for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= round(saldo_summe * gemeinde[2]) cursor.updateRow(gemeinde) else: arcpy.AddMessage("Step 2") for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) elif saldo_summe > 0: if gemeinde_plangebiet == target_gemeinde_kurz: arcpy.AddMessage("Step 3") for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= round(saldo_summe * gemeinde[2]) cursor.updateRow(gemeinde) else: arcpy.AddMessage("Step 4") for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) #Übrige Personen von größter Gemeinde (nicht Projekt-Gemeinde) abziehen saldo_summe = 0 cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] if saldo_summe != 0: fields = ["Einw_Saldo", "AGS"] cursor = arcpy.da.UpdateCursor( in_table=wanderungssalden, field_names=fields, sql_clause=(None, 'ORDER BY Einw_Saldo DESC')) for gemeinde in cursor: if gemeinde[1] != ags_projekt: gemeinde[0] -= saldo_summe cursor.updateRow(gemeinde) break arcpy.RefreshActiveView() arcpy.RefreshTOC() c.set_chronicle( "Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def Wanderungssalden_schaetzen(self): parameters = self.par projektname = self.projectname cursor = self.parent_tbx.query_table(table_name = 'Chronik_Nutzung', columns = ['Arbeitsschritt', 'Letzte_Nutzung'], workspace='FGDB_Einnahmen.gdb') salden_berechnet = True for row in cursor: if row[0] == "Wanderung Einwohner" and row[1] is None: salden_berechnet = False if self.par.aktualisieren.value == True or salden_berechnet == False: lib_einnahmen.create_gemeindebilanzen(self, projektname) workspace_projekt_definition = self.folders.get_db('FGDB_Definition_Projekt.gdb', projektname) workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, "Gemeindebilanzen") projektflaechen = join(workspace_projekt_definition, 'Teilflaechen_Plangebiet') if arcpy.Exists("projektflaechen_lyr"): arcpy.Delete_management("projektflaechen_lyr") arcpy.MakeFeatureLayer_management(projektflaechen, "projektflaechen_lyr") fields = ["Einw_Zuzug", "Einw_Fortzug", "Einw_Saldo", "Wanderungsanteil_Ew", "Gewichtete_Ew", "SvB_Zuzug", "SvB_Fortzug", "SvB_Saldo"] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for gemeinde in cursor: gemeinde[0] = 0 gemeinde[1] = 0 gemeinde[2] = 0 gemeinde[3] = 0 gemeinde[4] = 0 gemeinde[5] = 0 gemeinde[6] = 0 gemeinde[7] = 0 cursor.updateRow(gemeinde) #Wichtungsfaktoren auslesen Wichtungen_Gewerbe = {} Wichtungen_Wohnen = {} path_distanzen = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "Wanderung_Entfernungswichtung") cursor = arcpy.da.SearchCursor(path_distanzen, ["Distance", "Wichtung_Wohnen", "Wichtung_Gewerbe"]) for distanz in cursor: Wichtungen_Wohnen[str(int(distanz[0]))] = distanz[1] Wichtungen_Gewerbe[str(int(distanz[0]))] = distanz[2] #arcpy.AddMessage(Wichtungen_Wohnen) #Randsummen Wanderung auslesen (Anteile innerhalb/außerhalb 25km und Neugründungen [nur Gewerbe]) Randsummen_Gewerbe = {} Randsummen_Wohnen = {} path_randsummen = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "Wanderung_Randsummen") cursor = arcpy.da.SearchCursor(path_randsummen, ["IDWanderungstyp", "Anteil_Wohnen", "Anteil_Gewerbe"]) for randsumme in cursor: Randsummen_Wohnen[randsumme[0]] = randsumme[1] Randsummen_Gewerbe[randsumme[0]] = randsumme[2] #arcpy.AddMessage(Randsummen_Wohnen) #Anteile der Herkunftsgemeinden an Einwohner bestimmen pfad_buffer = os.path.join(workspace_projekt_einnahmen, "buffer_25km") if arcpy.Exists(pfad_buffer): arcpy.Delete_management(pfad_buffer) pfad_Rasterausschnitt = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt") if arcpy.Exists(pfad_Rasterausschnitt): arcpy.Delete_management(pfad_Rasterausschnitt) pfad_Rasterausschnitt_25km = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt_25km") if arcpy.Exists(pfad_Rasterausschnitt_25km): arcpy.Delete_management(pfad_Rasterausschnitt_25km) pfad_Punktlayer_25km_posWerte = os.path.join(workspace_projekt_einnahmen, "Punktlayer_25km_posWerte") if arcpy.Exists(pfad_Punktlayer_25km_posWerte): arcpy.Delete_management(pfad_Punktlayer_25km_posWerte) pfad_Entfernungsringe = os.path.join(workspace_projekt_einnahmen, "Entfernungsringe") if arcpy.Exists(pfad_Entfernungsringe): arcpy.Delete_management(pfad_Entfernungsringe) pfad_Herkunftsraeume = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete") if arcpy.Exists(pfad_Herkunftsraeume): arcpy.Delete_management(pfad_Herkunftsraeume) pfad_Herkunftsraeume_mit_Ew = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete_mit_Ew") if arcpy.Exists(pfad_Herkunftsraeume_mit_Ew): arcpy.Delete_management(pfad_Herkunftsraeume_mit_Ew) pfad_zensusgrid = self.folders.ZENSUS_RASTER_FILE pfad_bkggemeinden = self.folders.get_base_table("FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden") #25km Buffer um Projektflaeche arcpy.Buffer_analysis(projektflaechen, pfad_buffer, "25000 Meters", "FULL", "ROUND", "ALL", "", "PLANAR") #Extent des Buffers auslesen desc = arcpy.Describe(pfad_buffer) xmin = desc.extent.XMin xmax = desc.extent.XMax ymin = desc.extent.YMin ymax = desc.extent.YMax #Verschneidung mit Zensusraster arcpy.Clip_management(pfad_zensusgrid, "%s %s %s %s" % (xmin, ymin, xmax, ymax), pfad_Rasterausschnitt, pfad_buffer, "2147483647", "ClippingGeometry", "NO_MAINTAIN_EXTENT") #Raterausschnitt in Punktlayer konvertieren arcpy.RasterToPoint_conversion(pfad_Rasterausschnitt, pfad_Rasterausschnitt_25km, "Value") #LeereSiedlungszellen entfernen arcpy.Select_analysis(pfad_Rasterausschnitt_25km, pfad_Punktlayer_25km_posWerte, '"grid_code" > 0') #Mehrere Buffer um Projektflaeche erzeugen arcpy.MultipleRingBuffer_analysis(projektflaechen, pfad_Entfernungsringe, "1500;2500;3500;4500;6500;8500;11500;14500;18500;25000", "Meters", "distance", "ALL", "FULL") #Buffer mit Gemeinden verschneiden arcpy.Intersect_analysis([pfad_bkggemeinden, pfad_Entfernungsringe], pfad_Herkunftsraeume, "NO_FID", "", "INPUT") #Verschneiden der Herkunftsraume mit den Summen der jeweiligen Punktfeatures fieldmappings = arcpy.FieldMappings() fieldmappings.addTable(pfad_Herkunftsraeume) fieldmappings.addTable(pfad_Punktlayer_25km_posWerte) gridcode_FieldIndex = fieldmappings.findFieldMapIndex("grid_code") fieldmap = fieldmappings.getFieldMap(gridcode_FieldIndex) field = fieldmap.outputField field.name = "Summe_Ew" field.aliasName = "Summe_Ew" fieldmap.outputField = field fieldmap.mergeRule = "sum" fieldmappings.replaceFieldMap(gridcode_FieldIndex, fieldmap) arcpy.SpatialJoin_analysis(pfad_Herkunftsraeume, pfad_Punktlayer_25km_posWerte, pfad_Herkunftsraeume_mit_Ew, "JOIN_ONE_TO_ONE", "KEEP_ALL", fieldmappings) #SvB_je_EW Summe_Wichtungsfaktoren_Gesamtraum_Wohnen = 0 Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe = 0 Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0 Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0 SvB_je_EW = 0 herkunftsraeume = [] cursor_gemeindebilanz = arcpy.da.SearchCursor(wanderungssalden, ["AGS", "SvB_pro_Ew"]) for gemeinde in cursor_gemeindebilanz: where = '"AGS"' + "='" + gemeinde[0] +"'" cursor_Summe_Ew = arcpy.da.SearchCursor(pfad_Herkunftsraeume_mit_Ew, ["AGS", "Summe_Ew", "distance", "Shape_Area"], where) for gemeindeteil in cursor_Summe_Ew: if gemeindeteil[1] >= 1: Wichtungsfaktor_Wohnen = gemeindeteil[1] * gemeindeteil[3] * Wichtungen_Wohnen[str(int(gemeindeteil[2]))] Wichtungsfaktor_Gewerbe = gemeindeteil[1] * gemeinde[1] * gemeindeteil[3] * Wichtungen_Gewerbe[str(int(gemeindeteil[2]))] herkunftsraeume.append([gemeindeteil[0], Wichtungsfaktor_Wohnen, Wichtungsfaktor_Gewerbe]) Summe_Wichtungsfaktoren_Gesamtraum_Wohnen += Wichtungsfaktor_Wohnen Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe += Wichtungsfaktor_Gewerbe ap = 0 bewohner = 0 teilflaechen = self.folders.get_table("Teilflaechen_Plangebiet", "FGDB_Definition_Projekt.gdb") rahmendaten = self.folders.get_table("Projektrahmendaten", "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(rahmendaten,["AGS"]) for row in cursor: ags_projekt = row[0] cursor = arcpy.da.SearchCursor(teilflaechen, ["ew", "AP_gesamt"]) for flaeche in cursor: ap += flaeche[1] bewohner += flaeche[0] #Aufteilung Fortzug (und Zuzug [nur Projektgemeinde]) cursor_gemeindebilanz = arcpy.da.UpdateCursor(wanderungssalden, ["AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo", "Wanderungsanteil_Ew", "Wanderungsanteil_SvB"]) for gemeinde in cursor_gemeindebilanz: Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0 Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0 for raum in herkunftsraeume: if raum[0] == gemeinde[0]: Summe_Wichtungsfaktoren_Gemeinde_Wohnen += raum[1] Summe_Wichtungsfaktoren_Gemeinde_Gewerbe += raum[2] Einw_Fortzug_neu = -1 * (bewohner * Randsummen_Wohnen[1] * Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen) if Einw_Fortzug_neu != 0: gemeinde[2] = Einw_Fortzug_neu# - 0.5 else: gemeinde[2] = Einw_Fortzug_neu SvB_Fortzug_neu = -1 * (ap * Randsummen_Gewerbe[1] * Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe) if SvB_Fortzug_neu != 0: gemeinde[3] = SvB_Fortzug_neu# - 0.5 else: gemeinde[3] = SvB_Fortzug_neu if gemeinde[0] == ags_projekt: gemeinde[4] = bewohner gemeinde[5] = ap else: gemeinde[8] = Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen gemeinde[9] = Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe gemeinde[6] = gemeinde[3] + gemeinde[5] gemeinde[7] = gemeinde[4] + gemeinde[2] cursor_gemeindebilanz.updateRow(gemeinde) #Summe der zugeordneten Fortzüge (innerhalb 25 km) und Zuzüge [jeweils inkl. Rundungseffekte] Summe_Zugeordneter_Fortzug_Ew = 0.0 Summe_Zugeordneter_Zuzug_Ew = 0.0 Summe_Zugeordneter_Fortzug_AP = 0.0 Summe_Zugeordneter_Zuzug_AP = 0.0 cursor_summe = arcpy.da.SearchCursor(wanderungssalden, ["AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo"]) for gemeinde in cursor_summe: Summe_Zugeordneter_Fortzug_Ew += gemeinde[2] Summe_Zugeordneter_Zuzug_Ew += gemeinde[4] Summe_Zugeordneter_Fortzug_AP += gemeinde[3] Summe_Zugeordneter_Zuzug_AP += gemeinde[5] Differenz_Ew = Summe_Zugeordneter_Zuzug_Ew + Summe_Zugeordneter_Fortzug_Ew Differenz_AP = Summe_Zugeordneter_Zuzug_AP + Summe_Zugeordneter_Fortzug_AP #Neugruendungen (nur Gewerbe) Neugruendungen_AP = ap * Randsummen_Gewerbe[3] + 0.5 #Fortzüge aus dem restlichen Bundesgebiet/Welt (hier werden auch die Rundungsverluste ungebracht) Fortzuege_restliches_Bundesgebiet_und_Welt_Ew = -1 * Differenz_Ew Fortzuege_restliches_Bundesgebiet_und_Welt_AP = -1 * (Differenz_AP - Neugruendungen_AP) #arcpy.AddMessage("Wohnen: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_Ew)) #arcpy.AddMessage("Gewerbe: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_AP)) #arcpy.AddMessage("Gewerbe: Neugründungen = {0}".format(Neugruendungen_AP)) self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_Ew") column_values = {"Kategorie": [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland"], "Anzahl": [int(round(Summe_Zugeordneter_Fortzug_Ew * -1)), int(round(Differenz_Ew))]} self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_Ew", column_values) self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_SvB") column_values = {"Kategorie": [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland", u"Neugründungen"], "Anzahl": [int(round(Summe_Zugeordneter_Fortzug_AP * -1)), int(round((Differenz_AP - Neugruendungen_AP))), int(round(Neugruendungen_AP))]} self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_SvB", column_values) c.set_chronicle("Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname)) c.set_chronicle("Wanderung Beschaeftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): parameters = self.par projektname = self.par.name.value saldo = self.par.saldo.value target_gemeinde = self.par.gemeinde.value target_gemeinde_kurz = target_gemeinde.split(" ||")[0] workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen') fields = ["GEN", self.parent_tbx._saldo_field] for key in self.parent_tbx.gemeinden_dict: where_clause = '"GEN"' + "='" + key + "'" cursor = arcpy.da.UpdateCursor(wanderungssalden, fields, where_clause) for gemeinde in cursor: gemeinde[1] = self.parent_tbx.gemeinden_dict[key] cursor.updateRow(gemeinde) if self.parent_tbx._saldo_field == "SvB_Saldo": zuzugsstatistik = "Zuzugsstatistik_SvB" else: zuzugsstatistik = "Zuzugsstatistik_Ew" table_zuzugsstatistik = self.folders.get_table(zuzugsstatistik, 'FGDB_Einnahmen.gdb') where_zuzug = 'NOT "Kategorie"' + "='" + 'Projektgemeinde/Region' + "'" fields_zuzug = ["Kategorie", "Anzahl"] cursor = arcpy.da.UpdateCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor: row[1] = abs(self.parent_tbx.gemeinden_dict[row[0]]) cursor.updateRow(row) # Bestimme AGS der Projektgemeinde if self.par.kontrolle.value == True: fields = ['AGS', 'Gemeindename'] tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeinde_plangebiet = row[1] if self.parent_tbx.gemeinden_dict[gemeinde_plangebiet] == self.parent_tbx.gemeinden_dict_initial[gemeinde_plangebiet]: plangebiet_saldo_changed = False else: plangebiet_saldo_changed = True if self.parent_tbx._saldo_field == "SvB_Saldo": wanderungsanteil = "Wanderungsanteil_SvB" else: wanderungsanteil = "Wanderungsanteil_Ew" fields = ['AGS', self.parent_tbx._saldo_field, wanderungsanteil] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for x in range(0,2): saldo_summe = 0.0 fields_saldo = [self.parent_tbx._saldo_field] cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor_zuzug: saldo_summe -= row[1] arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe)) if saldo_summe == 0: break if saldo_summe < 0: if plangebiet_saldo_changed == True: for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= saldo_summe * gemeinde[2] cursor.updateRow(gemeinde) else: for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) elif saldo_summe > 0: if plangebiet_saldo_changed == True: for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= saldo_summe * gemeinde[2] cursor.updateRow(gemeinde) else: for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) #Restsumme verteilen saldo_summe = 0.0 cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor_zuzug: saldo_summe -= row[1] if saldo_summe != 0: fields = [self.parent_tbx._saldo_field, "AGS"] cursor = arcpy.da.UpdateCursor(in_table = wanderungssalden, field_names = fields, sql_clause=(None, 'ORDER BY {} ASC'.format(self.parent_tbx._saldo_field))) for gemeinde in cursor: if gemeinde[1] != ags: gemeinde[0] -= saldo_summe cursor.updateRow(gemeinde) break del cursor, cursor_saldo, cursor_zuzug arcpy.RefreshActiveView() arcpy.RefreshTOC() if self.parent_tbx._saldo_field == "SvB_Saldo": c.set_chronicle(u"Wanderung Beschäftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname)) else: c.set_chronicle(u"Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def Wanderungssalden_schaetzen(self): parameters = self.par projektname = self.projectname cursor = self.parent_tbx.query_table( table_name='Chronik_Nutzung', columns=['Arbeitsschritt', 'Letzte_Nutzung'], workspace='FGDB_Einnahmen.gdb') salden_berechnet = True for row in cursor: if row[0] == "Wanderung Einwohner" and row[1] is None: salden_berechnet = False if self.par.aktualisieren.value == True or salden_berechnet == False: lib_einnahmen.create_gemeindebilanzen(self, projektname) workspace_projekt_definition = self.folders.get_db( 'FGDB_Definition_Projekt.gdb', projektname) workspace_projekt_einnahmen = self.folders.get_db( 'FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, "Gemeindebilanzen") projektflaechen = join(workspace_projekt_definition, 'Teilflaechen_Plangebiet') if arcpy.Exists("projektflaechen_lyr"): arcpy.Delete_management("projektflaechen_lyr") arcpy.MakeFeatureLayer_management(projektflaechen, "projektflaechen_lyr") fields = [ "Einw_Zuzug", "Einw_Fortzug", "Einw_Saldo", "Wanderungsanteil_Ew", "Gewichtete_Ew", "SvB_Zuzug", "SvB_Fortzug", "SvB_Saldo" ] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for gemeinde in cursor: gemeinde[0] = 0 gemeinde[1] = 0 gemeinde[2] = 0 gemeinde[3] = 0 gemeinde[4] = 0 gemeinde[5] = 0 gemeinde[6] = 0 gemeinde[7] = 0 cursor.updateRow(gemeinde) #Wichtungsfaktoren auslesen Wichtungen_Gewerbe = {} Wichtungen_Wohnen = {} path_distanzen = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "Wanderung_Entfernungswichtung") cursor = arcpy.da.SearchCursor( path_distanzen, ["Distance", "Wichtung_Wohnen", "Wichtung_Gewerbe"]) for distanz in cursor: Wichtungen_Wohnen[str(int(distanz[0]))] = distanz[1] Wichtungen_Gewerbe[str(int(distanz[0]))] = distanz[2] #arcpy.AddMessage(Wichtungen_Wohnen) #Randsummen Wanderung auslesen (Anteile innerhalb/außerhalb 25km und Neugründungen [nur Gewerbe]) Randsummen_Gewerbe = {} Randsummen_Wohnen = {} path_randsummen = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "Wanderung_Randsummen") cursor = arcpy.da.SearchCursor( path_randsummen, ["IDWanderungstyp", "Anteil_Wohnen", "Anteil_Gewerbe"]) for randsumme in cursor: Randsummen_Wohnen[randsumme[0]] = randsumme[1] Randsummen_Gewerbe[randsumme[0]] = randsumme[2] #arcpy.AddMessage(Randsummen_Wohnen) #Anteile der Herkunftsgemeinden an Einwohner bestimmen pfad_buffer = os.path.join(workspace_projekt_einnahmen, "buffer_25km") if arcpy.Exists(pfad_buffer): arcpy.Delete_management(pfad_buffer) pfad_Rasterausschnitt = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt") if arcpy.Exists(pfad_Rasterausschnitt): arcpy.Delete_management(pfad_Rasterausschnitt) pfad_Rasterausschnitt_25km = os.path.join(workspace_projekt_einnahmen, "Rasterausschnitt_25km") if arcpy.Exists(pfad_Rasterausschnitt_25km): arcpy.Delete_management(pfad_Rasterausschnitt_25km) pfad_Punktlayer_25km_posWerte = os.path.join( workspace_projekt_einnahmen, "Punktlayer_25km_posWerte") if arcpy.Exists(pfad_Punktlayer_25km_posWerte): arcpy.Delete_management(pfad_Punktlayer_25km_posWerte) pfad_Entfernungsringe = os.path.join(workspace_projekt_einnahmen, "Entfernungsringe") if arcpy.Exists(pfad_Entfernungsringe): arcpy.Delete_management(pfad_Entfernungsringe) pfad_Herkunftsraeume = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete") if arcpy.Exists(pfad_Herkunftsraeume): arcpy.Delete_management(pfad_Herkunftsraeume) pfad_Herkunftsraeume_mit_Ew = os.path.join(workspace_projekt_einnahmen, "Herkunftsgebiete_mit_Ew") if arcpy.Exists(pfad_Herkunftsraeume_mit_Ew): arcpy.Delete_management(pfad_Herkunftsraeume_mit_Ew) pfad_zensusgrid = self.folders.ZENSUS_RASTER_FILE pfad_bkggemeinden = self.folders.get_base_table( "FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden") #25km Buffer um Projektflaeche arcpy.Buffer_analysis(projektflaechen, pfad_buffer, "25000 Meters", "FULL", "ROUND", "ALL", "", "PLANAR") #Extent des Buffers auslesen desc = arcpy.Describe(pfad_buffer) xmin = desc.extent.XMin xmax = desc.extent.XMax ymin = desc.extent.YMin ymax = desc.extent.YMax #Verschneidung mit Zensusraster arcpy.Clip_management(pfad_zensusgrid, "%s %s %s %s" % (xmin, ymin, xmax, ymax), pfad_Rasterausschnitt, pfad_buffer, "2147483647", "ClippingGeometry", "NO_MAINTAIN_EXTENT") #Raterausschnitt in Punktlayer konvertieren arcpy.RasterToPoint_conversion(pfad_Rasterausschnitt, pfad_Rasterausschnitt_25km, "Value") #LeereSiedlungszellen entfernen arcpy.Select_analysis(pfad_Rasterausschnitt_25km, pfad_Punktlayer_25km_posWerte, '"grid_code" > 0') #Mehrere Buffer um Projektflaeche erzeugen arcpy.MultipleRingBuffer_analysis( projektflaechen, pfad_Entfernungsringe, "1500;2500;3500;4500;6500;8500;11500;14500;18500;25000", "Meters", "distance", "ALL", "FULL") #Buffer mit Gemeinden verschneiden arcpy.Intersect_analysis([pfad_bkggemeinden, pfad_Entfernungsringe], pfad_Herkunftsraeume, "NO_FID", "", "INPUT") #Verschneiden der Herkunftsraume mit den Summen der jeweiligen Punktfeatures fieldmappings = arcpy.FieldMappings() fieldmappings.addTable(pfad_Herkunftsraeume) fieldmappings.addTable(pfad_Punktlayer_25km_posWerte) gridcode_FieldIndex = fieldmappings.findFieldMapIndex("grid_code") fieldmap = fieldmappings.getFieldMap(gridcode_FieldIndex) field = fieldmap.outputField field.name = "Summe_Ew" field.aliasName = "Summe_Ew" fieldmap.outputField = field fieldmap.mergeRule = "sum" fieldmappings.replaceFieldMap(gridcode_FieldIndex, fieldmap) arcpy.SpatialJoin_analysis(pfad_Herkunftsraeume, pfad_Punktlayer_25km_posWerte, pfad_Herkunftsraeume_mit_Ew, "JOIN_ONE_TO_ONE", "KEEP_ALL", fieldmappings) #SvB_je_EW Summe_Wichtungsfaktoren_Gesamtraum_Wohnen = 0 Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe = 0 Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0 Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0 SvB_je_EW = 0 herkunftsraeume = [] cursor_gemeindebilanz = arcpy.da.SearchCursor(wanderungssalden, ["AGS", "SvB_pro_Ew"]) for gemeinde in cursor_gemeindebilanz: where = '"AGS"' + "='" + gemeinde[0] + "'" cursor_Summe_Ew = arcpy.da.SearchCursor( pfad_Herkunftsraeume_mit_Ew, ["AGS", "Summe_Ew", "distance", "Shape_Area"], where) for gemeindeteil in cursor_Summe_Ew: if gemeindeteil[1] >= 1: Wichtungsfaktor_Wohnen = gemeindeteil[1] * gemeindeteil[ 3] * Wichtungen_Wohnen[str(int(gemeindeteil[2]))] Wichtungsfaktor_Gewerbe = gemeindeteil[1] * gemeinde[ 1] * gemeindeteil[3] * Wichtungen_Gewerbe[str( int(gemeindeteil[2]))] herkunftsraeume.append([ gemeindeteil[0], Wichtungsfaktor_Wohnen, Wichtungsfaktor_Gewerbe ]) Summe_Wichtungsfaktoren_Gesamtraum_Wohnen += Wichtungsfaktor_Wohnen Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe += Wichtungsfaktor_Gewerbe ap = 0 bewohner = 0 teilflaechen = self.folders.get_table("Teilflaechen_Plangebiet", "FGDB_Definition_Projekt.gdb") rahmendaten = self.folders.get_table("Projektrahmendaten", "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(rahmendaten, ["AGS"]) for row in cursor: ags_projekt = row[0] cursor = arcpy.da.SearchCursor(teilflaechen, ["ew", "AP_gesamt"]) for flaeche in cursor: ap += flaeche[1] bewohner += flaeche[0] #Aufteilung Fortzug (und Zuzug [nur Projektgemeinde]) cursor_gemeindebilanz = arcpy.da.UpdateCursor(wanderungssalden, [ "AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo", "Wanderungsanteil_Ew", "Wanderungsanteil_SvB" ]) for gemeinde in cursor_gemeindebilanz: Summe_Wichtungsfaktoren_Gemeinde_Wohnen = 0 Summe_Wichtungsfaktoren_Gemeinde_Gewerbe = 0 for raum in herkunftsraeume: if raum[0] == gemeinde[0]: Summe_Wichtungsfaktoren_Gemeinde_Wohnen += raum[1] Summe_Wichtungsfaktoren_Gemeinde_Gewerbe += raum[2] Einw_Fortzug_neu = -1 * (bewohner * Randsummen_Wohnen[1] * Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen) if Einw_Fortzug_neu != 0: gemeinde[2] = Einw_Fortzug_neu # - 0.5 else: gemeinde[2] = Einw_Fortzug_neu SvB_Fortzug_neu = -1 * (ap * Randsummen_Gewerbe[1] * Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe) if SvB_Fortzug_neu != 0: gemeinde[3] = SvB_Fortzug_neu # - 0.5 else: gemeinde[3] = SvB_Fortzug_neu if gemeinde[0] == ags_projekt: gemeinde[4] = bewohner gemeinde[5] = ap else: gemeinde[ 8] = Summe_Wichtungsfaktoren_Gemeinde_Wohnen / Summe_Wichtungsfaktoren_Gesamtraum_Wohnen gemeinde[ 9] = Summe_Wichtungsfaktoren_Gemeinde_Gewerbe / Summe_Wichtungsfaktoren_Gesamtraum_Gewerbe gemeinde[6] = gemeinde[3] + gemeinde[5] gemeinde[7] = gemeinde[4] + gemeinde[2] cursor_gemeindebilanz.updateRow(gemeinde) #Summe der zugeordneten Fortzüge (innerhalb 25 km) und Zuzüge [jeweils inkl. Rundungseffekte] Summe_Zugeordneter_Fortzug_Ew = 0.0 Summe_Zugeordneter_Zuzug_Ew = 0.0 Summe_Zugeordneter_Fortzug_AP = 0.0 Summe_Zugeordneter_Zuzug_AP = 0.0 cursor_summe = arcpy.da.SearchCursor(wanderungssalden, [ "AGS", "SvB_pro_Ew", "Einw_Fortzug", "SvB_Fortzug", "Einw_Zuzug", "SvB_Zuzug", "SvB_Saldo", "Einw_Saldo" ]) for gemeinde in cursor_summe: Summe_Zugeordneter_Fortzug_Ew += gemeinde[2] Summe_Zugeordneter_Zuzug_Ew += gemeinde[4] Summe_Zugeordneter_Fortzug_AP += gemeinde[3] Summe_Zugeordneter_Zuzug_AP += gemeinde[5] Differenz_Ew = Summe_Zugeordneter_Zuzug_Ew + Summe_Zugeordneter_Fortzug_Ew Differenz_AP = Summe_Zugeordneter_Zuzug_AP + Summe_Zugeordneter_Fortzug_AP #Neugruendungen (nur Gewerbe) Neugruendungen_AP = ap * Randsummen_Gewerbe[3] + 0.5 #Fortzüge aus dem restlichen Bundesgebiet/Welt (hier werden auch die Rundungsverluste ungebracht) Fortzuege_restliches_Bundesgebiet_und_Welt_Ew = -1 * Differenz_Ew Fortzuege_restliches_Bundesgebiet_und_Welt_AP = -1 * ( Differenz_AP - Neugruendungen_AP) #arcpy.AddMessage("Wohnen: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_Ew)) #arcpy.AddMessage("Gewerbe: Fortzüge restliches Bundesgebiet = {0}".format(Fortzuege_restliches_Bundesgebiet_und_Welt_AP)) #arcpy.AddMessage("Gewerbe: Neugründungen = {0}".format(Neugruendungen_AP)) self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_Ew") column_values = { "Kategorie": [u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland"], "Anzahl": [ int(round(Summe_Zugeordneter_Fortzug_Ew * -1)), int(round(Differenz_Ew)) ] } self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_Ew", column_values) self.parent_tbx.delete_rows_in_table("Zuzugsstatistik_SvB") column_values = { "Kategorie": [ u"Projektgemeinde/Region", u"Restliches Bundesgebiet/Ausland", u"Neugründungen" ], "Anzahl": [ int(round(Summe_Zugeordneter_Fortzug_AP * -1)), int(round((Differenz_AP - Neugruendungen_AP))), int(round(Neugruendungen_AP)) ] } self.parent_tbx.insert_rows_in_table("Zuzugsstatistik_SvB", column_values) c.set_chronicle( "Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname)) c.set_chronicle( "Wanderung Beschaeftigte", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def run(self): """run Einkommensteuer Tool""" params = self.par projektname = self.projectname we_efh = 0 we_dh = 0 we_rh = 0 we_mfh = 0 fields = ['IDGebaeudetyp', 'WE'] tablepath_wohnen = self.folders.get_table('Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields) for row in cursor: if row[0] == 1: we_efh += row[1] if row[0] == 2: we_dh += row[1] if row[0] == 3: we_rh += row[1] if row[0] == 4: we_mfh += row[1] fields = ['AGS', 'Gemeindetyp'] tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeindetyp = row[1] ags2 = ags[0:2] table_ESt_pro_WE = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "ESt_Einnahmen_pro_WE") fields = ["AGS2", "Gemeindetyp", "IDGebaeudetyp", "ESt_pro_WE"] where_clause = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"Gemeindetyp"' + " = " + str(gemeindetyp) cursor = arcpy.da.SearchCursor(table_ESt_pro_WE, fields, where_clause) for row in cursor: if row[2] == 1: ESt_pro_WE_efh = row[3] if row[2] == 2: ESt_pro_WE_dh = row[3] if row[2] == 3: ESt_pro_WE_rh = row[3] if row[2] == 4: ESt_pro_WE_mfh = row[3] Einkommensteuer_gesamt = we_efh * ESt_pro_WE_efh + we_dh * ESt_pro_WE_dh + we_rh * ESt_pro_WE_rh + we_mfh * ESt_pro_WE_mfh Gesamtzahl_Bewohner = 0 fields = ['ew'] tablepath_teilflaechen = self.folders.get_table('Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_teilflaechen, fields) for teilflaeche in cursor: Gesamtzahl_Bewohner += teilflaeche[0] ESt_pro_Bewohner = Einkommensteuer_gesamt / Gesamtzahl_Bewohner tablepath_bilanz = self.folders.get_table('Gemeindebilanzen', "FGDB_Einnahmen.gdb") fields = ['ESt', 'Einw_Saldo'] cursor = arcpy.da.UpdateCursor(tablepath_bilanz, fields) for gemeinde in cursor: Est_Gemeindebilanz = ESt_pro_Bewohner * gemeinde[1] gemeinde[0] = Est_Gemeindebilanz cursor.updateRow(gemeinde) c.set_chronicle("Einkommensteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): parameters = self.par projektname = self.par.name.value saldo = self.par.saldo.value target_gemeinde = self.par.gemeinde.value target_gemeinde_kurz = target_gemeinde.split(" ||")[0] workspace_projekt_einnahmen = self.folders.get_db( 'FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen') fields = ["GEN", self.parent_tbx._saldo_field] for key in self.parent_tbx.gemeinden_dict: where_clause = '"GEN"' + "='" + key + "'" cursor = arcpy.da.UpdateCursor(wanderungssalden, fields, where_clause) for gemeinde in cursor: gemeinde[1] = self.parent_tbx.gemeinden_dict[key] cursor.updateRow(gemeinde) if self.parent_tbx._saldo_field == "SvB_Saldo": zuzugsstatistik = "Zuzugsstatistik_SvB" else: zuzugsstatistik = "Zuzugsstatistik_Ew" table_zuzugsstatistik = self.folders.get_table(zuzugsstatistik, 'FGDB_Einnahmen.gdb') where_zuzug = 'NOT "Kategorie"' + "='" + 'Projektgemeinde/Region' + "'" fields_zuzug = ["Kategorie", "Anzahl"] cursor = arcpy.da.UpdateCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor: row[1] = abs(self.parent_tbx.gemeinden_dict[row[0]]) cursor.updateRow(row) # Bestimme AGS der Projektgemeinde if self.par.kontrolle.value == True: fields = ['AGS', 'Gemeindename'] tablepath_rahmendaten = self.folders.get_table( 'Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeinde_plangebiet = row[1] if self.parent_tbx.gemeinden_dict[ gemeinde_plangebiet] == self.parent_tbx.gemeinden_dict_initial[ gemeinde_plangebiet]: plangebiet_saldo_changed = False else: plangebiet_saldo_changed = True if self.parent_tbx._saldo_field == "SvB_Saldo": wanderungsanteil = "Wanderungsanteil_SvB" else: wanderungsanteil = "Wanderungsanteil_Ew" fields = ['AGS', self.parent_tbx._saldo_field, wanderungsanteil] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for x in range(0, 2): saldo_summe = 0.0 fields_saldo = [self.parent_tbx._saldo_field] cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor_zuzug: saldo_summe -= row[1] arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe)) if saldo_summe == 0: break if saldo_summe < 0: if plangebiet_saldo_changed == True: for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= saldo_summe * gemeinde[2] cursor.updateRow(gemeinde) else: for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) elif saldo_summe > 0: if plangebiet_saldo_changed == True: for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= saldo_summe * gemeinde[2] cursor.updateRow(gemeinde) else: for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) #Restsumme verteilen saldo_summe = 0.0 cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] cursor_zuzug = arcpy.da.SearchCursor(table_zuzugsstatistik, fields_zuzug, where_zuzug) for row in cursor_zuzug: saldo_summe -= row[1] if saldo_summe != 0: fields = [self.parent_tbx._saldo_field, "AGS"] cursor = arcpy.da.UpdateCursor( in_table=wanderungssalden, field_names=fields, sql_clause=(None, 'ORDER BY {} ASC'.format( self.parent_tbx._saldo_field))) for gemeinde in cursor: if gemeinde[1] != ags: gemeinde[0] -= saldo_summe cursor.updateRow(gemeinde) break del cursor, cursor_saldo, cursor_zuzug arcpy.RefreshActiveView() arcpy.RefreshTOC() if self.parent_tbx._saldo_field == "SvB_Saldo": c.set_chronicle( u"Wanderung Beschäftigte", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname)) else: c.set_chronicle( u"Wanderung Einwohner", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def run(self): params = self.par projektname = self.projectname lib_einnahmen.create_gemeindebilanzen(self, projektname) fields = ['AGS', 'Gemeindetyp'] tablepath_rahmendaten = self.folders.get_table( 'Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeindetyp = row[1] tablepath_gemeinden = self.folders.get_base_table( "FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden") tablepath_einkommen = self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value) tablepath_hebesteuer = os.path.join(tablepath_einkommen, "GrSt_Hebesatz_B") fields = ["Hebesatz_GrStB"] if arcpy.Exists(tablepath_hebesteuer): cursor = arcpy.da.UpdateCursor(tablepath_hebesteuer, fields) for row in cursor: row[0] = params.slider1.value cursor.updateRow(row) else: arcpy.CreateTable_management( self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value), "GrSt_Hebesatz_B") arcpy.AddField_management(tablepath_hebesteuer, "Hebesatz_GrStB", "LONG") cursor = arcpy.da.InsertCursor(tablepath_hebesteuer, fields) cursor.insertRow([params.slider1.value]) fields = [ "EFH_Rohmiete", 'DHH_Rohmiete', 'RHW_Rohmiete', 'MFH_Rohmiete', 'Bodenwert_Sachwertverfahren', 'qm_Grundstueck_pro_WE_EFH', 'BGF_Buero', 'BGF_Halle' ] tablepath_basisdaten = self.folders.get_table('GrSt_Basisdaten', "FGDB_Einnahmen.gdb") cursor = arcpy.da.UpdateCursor(tablepath_basisdaten, fields) for row in cursor: cursor.deleteRow() cursor = arcpy.da.InsertCursor(tablepath_basisdaten, fields) cursor.insertRow([ params.slider2.value, params.slider3.value, params.slider4.value, params.slider5.value, params.slider6.value, params.slider7.value, params.slider8.value, params.slider9.value ]) einheitswert_efh = 0 einheitswert_dh = 0 einheitswert_rh = 0 einheitswert_mfh = 0 wohnflaeche_efh = 0 wohnflaeche_dh = 0 wohnflaeche_rh = 0 wohnflaeche_mfh = 0 rohmiete_efh = 0 rohmiete_dh = 0 rohmiete_rh = 0 rohmiete_mfh = 0 garagen_efh = 0 garagen_dh = 0 garagen_rh = 0 garagen_mfh = 0 multiplikator_efh = 0 multiplikator_dh = 0 multiplikator_rh = 0 multiplikator_mfh = 0 table_wohnflaeche = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") fields = [ "IDGebaeudetyp", "Mittlere_Wohnflaeche", "Aufschlag_Garagen_Carport" ] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields) for row in cursor: if row[0] == 1: wohnflaeche_efh = row[1] garagen_efh = row[2] if row[0] == 2: wohnflaeche_dh = row[1] garagen_dh = row[2] if row[0] == 3: wohnflaeche_rh = row[1] garagen_rh = row[2] if row[0] == 4: wohnflaeche_mfh = row[1] garagen_mfh = row[2] if int(ags) <= 10999999: rohmiete_efh = params.slider2.value / 100.0 rohmiete_dh = params.slider3.value / 100.0 rohmiete_rh = params.slider4.value / 100.0 rohmiete_mfh = params.slider5.value / 100.0 else: rohmiete_efh, rohmiete_dh, rohmiete_rh, rohmiete_mfh = 0.46 fields = ["AGS", "GemGroessKlass64"] where_clause = '"AGS"' + "='" + ags + "'" cursor = arcpy.da.SearchCursor(tablepath_gemeinden, fields, where_clause) for row in cursor: gemeinde_klasse = row[1] table_wohnflaeche = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GrSt_Vervielfaeltiger") where_clause = '"Gemeindegroessenklasse64"' + "='" + gemeinde_klasse + "'" fields = [ "Gemeindegroessenklasse64", "IDGebaeudetyp", "Vervielfaeltiger" ] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause) for row in cursor: if row[1] == 1: multiplikator_efh = row[2] if row[1] == 2: multiplikator_dh = row[2] if row[1] == 3: multiplikator_rh = row[2] if row[1] == 4: multiplikator_mfh = row[2] einheitswert_efh = (12 * rohmiete_efh * wohnflaeche_efh + garagen_efh) * multiplikator_efh einheitswert_dh = (12 * rohmiete_dh * wohnflaeche_dh + garagen_dh) * multiplikator_dh einheitswert_rh = (12 * rohmiete_rh * wohnflaeche_rh + garagen_rh) * multiplikator_rh einheitswert_mfh = (12 * rohmiete_mfh * wohnflaeche_mfh + garagen_mfh) * multiplikator_mfh if int(ags) >= 11000000: table_wohnflaeche = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") where_clause = '"IDGebaeudetyp"' + "='" + 1 + "'" fields = ["IDGebaeudetyp", "Umbauter_Raum_m3"] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause) for row in cursor: umbauter_raum_m3 = row[1] einheitswert_efh = 24 / 1.95583 * umbauter_raum_m3 + 550 + params.slider7.value * ( params.slider6.value / 100.0) if params.slider8.value != 0 or params.slider9.value != 0: einheitswert_gewerbe = (1685 * params.slider8.value + 800 * params.slider9.value) * 0.1554 else: einheitswert_gewerbe = 0 we_efh = 0 we_dh = 0 we_rh = 0 we_mfh = 0 fields = ['IDGebaeudetyp', 'WE'] tablepath_wohnen = self.folders.get_table( 'Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields) for row in cursor: if row[0] == 1: we_efh += row[1] if row[0] == 2: we_dh += row[1] if row[0] == 3: we_rh += row[1] if row[0] == 4: we_mfh += row[1] arcpy.AddMessage("Einheitswert EFH = {}".format(einheitswert_efh)) if einheitswert_efh <= 38346: einheitswert_bis_38346_EUR_efh = einheitswert_efh einheitswert_ab_38346_EUR_efh = 0 else: einheitswert_bis_38346_EUR_efh = 38346 einheitswert_ab_38346_EUR_efh = einheitswert_efh - 38346 if einheitswert_dh <= 38346: einheitswert_bis_38346_EUR_dh = einheitswert_dh einheitswert_ab_38346_EUR_dh = 0 else: einheitswert_bis_38346_EUR_dh = 38346 einheitswert_ab_38346_EUR_dh = einheitswert_dh - 38346 if einheitswert_rh <= 38346: einheitswert_bis_38346_EUR_rh = einheitswert_rh einheitswert_ab_38346_EUR_rh = 0 else: einheitswert_bis_38346_EUR_rh = 38346 einheitswert_ab_38346_EUR_rh = einheitswert_rh - 38346 if einheitswert_mfh <= 38346: einheitswert_bis_38346_EUR_mfh = einheitswert_mfh einheitswert_ab_38346_EUR_mfh = 0 else: einheitswert_bis_38346_EUR_mfh = 38346 einheitswert_ab_38346_EUR_mfh = einheitswert_mfh - 38346 table_wohnflaeche = self.folders.get_base_table( "FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") fields = [ "IDGebaeudetyp", "Steuermesszahl_bis_38346_EUR", "Steuermesszahl_ab_38346_EUR" ] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields) for row in cursor: if row[0] == 1: steuermesszahl_bis_38346_EUR_efh = row[1] steuermesszahl_ab_38346_EUR_efh = row[2] if row[0] == 2: steuermesszahl_bis_38346_EUR_dh = row[1] steuermesszahl_ab_38346_EUR_dh = row[2] if row[0] == 3: steuermesszahl_bis_38346_EUR_rh = row[1] steuermesszahl_ab_38346_EUR_rh = row[2] if row[0] == 4: steuermesszahl_bis_38346_EUR_mfh = row[1] steuermesszahl_ab_38346_EUR_mfh = row[2] messbetrag_efh = we_efh * ( einheitswert_bis_38346_EUR_efh * steuermesszahl_bis_38346_EUR_efh + einheitswert_ab_38346_EUR_efh * steuermesszahl_ab_38346_EUR_efh) messbetrag_dh = we_dh * ( einheitswert_bis_38346_EUR_dh * steuermesszahl_bis_38346_EUR_dh + einheitswert_ab_38346_EUR_dh * steuermesszahl_ab_38346_EUR_dh) messbetrag_rh = we_rh * ( einheitswert_bis_38346_EUR_rh * steuermesszahl_bis_38346_EUR_rh + einheitswert_ab_38346_EUR_rh * steuermesszahl_ab_38346_EUR_rh) messbetrag_mfh = we_mfh * ( einheitswert_bis_38346_EUR_mfh * steuermesszahl_bis_38346_EUR_mfh + einheitswert_ab_38346_EUR_mfh * steuermesszahl_ab_38346_EUR_mfh) messbetrag_gewerbe = einheitswert_gewerbe * 0.0035 def roundup(number, multiple): num = number + (multiple - 1) return num - (num % multiple) GRUNDSTEUERAUFKOMMEN = ( messbetrag_efh + messbetrag_dh + messbetrag_rh + messbetrag_mfh + messbetrag_gewerbe) * params.slider1.value / 100.0 table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb") fields = ["AGS", "GrSt"] cursor = arcpy.da.UpdateCursor(table_bilanzen, fields) for row in cursor: if row[0] == ags: row[1] = GRUNDSTEUERAUFKOMMEN else: row[1] = 0 cursor.updateRow(row) c.set_chronicle( "Grundsteuer", self.folders.get_table(tablename='Chronik_Nutzung', workspace="FGDB_Einnahmen.gdb", project=projektname))
def run(self): """run Steuersalden Tool""" params = self.par projektname = self.projectname Gewerbesteuermessbetrag_Projekt = 0 gewerbe_vorhanden = False gewerbe_messbetrag = 0 einzelhandel_vorhanden = False einzelhandel_messbetrag = 0 fields1 = ['Nutzungsart', 'id_teilflaeche', 'ags_bkg'] table_teilflaechen = self.folders.get_table('Teilflaechen_Plangebiet', "FGDB_Definition_Projekt.gdb") cursor1 = arcpy.da.SearchCursor(table_teilflaechen, fields1) for row1 in cursor1: ags = row1[2] ags2 = ags[0:2] if row1[0] == Nutzungsart.GEWERBE and not gewerbe_vorhanden: gewerbe_vorhanden = True Summe_Arbeitsplatzschaetzungen = 0 fields2 = ['anzahl_jobs_schaetzung'] table_gewerbeanteile = self.folders.get_table('Gewerbe_Anteile', "FGDB_Definition_Projekt.gdb") cursor2 = arcpy.da.SearchCursor(table_gewerbeanteile, fields2) for row2 in cursor2: Summe_Arbeitsplatzschaetzungen += row2[0] #arcpy.AddMessage("Summe_Arbeitsplatzschaetzungen: " + str(Summe_Arbeitsplatzschaetzungen)) Reale_Summe_AP = 0 fields3 = ['Arbeitsplaetze'] table_arbeitsplaetze = self.folders.get_table('Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb") cursor3 = arcpy.da.SearchCursor(table_arbeitsplaetze, fields3) for row3 in cursor3: Reale_Summe_AP += row3[0] Korrekturfaktor_AP = Reale_Summe_AP / Summe_Arbeitsplatzschaetzungen #arcpy.AddMessage("Korrekturfaktor_AP: " + str(Korrekturfaktor_AP)) fields4 = ['anzahl_jobs_schaetzung', 'IDBranche'] cursor4 = arcpy.da.SearchCursor(table_gewerbeanteile, fields4) for row4 in cursor4: Messbetrag = 0 fields5 = ['AGS2', 'IDBranche', 'GewStMessbetrag_pro_Arbeitsplatz'] where1 = '"AGS2"' + "='" + ags2 + "'" + " AND " + '"IDBranche"' + "=" + str(row4[1]) table_messbetrag_pro_ap = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_pro_Arbeitsplatz") cursor5 = arcpy.da.SearchCursor(table_messbetrag_pro_ap, fields5, where1) for branche in cursor5: Messbetrag_pro_Arbeitsplatz = branche[2] Messbetrag = cursor4[0] * Korrekturfaktor_AP * Messbetrag_pro_Arbeitsplatz gewerbe_messbetrag += Messbetrag #arcpy.AddMessage("Messbetrag row4: " + str(Messbetrag)) if row1[0] == Nutzungsart.EINZELHANDEL: einzelhandel_vorhanden = True fields6 = ['Verkaufsflaeche_qm', 'IDTeilflaeche', 'IDSortiment'] where2 = '"IDTeilflaeche"' + "=" + str(row1[1]) table_verkaufsflaechen = self.folders.get_table('Einzelhandel_Verkaufsflaechen', "FGDB_Definition_Projekt.gdb") cursor6 = arcpy.da.SearchCursor(table_verkaufsflaechen, fields6, where2) for row6 in cursor6: Messbetrag = 0 verkaufsflaeche = row6[0] fields7 = ['GewStMessbetrag_pro_qm_Verkaufsflaeche', 'ID_Sortiment'] where3 = '"ID_Sortiment"' + "=" + str(row6[2]) table_messbetrag_pro_qm = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Messbetrag_und_SvB_pro_qm_Verkaufsflaeche") cursor7 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields7, where3) for row7 in cursor7: messbetrag_pro_qm =row7[0] Messbetrag = verkaufsflaeche * messbetrag_pro_qm einzelhandel_messbetrag += Messbetrag Gewerbesteuermessbetrag_Projekt = gewerbe_messbetrag + einzelhandel_messbetrag #arcpy.AddMessage("Gewerbesteuermessbetrag_Projekt: " + str(Gewerbesteuermessbetrag_Projekt)) SvB_Branchen = 0 if gewerbe_vorhanden: fields = ['Arbeitsplaetze'] table_arbeitsplaetze = self.folders.get_table('Gewerbe_Arbeitsplaetze', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(table_arbeitsplaetze, fields) for gewerbe in cursor: SvB_Branchen += gewerbe[0] #arcpy.AddMessage("SvB_Branchen: " + str(SvB_Branchen)) SvB_Verkaufsflaechen = 0 if einzelhandel_vorhanden: fields = ['Verkaufsflaeche_qm', 'IDSortiment'] cursor = arcpy.da.SearchCursor(table_verkaufsflaechen, fields) for verkaufsflaeche in cursor: fields2 = ['SvB_pro_qm_Verkaufsflaeche', 'ID_Sortiment'] where2 = '"ID_Sortiment"' + "=" + str(verkaufsflaeche[1]) cursor2 = arcpy.da.SearchCursor(table_messbetrag_pro_qm, fields2, where2) for row in cursor2: SvB_Verkaufsflaechen += verkaufsflaeche[0] * row[0] #arcpy.AddMessage("SvB_Verkaufsflaechen: " + str(SvB_Verkaufsflaechen)) Gewerbesteuermessbetrag_pro_SvB_Projekt = Gewerbesteuermessbetrag_Projekt / (SvB_Branchen + SvB_Verkaufsflaechen) #arcpy.AddMessage("Gewerbesteuermessbetrag_pro_SvB_Projekt: " + str(Gewerbesteuermessbetrag_pro_SvB_Projekt)) table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb") fields = ["AGS", "GewSt", "Hebesatz_GewSt", "SvB_Saldo"] cursor = arcpy.da.UpdateCursor(table_bilanzen, fields) table_umlage = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GewSt_Umlage_Vervielfaeltiger") fields8 = ['Summe_BVV_LVV_EHZ'] for row in cursor: agsGem = row[0] agsLand = agsGem[0:2] where8 = '"AGS_Land"' + "='" + agsLand + "'" cursor8 = arcpy.da.SearchCursor(table_umlage, fields8, where8) for row8 in cursor8: bvv_plus_lvv_plus_ehz = row8[0] #arcpy.AddMessage("Summe Bundes- und Landesvervielfältiger plus Erhöhungszahl: " + str(bvv_plus_lvv_plus_ehz)) umlagesatz = bvv_plus_lvv_plus_ehz / row[2] #arcpy.AddMessage("Umlagesatz Gewerbesteuerumlage: " + str(umlagesatz)) if row[0] == ags: row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * (row[3] + SvB_Verkaufsflaechen)) * (1 - umlagesatz) else: row[1] = (Gewerbesteuermessbetrag_pro_SvB_Projekt * (row[2] / 100.0) * row[3]) * (1 - umlagesatz) cursor.updateRow(row) c.set_chronicle("Gewerbesteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): parameters = self.par projektname = self.par.name.value saldo = self.par.saldo.value target_gemeinde = self.par.gemeinde.value target_gemeinde_kurz = target_gemeinde.split(" ||")[0] workspace_projekt_einnahmen = self.folders.get_db('FGDB_Einnahmen.gdb', projektname) wanderungssalden = os.path.join(workspace_projekt_einnahmen, 'Gemeindebilanzen') fields = ["GEN", "SvB_Saldo"] where_clause = '"GEN"' + "='" + target_gemeinde_kurz + "'" cursor = arcpy.da.UpdateCursor(wanderungssalden, fields, where_clause) for gemeinde in cursor: gemeinde[1] = saldo cursor.updateRow(gemeinde) # Bestimme AGS der Projektgemeinde pfad_rahmendaten = self.folders.get_table( tablename='Projektrahmendaten', workspace="FGDB_Definition_Projekt.gdb", project=projektname) cursor = arcpy.da.SearchCursor(pfad_rahmendaten, ["AGS"]) for projekt in cursor: ags_projekt = projekt[0] if self.par.kontrolle.value == True: fields = ['AGS', 'Gemeindename'] tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeinde_plangebiet = row[1] fields = ['AGS', "SvB_Saldo", "Wanderungsanteil_SvB"] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for x in range(0,3): saldo_summe = 0 fields_saldo = ["SvB_Saldo"] cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] if saldo_summe == 0: break arcpy.AddMessage("Saldo_Summe: " + str(saldo_summe)) if saldo_summe < 0: if gemeinde_plangebiet == target_gemeinde_kurz: arcpy.AddMessage("Step 1") for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= round(saldo_summe * gemeinde[2]) cursor.updateRow(gemeinde) else: arcpy.AddMessage("Step 2") for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) elif saldo_summe > 0: if gemeinde_plangebiet == target_gemeinde_kurz: arcpy.AddMessage("Step 3") for gemeinde in cursor: if gemeinde[0] != ags: gemeinde[1] -= round(saldo_summe * gemeinde[2]) cursor.updateRow(gemeinde) else: arcpy.AddMessage("Step 4") for gemeinde in cursor: if gemeinde[0] == ags: gemeinde[1] -= saldo_summe cursor.updateRow(gemeinde) #Gesamtsumme der Salden auf 0 setzen saldo_summe = 0 cursor_saldo = arcpy.da.SearchCursor(wanderungssalden, fields_saldo) for gemeinde in cursor_saldo: saldo_summe += gemeinde[0] if saldo_summe != 0: fields = ["SvB_Saldo", "AGS"] cursor = arcpy.da.UpdateCursor(wanderungssalden, fields) for gemeinde in cursor: if gemeinde[1] != ags_projekt: gemeinde[0] -= saldo_summe cursor.updateRow(gemeinde) break arcpy.RefreshActiveView() arcpy.RefreshTOC() c.set_chronicle(u"Wanderung Beschäftigte", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))
def run(self): params = self.par projektname = self.projectname lib_einnahmen.create_gemeindebilanzen(self, projektname) fields = ['AGS', 'Gemeindetyp'] tablepath_rahmendaten = self.folders.get_table('Projektrahmendaten', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_rahmendaten, fields) for row in cursor: ags = row[0] gemeindetyp = row[1] tablepath_gemeinden = self.folders.get_base_table("FGDB_Basisdaten_deutschland.gdb", "bkg_gemeinden") tablepath_einkommen = self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value) tablepath_hebesteuer = os.path.join(tablepath_einkommen, "GrSt_Hebesatz_B") fields = ["Hebesatz_GrStB"] if arcpy.Exists(tablepath_hebesteuer): cursor = arcpy.da.UpdateCursor(tablepath_hebesteuer, fields) for row in cursor: row[0] = params.slider1.value cursor.updateRow(row) else: arcpy.CreateTable_management(self.folders.get_db("FGDB_Einnahmen.gdb", params.name.value), "GrSt_Hebesatz_B") arcpy.AddField_management(tablepath_hebesteuer, "Hebesatz_GrStB", "LONG") cursor = arcpy.da.InsertCursor(tablepath_hebesteuer, fields) cursor.insertRow([params.slider1.value]) fields = ["EFH_Rohmiete", 'DHH_Rohmiete', 'RHW_Rohmiete', 'MFH_Rohmiete', 'Bodenwert_Sachwertverfahren', 'qm_Grundstueck_pro_WE_EFH', 'BGF_Buero', 'BGF_Halle'] tablepath_basisdaten = self.folders.get_table('GrSt_Basisdaten', "FGDB_Einnahmen.gdb") cursor = arcpy.da.UpdateCursor(tablepath_basisdaten, fields) for row in cursor: cursor.deleteRow() cursor = arcpy.da.InsertCursor(tablepath_basisdaten, fields) cursor.insertRow( [params.slider2.value, params.slider3.value, params.slider4.value, params.slider5.value, params.slider6.value, params.slider7.value, params.slider8.value, params.slider9.value] ) einheitswert_efh = 0 einheitswert_dh = 0 einheitswert_rh = 0 einheitswert_mfh = 0 wohnflaeche_efh = 0 wohnflaeche_dh = 0 wohnflaeche_rh = 0 wohnflaeche_mfh = 0 rohmiete_efh = 0 rohmiete_dh = 0 rohmiete_rh = 0 rohmiete_mfh = 0 garagen_efh = 0 garagen_dh = 0 garagen_rh = 0 garagen_mfh = 0 multiplikator_efh = 0 multiplikator_dh = 0 multiplikator_rh = 0 multiplikator_mfh = 0 table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") fields = ["IDGebaeudetyp", "Mittlere_Wohnflaeche", "Aufschlag_Garagen_Carport"] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields) for row in cursor: if row[0] == 1: wohnflaeche_efh = row[1] garagen_efh = row[2] if row[0] == 2: wohnflaeche_dh = row[1] garagen_dh = row[2] if row[0] == 3: wohnflaeche_rh = row[1] garagen_rh = row[2] if row[0] == 4: wohnflaeche_mfh = row[1] garagen_mfh = row[2] if int(ags) <= 10999999: rohmiete_efh = params.slider2.value / 100.0 rohmiete_dh = params.slider3.value / 100.0 rohmiete_rh = params.slider4.value / 100.0 rohmiete_mfh = params.slider5.value / 100.0 else: rohmiete_efh, rohmiete_dh, rohmiete_rh, rohmiete_mfh = 0.46 fields = ["AGS", "GemGroessKlass64"] where_clause = '"AGS"' + "='" + ags + "'" cursor = arcpy.da.SearchCursor(tablepath_gemeinden, fields, where_clause) for row in cursor: gemeinde_klasse = row[1] table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Vervielfaeltiger") where_clause = '"Gemeindegroessenklasse64"' + "='" + gemeinde_klasse + "'" fields = ["Gemeindegroessenklasse64", "IDGebaeudetyp", "Vervielfaeltiger"] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause) for row in cursor: if row[1] == 1: multiplikator_efh = row[2] if row[1] == 2: multiplikator_dh = row[2] if row[1] == 3: multiplikator_rh = row[2] if row[1] == 4: multiplikator_mfh = row[2] einheitswert_efh = (12 * rohmiete_efh * wohnflaeche_efh + garagen_efh) * multiplikator_efh einheitswert_dh = (12 * rohmiete_dh * wohnflaeche_dh + garagen_dh) * multiplikator_dh einheitswert_rh = (12 * rohmiete_rh * wohnflaeche_rh + garagen_rh) * multiplikator_rh einheitswert_mfh = (12 * rohmiete_mfh * wohnflaeche_mfh + garagen_mfh) * multiplikator_mfh if int(ags) >= 11000000: table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") where_clause = '"IDGebaeudetyp"' + "='" + 1 + "'" fields = ["IDGebaeudetyp", "Umbauter_Raum_m3"] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields, where_clause) for row in cursor: umbauter_raum_m3 = row[1] einheitswert_efh = 24/1.95583 * umbauter_raum_m3 + 550 + params.slider7.value * (params.slider6.value / 100.0) if params.slider8.value != 0 or params.slider9.value != 0: einheitswert_gewerbe = (1685 * params.slider8.value + 800 * params.slider9.value) * 0.1554 else: einheitswert_gewerbe = 0 we_efh = 0 we_dh = 0 we_rh = 0 we_mfh = 0 fields = ['IDGebaeudetyp', 'WE'] tablepath_wohnen = self.folders.get_table('Wohnen_WE_in_Gebaeudetypen', "FGDB_Definition_Projekt.gdb") cursor = arcpy.da.SearchCursor(tablepath_wohnen, fields) for row in cursor: if row[0] == 1: we_efh += row[1] if row[0] == 2: we_dh += row[1] if row[0] == 3: we_rh += row[1] if row[0] == 4: we_mfh += row[1] arcpy.AddMessage("Einheitswert EFH = {}".format(einheitswert_efh)) if einheitswert_efh <= 38346: einheitswert_bis_38346_EUR_efh = einheitswert_efh einheitswert_ab_38346_EUR_efh = 0 else: einheitswert_bis_38346_EUR_efh = 38346 einheitswert_ab_38346_EUR_efh = einheitswert_efh - 38346 if einheitswert_dh <= 38346: einheitswert_bis_38346_EUR_dh = einheitswert_dh einheitswert_ab_38346_EUR_dh = 0 else: einheitswert_bis_38346_EUR_dh = 38346 einheitswert_ab_38346_EUR_dh = einheitswert_dh - 38346 if einheitswert_rh <= 38346: einheitswert_bis_38346_EUR_rh = einheitswert_rh einheitswert_ab_38346_EUR_rh = 0 else: einheitswert_bis_38346_EUR_rh = 38346 einheitswert_ab_38346_EUR_rh = einheitswert_rh - 38346 if einheitswert_mfh <= 38346: einheitswert_bis_38346_EUR_mfh = einheitswert_mfh einheitswert_ab_38346_EUR_mfh = 0 else: einheitswert_bis_38346_EUR_mfh = 38346 einheitswert_ab_38346_EUR_mfh = einheitswert_mfh - 38346 table_wohnflaeche = self.folders.get_base_table("FGDB_Einnahmen_Tool.gdb", "GrSt_Wohnflaeche_und_Steuermesszahlen") fields = ["IDGebaeudetyp", "Steuermesszahl_bis_38346_EUR", "Steuermesszahl_ab_38346_EUR"] cursor = arcpy.da.SearchCursor(table_wohnflaeche, fields) for row in cursor: if row[0] == 1: steuermesszahl_bis_38346_EUR_efh = row[1] steuermesszahl_ab_38346_EUR_efh = row[2] if row[0] == 2: steuermesszahl_bis_38346_EUR_dh =row[1] steuermesszahl_ab_38346_EUR_dh = row[2] if row[0] == 3: steuermesszahl_bis_38346_EUR_rh =row[1] steuermesszahl_ab_38346_EUR_rh = row[2] if row[0] == 4: steuermesszahl_bis_38346_EUR_mfh = row[1] steuermesszahl_ab_38346_EUR_mfh = row[2] messbetrag_efh = we_efh * (einheitswert_bis_38346_EUR_efh * steuermesszahl_bis_38346_EUR_efh + einheitswert_ab_38346_EUR_efh * steuermesszahl_ab_38346_EUR_efh) messbetrag_dh = we_dh * (einheitswert_bis_38346_EUR_dh * steuermesszahl_bis_38346_EUR_dh + einheitswert_ab_38346_EUR_dh * steuermesszahl_ab_38346_EUR_dh) messbetrag_rh = we_rh * (einheitswert_bis_38346_EUR_rh * steuermesszahl_bis_38346_EUR_rh + einheitswert_ab_38346_EUR_rh * steuermesszahl_ab_38346_EUR_rh) messbetrag_mfh = we_mfh * (einheitswert_bis_38346_EUR_mfh * steuermesszahl_bis_38346_EUR_mfh + einheitswert_ab_38346_EUR_mfh * steuermesszahl_ab_38346_EUR_mfh) messbetrag_gewerbe = einheitswert_gewerbe * 0.0035 def roundup(number, multiple): num = number + (multiple - 1) return num - (num % multiple) GRUNDSTEUERAUFKOMMEN = (messbetrag_efh + messbetrag_dh + messbetrag_rh + messbetrag_mfh + messbetrag_gewerbe) * params.slider1.value / 100.0 table_bilanzen = self.folders.get_table("Gemeindebilanzen", "FGDB_Einnahmen.gdb") fields = ["AGS", "GrSt"] cursor = arcpy.da.UpdateCursor(table_bilanzen, fields) for row in cursor: if row[0] == ags: row[1] = GRUNDSTEUERAUFKOMMEN else: row[1] = 0 cursor.updateRow(row) c.set_chronicle("Grundsteuer", self.folders.get_table(tablename='Chronik_Nutzung',workspace="FGDB_Einnahmen.gdb",project=projektname))