如何找到发散坐标?
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'];
}
顺便说一句,我认为这里有很多算法比这个更好...
我在 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'];
}
顺便说一句,我认为这里有很多算法比这个更好...