Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz punkty długie/wysokie w obrębie ramki ograniczającej w zależności od promienia w MySQL

Ta operacja może być zbyt skomplikowana do wykonania bez pomocy PHP lub innego języka programowania. Oto jak możesz to zrobić w 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>";
    }
?>

Wynikiem tego kodu na podanych przez Ciebie danych jest:

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

Zauważ, że to po prostu usuwa nakładające się punkty, nie uśrednia pozycji. Możesz to jednak łatwo dodać. Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak usunąć zduplikowane wartości z tabeli MySQL

  2. jak pobrać dane mysql w vb.net?

  3. MySQL znajduje najlepsze wyniki dla każdej grupy

  4. Błąd hibernacji podczas utrwalania typu danych TEKST

  5. Konwertuj sortowanie kolumn na domyślną tabelę/bazę danych