如何找到发散坐标?

How to find divergent coordinates?

我在 csv 文件中有一个坐标列表(经度和纬度)。坐标代表一家商店。商店中有将近一百个文件,每个国家一个。但是有些坐标是错误的(由员工手动输入)。

每个国家大约有 100 家商店(平均)。 我可以将坐标发送到 google api 以检查它是否与其他国家相同,但 google 地图 api 只会免费收到 2500 个请求。

我如何编写一个只测试一些发散坐标而不是每个坐标的方法?

这里有一个法国商店坐标的例子。但有一个坐标位于加纳。

latitude    longitude
42,82377    0,316521
46,180742   6,7042473
45,0144927  6,1242264
42,6281     9,4206
46,0259861  6,6388244
47,9622395  1,8441825
5,623027    -1,043182
44.773491   6.03283
48,2814547  7,4579305
50.726231   1.60238
45,751175   3,110678
46,1875023   5.2071938
44,944816   4,841903
45,1484023  5,7223511
44,556944   4,749496
45,467654   4,352633
45,564601   5,917781
45,556935   5,971688
47,312494   5,117044
45,93813    6,090965

也许取坐标的平均值:

$average = array('latitude' => 0, 'longitude' => 0);
// determine the total of coordinates values
foreach($coordinates as $coord){
    $average['latitude'] += $coord['latitude'];
    $average['longitude'] += $coord['longitude'];
}

// Divide by the number of coordinates to get an average value of the lat/long
$average['latitude'] /= count($coordinates);
$average['longitude'] /= count($coordinates);

// max distance to considere the measure is bad
$maxDistance = 5.0;  // YOU SHOULD CONFIGURE THIS VARIABLE

// then, we determinate strangers :p
$strangers = array();
foreach($coordinates as $coord){
    if($coord['latitude'] > $average['latitude'] + $maxDistance 
       OR $coord['latitude'] < $average['latitude'] - $maxDistance
       OR $coord['longitude'] > $average['longitude'] + $maxDistance
       OR $coord['longitude'] < $average['longitude'] - $maxDistance){
            $strangers[] = $coord;
    }
}

// you get your list, and you can use it
foreach($strangers as $strange){
   echo $strange['latitude'] . " : " . $strange['longitude'];
}

顺便说一句,我认为这里有很多算法比这个更好...