Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Gabungkan titik panjang/lat dalam kotak pembatas tergantung pada radius di MySQL

Operasi ini mungkin terlalu rumit untuk dijalankan tanpa bantuan PHP atau bahasa pemrograman lain. Inilah cara Anda melakukannya di 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>";
    }
?>

Output dari kode ini pada data yang Anda berikan adalah:

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

Perhatikan bahwa ini hanya menghilangkan titik yang tumpang tindih, tidak melakukan rata-rata posisi. Anda dapat dengan mudah menambahkannya. Semoga membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke Database MySQL di Node.js

  2. Cara melewatkan string sebagai klausa WHERE di MYSQL

  3. Apakah MySQL yang disertakan dengan MAMP tidak menyertakan file konfigurasi?

  4. Bagaimana saya bisa mengabaikan perbedaan antara huruf besar dan kecil saat mencari dengan mysql

  5. Python mySQL - keluar dari tanda kutip