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
ध्यान दें कि यह केवल अतिव्यापी बिंदुओं को हटा देता है, यह पदों का कोई औसत नहीं करता है। हालांकि आप इसे आसानी से जोड़ सकते हैं। आशा है कि यह मदद करता है।