/** * @param string $name * @throws Exception * @return OrtGeo|null */ public static function getOrCreate($name) { /** @var null|OrtGeo */ $ort = OrtGeo::model()->findByAttributes(["ort" => $name]); if ($ort) { return $ort; } $data = RISGeo::addressToGeo("Deutschland", "", "München", $name); if (($data === false || $data["lat"] == 0) && mb_strpos($name, "-") !== false) { $data = RISGeo::addressToGeo("Deutschland", "", "München", str_replace("-", "", $name)); } if (($data === false || $data["lat"] == 0) && mb_stripos($name, "Str.") !== false) { $data = RISGeo::addressToGeo("Deutschland", "", "München", str_ireplace("Str.", "Straße", $name)); } if ($data["lat"] <= 0 || $data["lon"] <= 0) { return null; } $ort = new OrtGeo(); $ort->ort = $name; $ort->lat = $data["lat"]; $ort->lon = $data["lon"]; $ort->setzeBA(); $ort->source = "auto"; $ort->to_hide = 0; $ort->to_hide_kommentar = ""; $ort->datum = new CDbExpression('NOW()'); if (!$ort->save()) { RISTools::send_email(Yii::app()->params['adminEmail'], "OrtGeo:getOrCreate Error", print_r($ort->getErrors(), true), null, "system"); throw new Exception("Fehler beim Speichern: Geo"); } return $ort; }