/** * @throws Exception */ public function geo_extract() { $text = $this->text_ocr_corrected . $this->text_pdf; $strassen_gefunden = RISGeo::suche_strassen($text); /** @var array|AntragOrt[] $bisherige */ $bisherige = AntragOrt::model()->findAllByAttributes(["dokument_id" => $this->id]); $bisherige_ids = []; foreach ($bisherige as $i) { $bisherige_ids[] = $i->ort_id; } $neue_ids = []; $indexed = []; foreach ($strassen_gefunden as $strasse_name) { if (!in_array($strasse_name, $indexed)) { $indexed[] = $strasse_name; $geo = OrtGeo::getOrCreate($strasse_name); if (is_null($geo)) { continue; } $neue_ids[] = $geo->id; if (!in_array($geo->id, $bisherige_ids)) { $antragort = new AntragOrt(); $antragort->antrag_id = $this->antrag_id; $antragort->termin_id = $this->termin_id; $antragort->rathausumschau_id = $this->rathausumschau_id; $antragort->dokument_id = $this->id; $antragort->ort_name = $strasse_name; $antragort->ort_id = $geo->id; $antragort->source = "text_parse"; $antragort->datum = date("Y-m-d H:i:s"); try { if (!$antragort->save()) { RISTools::send_email(Yii::app()->params['adminEmail'], "Dokument:geo_extract Error", print_r($antragort->getErrors(), true), null, "system"); throw new Exception("Fehler beim Speichern: geo_extract"); } } catch (Exception $e) { var_dump($antragort->getAttributes()); die; } } } } foreach ($bisherige_ids as $id) { if (!in_array($id, $neue_ids)) { AntragOrt::model()->deleteAllByAttributes(["dokument_id" => $this->id, "ort_id" => $id]); } } $this->orte = AntragOrt::model()->findAllByAttributes(["dokument_id" => $this->id]); }
/** * @return OrtGeo[] */ public function get_geo() { $return = []; $strassen_gefunden = RISGeo::suche_strassen($this->top_betreff); $indexed = []; foreach ($strassen_gefunden as $strasse_name) { if (!in_array($strasse_name, $indexed)) { $indexed[] = $strasse_name; $geo = OrtGeo::getOrCreate($strasse_name); if (is_null($geo)) { continue; } $return[] = $geo; } } return $return; }