function ogdbDistance($origin, $destination) { $fileData = explode("\n", ogdbGetData()); foreach ($fileData as $fileRow) { $fileRow = explode(";", $fileRow); $dataStructure = ogdbDataStructure($fileRow); if ($dataStructure) { if (isset($fileRow[$dataStructure['zip_pos']]) && isset($fileRow[$dataStructure['lon_pos']]) && isset($fileRow[$dataStructure['lat_pos']])) { if (substr_count($fileRow[$dataStructure['zip_pos']], $origin) == 1) { $origin_lon = deg2rad($fileRow[$dataStructure['lon_pos']]); $origin_lat = deg2rad($fileRow[$dataStructure['lat_pos']]); } if (substr_count($fileRow[$dataStructure['zip_pos']], $destination) == 1) { $destination_lon = deg2rad($fileRow[$dataStructure['lon_pos']]); $destination_lat = deg2rad($fileRow[$dataStructure['lat_pos']]); } } } unset($dataStructure, $fileRow); } $distance = FALSE; if (isset($origin_lon) && isset($origin_lat) && isset($destination_lon) && isset($destination_lat)) { $distance = acos(sin($destination_lat) * sin($origin_lat) + cos($destination_lat) * cos($origin_lat) * cos($destination_lon - $origin_lon)) * OGDB_EARTH_RADIUS; } return $distance; }
function ogdbRadius($zip, $km, $sort = 'asc') { ini_set('precision', 49); // http://de2.php.net/manual/de/function.pi.php $fileData = explode("\n", ogdbGetData()); foreach ($fileData as $fileRow) { $fileRow = explode("\t", $fileRow); $dataStructure = ogdbDataStructure($fileRow); if (isset($fileRow[$dataStructure['zip_pos']]) && isset($fileRow[$dataStructure['lon_pos']]) && isset($fileRow[$dataStructure['lat_pos']])) { if (substr_count($fileRow[$dataStructure['zip_pos']], $zip) == 1) { $origin_lon = $fileRow[$dataStructure['lon_pos']]; $origin_lat = $fileRow[$dataStructure['lat_pos']]; $id = $fileRow[0]; } } unset($dataStructure, $fileRow); } $lambda = $origin_lon * pi() / 180; $phi = $origin_lat * pi() / 180; // Umwandlung der Kurgelkoordinaten ins kartesische Koordinatensystem $geoKoordX = OGDB_EARTH_RADIUS * cos($phi) * cos($lambda); $geoKoordY = OGDB_EARTH_RADIUS * cos($phi) * sin($lambda); $geoKoordZ = OGDB_EARTH_RADIUS * sin($phi); $data = array(); if (isset($origin_lon) && isset($origin_lat) && isset($id)) { foreach ($fileData as $fileRow) { $fileRow = explode("\t", $fileRow); $dataStructure = ogdbDataStructure($fileRow); if (isset($fileRow[$dataStructure['zip_pos']]) && isset($fileRow[$dataStructure['lon_pos']]) && isset($fileRow[$dataStructure['lat_pos']])) { $distance = 2 * OGDB_EARTH_RADIUS * asin(SQRT(pow($geoKoordX - OGDB_EARTH_RADIUS * cos($fileRow[$dataStructure['lat_pos']] * pi() / 180) * cos($fileRow[$dataStructure['lon_pos']] * pi() / 180), 2) + pow($geoKoordY - OGDB_EARTH_RADIUS * cos($fileRow[$dataStructure['lat_pos']] * pi() / 180) * sin($fileRow[$dataStructure['lon_pos']] * pi() / 180), 2) + pow($geoKoordZ - OGDB_EARTH_RADIUS * sin($fileRow[$dataStructure['lat_pos']] * pi() / 180), 2)) / (2 * OGDB_EARTH_RADIUS)); if ($distance < $km && $id != $fileRow[0]) { $data[$distance] = array('loc_id' => $fileRow[0], 'name' => $fileRow[3], 'zip' => $fileRow[$dataStructure['zip_pos']], 'distance' => $distance); } unset($distance); } unset($dataStructure, $fileRow); } } switch ($sort) { case 'asc': ksort($data); break; case 'desc': krsort($data); break; } return $data; }
function ogdbRadius($zip, $km, $sort = 'asc') { $fileData = explode("\n", ogdbGetData()); foreach ($fileData as $fileRow) { $fileRow = explode("\t", $fileRow); //var_dump($fileRow); $dataStructure = ogdbDataStructure($fileRow); //var_dump($dataStructure); if (isset($fileRow[$dataStructure['zip_pos']]) && isset($fileRow[$dataStructure['lon_pos']]) && isset($fileRow[$dataStructure['lat_pos']])) { if (substr_count($fileRow[$dataStructure['zip_pos']], $zip) == 1) { $origin_lon = $fileRow[$dataStructure['lon_pos']]; $origin_lat = $fileRow[$dataStructure['lat_pos']]; $id = $fileRow[0]; } } unset($dataStructure, $fileRow); } $lambda = $origin_lon * pi() / 180; $phi = $origin_lat * pi() / 180; // Umwandlung der Kurgelkoordinaten ins kartesische Koordinatensystem $geoKoordX = OGDB_EARTH_RADIUS * cos($phi) * cos($lambda); $geoKoordY = OGDB_EARTH_RADIUS * cos($phi) * sin($lambda); $geoKoordZ = OGDB_EARTH_RADIUS * sin($phi); $data = array(); if (isset($origin_lon) && isset($origin_lat) && isset($id)) { foreach ($fileData as $fileRow) { $fileRow = explode("\t", $fileRow); $dataStructure = ogdbDataStructure($fileRow); if (isset($fileRow[$dataStructure['zip_pos']]) && isset($fileRow[$dataStructure['lon_pos']]) && isset($fileRow[$dataStructure['lat_pos']])) { $distance = 2 * OGDB_EARTH_RADIUS * asin(SQRT(pow($geoKoordX - OGDB_EARTH_RADIUS * cos($fileRow[$dataStructure['lat_pos']] * pi() / 180) * cos($fileRow[$dataStructure['lon_pos']] * pi() / 180), 2) + pow($geoKoordY - OGDB_EARTH_RADIUS * cos($fileRow[$dataStructure['lat_pos']] * pi() / 180) * sin($fileRow[$dataStructure['lon_pos']] * pi() / 180), 2) + pow($geoKoordZ - OGDB_EARTH_RADIUS * sin($fileRow[$dataStructure['lat_pos']] * pi() / 180), 2)) / (2 * OGDB_EARTH_RADIUS)); // var_dump($distance); // die; //var_dump($fileRow[3] . '<b> '. round($distance, 2) .'</b>'); //die; if ($distance < $km and $fileRow[3] != '') { $data[($distance + 0.01) * 1000] = array('loc_id' => $fileRow[0], 'name' => $fileRow[3], 'zip' => $fileRow[$dataStructure['zip_pos']], 'distance' => $distance, 'adresse' => $fileRow[16], 'lat_pos' => $fileRow[4], 'lon_pos' => $fileRow[5], 'url' => $fileRow[12]); } //var_dump($data); unset($distance); } unset($dataStructure, $fileRow); } } switch ($sort) { case 'asc': ksort($data); break; case 'desc': krsort($data); break; } return $data; }