Benutzer:Plozessor/denkmalpdf

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Das folgende Skript gibt die Denkmalnummern aus einem oder mehreren amtlichen Denkmallisten zurück. Es benötigt eine Version von PdfToText.exe, die u. a. hier heruntergeladen werden kann. Der entsprechende Pfad muss in Zeile 20 angepasst werden.
Als Parameter werden ein sechsstelliger Gemeindeschlüssel (etwa "674190" für Rentweinsdorf) oder eine Textdatei mit solchen Schlüsseln akzeptiert.

# Parameter definieren
[CmdletBinding(DefaultParameterSetName = 'Key')]
param (
    [Parameter(Position = 0, Mandatory = $true, ParameterSetName = 'Key')]
    [string]$key,

    [Parameter(Position = 0, Mandatory = $true, ParameterSetName = 'File')]
    [string]$file
)

# Quellen definieren
if ($key) {
    $urls = @('https://www.geodaten.bayern.de/denkmal_static_data/externe_denkmalliste/pdf/denkmalliste_merge_' + $key + '.pdf')
}
else { 
    $urls = Get-Content $file | ForEach-Object { 'https://www.geodaten.bayern.de/denkmal_static_data/externe_denkmalliste/pdf/denkmalliste_merge_' + $_ + '.pdf' }
}

# Pfade definieren
$pdftotext = "c:\uti32\pdftotext.exe"
# https://www.xpdfreader.com/download.html
$temp_pdf = $env:temp + '\denkmalliste_temp.pdf'
$temp_txt = $env:temp + '\denkmalliste_temp.txt'
Remove-Item $temp_pdf -Force  -ErrorAction SilentlyContinue
Remove-Item $temp_txt -Force  -ErrorAction SilentlyContinue

# Listen vom BLfD laden
$totalcontent = ''
$urls | ForEach-Object {
    Write-Host "Loading" $_
    $response = Invoke-WebRequest $_ -PassThru -OutFile $temp_pdf
    & $pdftotext $temp_pdf $temp_txt
    $totalcontent += (Get-Content $temp_txt)
}

# trennen bei "D-"
$items = $totalcontent -split ("D-")
# trennen nach anderem Zeichen als 0123456789-, "D-" wieder einfügen
$ids = $items | ForEach-Object { "D-" + ($_ -split "[^0-9-]", 2)[0] }
# ID muss aus 4 oder 5 Elementen bestehen, IDs sortieren und Duplikate entfernen
$validids = $ids | Where-Object { $_.split("-").count -in @(4, 5) } 
# vorletztes Element ein- bis dreistellig = Baudenkmal
$bau = $validids | Where-Object { $_.split("-")[-2].length -ne 4 } | Sort-Object { [int]$_.split("-")[-1] },{$_} -Unique
# vorletztes Element vierstellig = Bodendenkmal
$boden = $validids | Where-Object { $_.split("-")[-2].length -eq 4 } | Sort-Object { [int]$_.split("-")[-1] },{$_} -Unique

# Baudenkmäler zurückgeben
$bau