编程语言
首页 > 编程语言> > php – 部分英国邮政编码返回的结果不正确

php – 部分英国邮政编码返回的结果不正确

作者:互联网

我对Google地图有一个奇怪的问题,他们的文档似乎没有涵盖.

我们的应用程序中有一个页面,它返回最终用户输入邮政编码时按距离排序的工程师位置列表.我们最近注意到一些最终用户正在输入部分英国邮政编码(L1,BB7或SE10).

这些往往很好并按预期工作,但如果用户搜索曼彻斯特地区的部分邮政编码,他们会得到奇怪的结果,返回的距离超过100英里.

我对此进行了研究,似乎Google正在返回高速公路网络的位置,其中道路名称与曼彻斯特的邮政区域相匹配.例如:M4正在返回布里斯托尔北部的高速公路而不是市中心区域.

我发送给Google的有效负载如下:

$url="https://maps.google.com/maps/api/geocode/json?address={$address}&components=country:GB&key={$apikey}";

如果我将有效负载更改为:

$url="https://maps.google.com/maps/api/geocode/json?components=country:GB|postal_code:{$address}&key={$apikey}";

我从API获得了ZERO_RESULTS.

我从2014年看到这个question,这是相同的问题,但似乎没有找到解决方案.

我究竟做错了什么?是否有任何变通方法可以尝试获得更准确的结果?我最好只将输入限制为完整的邮政编码吗?

解决方法:

我想出了一个相当混乱的黑客,似乎可以解决我的问题.

// Check if the postcode is a partial Mancunian postcode
if($postcode[0]==="M" && strlen($postcode) <= 4){
    if($postcode[1]==6){
        $manchester_postcode = "Salford ".$postcode;
    }else{
        $manchester_postcode = "Manchester ".$postcode;
    }
    $address=urlencode($manchester_postcode);
}else{
    $address=urlencode($postcode);
}

$apikey=urlencode(env('GOOGLE_MAP_API'));
$url="https://maps.google.com/maps/api/geocode/json?address={$address}&components=country:GB&key={$apikey}";

如果邮政编码可识别为部分(4个字符或更少)并以字母M开头,则我在其前面加上“曼彻斯特”.这解决了除M6之外的所有错误编码,M6仍然固执地选择了高速公路.

所以我在检查中添加了第二个字符并将前缀更改为“Salford”.这解决了这个问题.

标签:php,google-maps,geocoding
来源: https://codeday.me/bug/20190710/1425399.html