Php 用户位置数据聚类

Php 用户位置数据聚类,php,mysql,geo,Php,Mysql,Geo,我有一个在数据库中存储twitter用户位置的应用程序(来自API GET/search tweets-location)。然而,这里的问题是,它需要用户在其个人资料中输入的任何内容。我的数据库中已包含的示例数据: All over the world & London Boca Raton, Florida Sunway Damansara, Malaysia Munich Brazil 40.769549,-73.993696 Long Island City, NY USA Uni

我有一个在数据库中存储twitter用户位置的应用程序(来自API GET/search tweets-location)。然而,这里的问题是,它需要用户在其个人资料中输入的任何内容。我的数据库中已包含的示例数据:

All over the world & London
Boca Raton, Florida
Sunway Damansara, Malaysia
Munich
Brazil
40.769549,-73.993696
Long Island City, NY USA
United States
USA-Japan
正如你所看到的,有一个很大的变化(+垃圾信息,例如“位置:在我的世界”),这造成了一个大问题,当我试图处理这些数据。我想做的是有一个脚本,它将实际解析值并将每一行更新到一个国家(例如,慕尼黑将更改为德国,纽约可能更改为美国-因为它只是一个原型应用程序,而不是一个产品)。我用PHP和MySQL做所有的事情

对于如何解决这个问题,有什么建议吗

更新

我找到了这个例子,这是我想做的,但它并不适用于所有的值。例如,当我进入伦敦或雅典时,它显示的是美国,而当我进入慕尼黑时,它显示的是德国。。。知道为什么吗

<?php
// Get STATE from Google GeoData
function reverse_geocode($address) {
    $address = str_replace(" ", "+", "$address");
    $url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false";
    $result = file_get_contents("$url");
    $json = json_decode($result);
    foreach ($json->results as $result)
    {
        foreach($result->address_components as $addressPart) {
            if((in_array('locality', $addressPart->types)) && (in_array('political', $addressPart->types)))
                $city = $addressPart->long_name;
            else if((in_array('administrative_area_level_1', $addressPart->types)) && (in_array('political', $addressPart->types)))
                $state = $addressPart->long_name;
            else if((in_array('country', $addressPart->types)) && (in_array('political', $addressPart->types)))
                $country = $addressPart->long_name;
        }
    }

    if(($city != '') && ($state != '') && ($country != ''))
        $address = $city.', '.$state.', '.$country;
    else if(($city != '') && ($state != ''))
        $address = $city.', '.$state;
    else if(($state != '') && ($country != ''))
        $address = $state.', '.$country;
    else if($country != '')
        $address = $country;

    // return $address;
    return "$country/$state/$city";
}

// Usage: In my case, I needed to return the State and Country of an address
$myLocation = reverse_geocode("Athens");
echo "$myLocation";
?>


事实上,在美国首先搜索是有优先权的。所以它显示的是美国的雅典和伦敦,而不是希腊和英国。但有人怎么能改变这一点呢?有可能吗?

因为我找到了解决问题的方法,所以我在这里发布了解决上述问题的代码。我可以在第一次迭代中得到city、state、country的值,因此它执行了不必要的迭代,因此从我们这里得到了结果,正如我在返回的json中看到的那样。 现在,我还将解析数据,以排除“在我的世界中”等垃圾数据,并将它们按国家分组

<?php
// Get STATE from Google GeoData
function reverse_geocode($address) {
    $address = str_replace(" ", "+", "$address");
    $url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false";
    $result = file_get_contents("$url");
    $json = json_decode($result);
    foreach ($json->results as $k => $result)
    {
        if ($k == 0) {
            foreach($result->address_components as $addressPart) {
                if ((in_array('locality', $addressPart->types)) && (in_array('political', $addressPart->types))) {
                    $city = $addressPart->long_name;
                } else if((in_array('administrative_area_level_1', $addressPart->types)) && (in_array('political', $addressPart->types))) {
                    $state = $addressPart->long_name;
                }
                else if((in_array('country', $addressPart->types)) && (in_array('political', $addressPart->types))) {
                    $country = $addressPart->long_name;
                }
            }
        } else {
            break; //Will comes out of loop directly after getting result.
        }
    }

    if($country != '')
        $address = $country;

    // return $address;
    return "$country";
}

// Usage: In my case, I needed to return the State and Country of an address
$myLocation = reverse_geocode("Athens");
echo "$myLocation";
?>


@JaredFarrish感谢您在第一部分中提供的帮助:)

我想知道您是否可以将它提供给类似Google Maps API的东西,它会告诉您(如果有效,第一个和最后一个是无效的)原产国是什么。(虽然从技术上讲,第一个在谷歌地图搜索中返回伦敦)可能会有所帮助:嗯,开始尝试谷歌地图API,也发现了这个:它实际上适用于某些地方,但并非适用于所有地方。例如,如果我进入雅典或伦敦,它显示的是美国,但当我进入慕尼黑时,它显示的是德国。。我想知道为什么。。我将更新我的问题,添加您应该在问题中包含您的代码。@JaredFarrish刚刚包含了我在我的案例中发现并试图调整的代码。