Skip to content

jgraef/gv100ad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

About

Rust parser for GV100AD files from the Statistisches Bundesamt Germany

Resources

License

Stars

Watchers

Forks

Packages

No packages published