From 990cb53e773043d11859a7f45bfa6095bf1cc325 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 10 Nov 2022 11:50:44 +0100 Subject: [PATCH] Updated bev import script --- application/ADBHausnummer/ADBHausnummer.php | 8 +- .../ADBHausnummer/ADBHausnummerModel.php | 4 +- .../addressdb_import_bev_adressregister.php | 167 ++++++++++++++++-- 3 files changed, 164 insertions(+), 15 deletions(-) diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php index bb2f9a829..de3a1fea9 100644 --- a/application/ADBHausnummer/ADBHausnummer.php +++ b/application/ADBHausnummer/ADBHausnummer.php @@ -50,7 +50,13 @@ class ADBHausnummer extends mfBaseModel { } if($name == "plz") { - $this->plz = new ADBPlz($this->plz_id); + $this->plz = mfValuecache::singleton()->get("adbplz-".$this->plz_id); + if($this->plz === null) { + $this->plz = new ADBPlz($this->plz_id); + if($this->plz->id) { + mfValuecache::singleton()->set("adplz-".$this->plz_id, $this->plz); + } + } return $this->plz; } diff --git a/application/ADBHausnummer/ADBHausnummerModel.php b/application/ADBHausnummer/ADBHausnummerModel.php index eb9abfee0..55bd8b713 100644 --- a/application/ADBHausnummer/ADBHausnummerModel.php +++ b/application/ADBHausnummer/ADBHausnummerModel.php @@ -47,7 +47,7 @@ class ADBHausnummerModel { $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $where = self::getSqlFilter($filter); - mfLoghandler::singleton()->debug($where); + //mfLoghandler::singleton()->debug($where); $res = $db->select("Hausnummer", "*", "$where ORDER BY strasse_id,hausnummer LIMIT 1"); if($db->num_rows($res)) { $data = $db->fetch_object($res); @@ -102,7 +102,7 @@ class ADBHausnummerModel { WHERE $where ORDER BY strasse_id,hausnummer"; - mfLoghandler::singleton()->debug($sql); + //mfLoghandler::singleton()->debug($sql); if(is_array($limit) && count($limit)) { if(is_numeric($limit['start']) && is_numeric($limit['count'])) { $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; diff --git a/scripts/addressdb/addressdb_import_bev_adressregister.php b/scripts/addressdb/addressdb_import_bev_adressregister.php index 5f1c1090e..018ff2267 100755 --- a/scripts/addressdb/addressdb_import_bev_adressregister.php +++ b/scripts/addressdb/addressdb_import_bev_adressregister.php @@ -14,6 +14,9 @@ require_once(LIBDIR."/mvcfronk/mfBase/mfBaseController.php"); $me = new User(1); $gemeinden_cache = []; +$ortschaft_cache = []; +$strasse_cache = []; +$plz_cache = []; $folder = BASEDIR."/scripts/addressdb/import/bev"; $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -25,7 +28,7 @@ $log = mfLoghandler::singleton(); $filename = "$folder/GEMEINDE.csv"; $input = fopen($filename, "r"); - +/* $i = 0; while($csv = fgetcsv($input, 0, ";")) { $i++; @@ -56,11 +59,11 @@ while($csv = fgetcsv($input, 0, ";")) { } echo ($i-1)." Gemeinden importiert\n"; - +*/ /* * Import Ortschaften */ - +/* $filename = "$folder/ORTSCHAFT.csv"; $input = fopen($filename, "r"); @@ -98,11 +101,11 @@ while($csv = fgetcsv($input, 0, ";")) { } echo ($i-1)." Ortschaften importiert\n"; - +*/ /* * Import Strassen */ - +/* $filename = "$folder/STRASSE.csv"; $input = fopen($filename, "r"); @@ -223,9 +226,9 @@ while($csv = fgetcsv($input, 0, ";")) { } echo "\n".($i-1)." Straßen importiert\n"; +*/ - -$filename = "$folder/STRASSE.csv"; +$filename = "$folder/ADRESSE.csv"; $input = fopen($filename, "r"); $i = 0; @@ -236,23 +239,118 @@ while($csv = fgetcsv($input, 0, ";")) { if($i % 1000 == 0) { echo "."; } + if($i % 10000 == 0) { + echo "$i"; + } + if(!trim($csv[0])) { continue; } - $skz = trim($csv[0]); - $strasse_name = trim($csv[1]); - $gkz = trim($csv[4]); + $adrcd = trim($csv[0]); + $gkz = trim($csv[1]); + $okz = trim($csv[2]); + $plz_string = trim($csv[3]); + $skz = trim($csv[4]); + + $hnz1 = trim($csv[7]); + $hnb1 = trim($csv[8]); + $hnv = trim($csv[9]); + $hnz2 = trim($csv[10]); + $hnb2 = trim($csv[11]); if(!$skz) continue; $gemeinde = getGemeinde($gkz); if(!$gemeinde) { - die("Kann Strasse nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); + die("Kann Adresse nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); } - + $ortschaft = getOrtschaft($okz); + if(!$ortschaft) { + die("Kann Adresse nicht importieren: Ortschaft nicht gefunden ($okz)\n"); + } + + $strasse = getStrasse($skz); + if(!$strasse) { + die("Kann Adresse nicht importieren: Strasse nicht gefunden ($okz)\n"); + } + + + //$plz = ADBPlzModel::getFirst(['gemeinde_id' => $gemeinde->id, "plz" => $plz_string]); + $plz = getPlz($plz_string, $gemeinde->id); + if(!$plz) { + $plz = ADBPlzModel::create([ + "gemeinde_id" => $gemeinde->id, + "plz" => $plz_string, + "plzstring" => $plz_string + ]); + if(!$plz->save()) { + die("Cannot create PLZ $plz_string (gemeinde ".$gemeinde->id.")\n"); + } + } + + $hausnummer_string = makeHausnummer($hnz1, $hnz2, $hnv, $hnb1, $hnb2); + if(!$hausnummer_string) { + continue; + //die("Keine Hausnummer: adrcd $adrcd, gkz $gkz, okz $okz, skz $skz, $hnz1, $hnb1, $hnv, $hnz2, $hnb2\n"); + } + + $hausnummer = ADBHausnummerModel::getFirst([ + 'ortschaft_id' => $ortschaft->id, + //'plz_id' => $plz->id, + 'strasse_id' => $strasse->id, + 'hausnummer' => $hausnummer_string + ]); + + if($hausnummer) { + // update plz if necessary + //var_dump($hausnummer->plz);exit; + if($hausnummer->plz->plz != $plz->plz ) { + echo "Updating PLZ from ".$hausnummer->plz->plz." to ".$plz->plz."\n"; + $hausnummer->plz_id = $plz->id; + $hausnummer->save(); + } + + } else { + // create new Hausnummer + $hausnummer = ADBHausnummerModel::create([ + "netzgebiet_id" => 0, + "ortschaft_id" => $ortschaft->id, + "plz_id" => $plz->id, + "strasse_id" => $strasse->id, + "hausnummer" => $hausnummer_string + ]); + if(!$hausnummer->save()) { + die("Error creating Hausnummer: ".print_r($hausnummer, true)); + } + } + + +} + + +function makeHausnummer($z1 = false, $z2 = false, $v = false, $b1 = false, $b2 = false) { + $h = ""; + + if($z1) { + $h .= $z1; + } + if($b1) { + $h .= $b1; + } + if($v) { + $h .= $v; + if($z2) { + $h .= $z2; + } + if($b2) { + $h .= $b2; + } + } + + return $h; } function getGemeinde($kz) { @@ -268,4 +366,49 @@ function getGemeinde($kz) { } $gemeinden_cache[$kz] = $gemeinde; return $gemeinde; +} + +function getOrtschaft($kz) { + global $ortschaft_cache; + + if(array_key_exists($kz, $ortschaft_cache)) { + return $ortschaft_cache[$kz]; + } + + $ortschaft = ADBOrtschaftModel::getFirst(['kennziffer' => $kz]); + if(!$ortschaft) { + return false; + } + $ortschaft_cache[$kz] = $ortschaft; + return $ortschaft; +} + +function getStrasse($kz) { + global $strasse_cache; + + if(array_key_exists($kz, $strasse_cache)) { + return $strasse_cache[$kz]; + } + + $strasse = ADBStrasseModel::getFirst(['kennziffer' => $kz]); + if(!$strasse) { + return false; + } + $strasse_cache[$kz] = $strasse; + return $strasse; +} + +function getPlz($plz_search, $gemeinde_id) { + global $plz_cache; + + if(array_key_exists("$plz_search.$gemeinde_id", $plz_cache)) { + return $plz_cache["$plz_search.$gemeinde_id"]; + } + + $plz = ADBPlzModel::getFirst(['plz' => $plz_search, "gemeinde_id" => $gemeinde_id]); + if(!$plz) { + return false; + } + $plz_cache[$plz_search] = $plz; + return $plz; } \ No newline at end of file