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

Php 从部分英国邮政编码返回的结果不正确,php,google-maps,geocoding,Php,Google Maps,Geocoding,我对谷歌地图有一个奇怪的问题,他们的文档似乎没有涵盖 我们的应用程序中有一个页面,当最终用户输入邮政编码时,该页面将返回按距离排序的工程师位置列表。我们最近注意到,一些终端用户正在输入部分英国邮政编码(L1、BB7或SE10) 这些都是很好的,并按预期工作,但如果用户搜索曼彻斯特地区的部分邮政编码,他们会得到奇怪的结果,返回的距离超过100英里 我对此进行了研究,谷歌似乎正在返回高速公路网络中道路名称与曼彻斯特邮政区匹配的位置。例如:M4正在返回布里斯托尔北部的高速公路,而不是市中心地区 我发送

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

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

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

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

我发送给谷歌的有效载荷如下:

$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\u结果

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


我做错了什么?是否有任何变通办法,我可以尝试获得稍微更准确的结果?我最好只输入完整的邮政编码吗?

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

// 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}";
//检查邮政编码是否为部分曼彻斯特邮政编码

如果($postcode[0]==“M”&&strlen($postcode)对于尝试此解决方案的任何其他人,您将遇到M60邮政编码和其他一些随机(非曼彻斯特)邮政编码的问题,这些邮政编码路由到同样随机的地方(例如,尝试E3)


如果您检测到任何部分邮政编码并在其后面添加“邮政编码”(例如M60邮政编码)搜索到谷歌,有点不太可能。如果我是你的话,我只限于完整的邮政编码,如果你能找到一个公开的所有可能的邮政编码列表(我确信这是可能的),那就考虑做一个自动完成。。这应该可以让您的用户更容易地使用部分输入,也可以让结果正常工作。@dgig我将不得不在以后的更新中添加此内容,但这似乎是除了让Google更新他们的系统之外的唯一解决方案。