#parser #german #sets #population #read #germany #data-set

gv100ad

Parser to read GV100AD files from the Statistisches Bundesamt Germany

2 unstable releases

0.2.0 Apr 14, 2021
0.1.0 Apr 12, 2021

#1789 in Parser implementations

MIT license

70KB
1.5K SLoC

crates.io docs.rs MIT license Maintenance

gv100ad

This software is experimental and might change a lot in future

This is a Rust implementation of a parser for GV100AD data sets. These data sets contain information about the structure, population, area of german municipalities.

The data sets can be obtained at: https://www.destatis.de/DE/Themen/Laender-Regionen/Regionales/Gemeindeverzeichnis/_inhalt.html

The parser was tested with this data set: https://www.destatis.de/DE/Themen/Laender-Regionen/Regionales/Gemeindeverzeichnis/Administrativ/Archiv/GV100ADQ/GV100AD3004.html

The ZIP files contain a text file GV100AD_DDMMYY.txt that contains the data set, and a PDF file describing the format.

Example

This example lists all municipalities of the state Saarland with population:

use gv100ad::{
    model::{
        gemeinde::GemeindeDaten,
        kreis::KreisDaten,
        land::{LandDaten, LandSchluessel},
    },
    Database,
};

// Open the database. Refer to the `README.md` file for the source of the datasets.
let db = Database::from_path("GV100AD3004/GV100AD_300421.txt").unwrap();

// Parse a key for the state of Saarland
let schluessel = "10".parse::<LandSchluessel>().unwrap();

// Get the record for the state of Saarland
let land = db.get::<_, LandDaten>(schluessel).unwrap();
println!("{}:", land.name);

// Iterate over the districts (Kreise) in Saarland
for kreis in db.children::<_, KreisDaten>(schluessel) {
    println!("  {}:", kreis.name);

    // Iterate over the municipalities (Gemeinde) in the district (Kreis)
    for gemeinde in db.children::<_, GemeindeDaten>(kreis.schluessel) {
        println!(
            "    {}: {} residents",
            gemeinde.name, gemeinde.population_total
        );
    }
}

// Get the sum of the population of all municipalities in Saarland
let total_population: u64 = db.children::<_, GemeindeDaten>(schluessel)
    .map(|gemeinde| gemeinde.population_total)
    .sum();
println!("Total population of {}: {}", land.name, total_population);

Language

The primary language used for the software is English, thus most of documentation and code is in English. Nevertheless a lot of terms are inherently German, and a lot of identifiers in the software use these terms. Here are a few translations:

  • Land: State (also called Bundesland)
  • Regierungsbezirk: Government district
  • Kreis: District
  • Gemeinde: Municipality (more literally "community")
  • Verband: Association
  • Schluessel: Key
  • Textkennzeichen: Textual (it's actually a number) identifier for type of Kreis, Gemeindeverband or Gemeinde.
  • Daten: data, in context e.g. "Landdaten" means "state data" or "state record".

If you think a translation is incorrect or missing, please open an issue.

License

Licensed under MIT license (LICENSE or https://opensource.org/licenses/MIT)

Dependencies

~1.5–2.3MB
~40K SLoC