コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: ogdbdistance.lib.php プロジェクト: olien/opengeodb
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;
}
コード例 #3
0
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;
}