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 के साथ असत्य डेटा (डबल डेटा?) मिलता है

  2. Mysql 1050 त्रुटि तालिका पहले से मौजूद है जब वास्तव में, यह नहीं है

  3. मौजूदा MySQL डेटाबेस से रिवर्स इंजीनियर SQLAlchemy घोषणात्मक वर्ग परिभाषा?

  4. आरोही द्वारा अंतिम 20 क्रम चुनें - PHP/MySQL

  5. Mysql के लिए ओपन सोर्स ईआर डायग्रामिंग टूल