/** * @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; }
public function run($args) { if (count($args) == 0) { die("./yii recalc_ort2ba [Orts-ID|alle]\n"); } if ($args[0] == "alle") { /** @var OrtGeo[] $orte */ $orte = OrtGeo::model()->findAll(["order" => "id"]); } else { /** @var OrtGeo[] $orte */ $orte = OrtGeo::model()->findAll(["condition" => "id = " . IntVal($args[0])]); } /** @var Bezirksausschuss[] $bas */ $bas = Bezirksausschuss::model()->findAll(); foreach ($orte as $ort) { $found_ba = null; foreach ($bas as $ba) { if ($ba->pointInBA($ort->lon, $ort->lat)) { echo $ort->id . " - " . $ort->ort . ": " . $ba->ba_nr . "\n"; $found_ba = $ba->ba_nr; } } if ($found_ba) { $ort->ba_nr = $found_ba; $ort->save(); } } }