Mysql
 sql >> база данни >  >> RDS >> Mysql

Обединете дълги/широчини точки в рамките на ограничаваща кутия в зависимост от радиуса в MySQL

Тази операция може да е твърде сложна, за да се изпълни без помощта на PHP или друг език за програмиране. Ето как можете да го направите в PHP:

<?
    $link = mysqli_connect("host", "user", "pass", "database");

    // Grab all the points from the db and push them into an array
    $sql = "SELECT * FROM data";
    $res = $link->query($sql);
    $arr = array();
    for($i = 0; $i < mysqli_num_rows($res); $i++){
        array_push($arr, mysqli_fetch_assoc($res));
    }

    // Cycle through the point array, eliminating those points that "touch" 
    $rad = 1000; //radius in KM
    for($i = 0; $i < count($arr); ++$i){
        $lat1 = $arr[$i]['lat'];
        $lon1 = $arr[$i]['long'];
        for($j = 0; $j<count($arr); ++$j){
            if($i != $j && isset($arr[$i]) && isset($arr[$j])){ // do not compare a point to itself
                $lat2 = $arr[$j]['lat'];
                $lon2 = $arr[$j]['long'];
                // get the distance between each pair of points using the haversine formula
                $dist = acos( sin($lat1*pi()/180)*sin($lat2*pi()/180) + cos($lat1*pi()/180)*cos($lat2*pi()/180)*cos($lon2*PI()/180-$lon1*pi()/180) ) * 6371;
                if($dist < $rad){
                    echo "Removing point id:".$arr[$i]['id']."<br>";
                    unset($arr[$i]);
                }
            }
        }
    }

    //display results
    echo "Remaining points:<br>";
    foreach($arr as $val){
        echo "id=".$val['id']."<br>";
    }
?>

Резултатът от този код върху предоставените от вас данни е:

    Removing point id:1
    Removing point id:2
    Remaining points:
    id=3
    id=4

Имайте предвид, че това просто премахва припокриващите се точки, не прави никакво усредняване на позициите. Можете лесно да добавите това. Надявам се това да помогне.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL заявка за броене на елементи по седмица за текущите 52 седмици?

  2. Рандомизиране Изберете подзаявка в MySQL, когато използвате GroupBy

  3. как мога да експортирам mysql база данни с помощта на ssh?

  4. PHP игнорира ssl сертификати, когато се свързва с MySql

  5. mysql + импортиране на файл с интервали в заглавките на колоните + как да се справя