我对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这是相同的问题,但似乎没有找到解决方案。
我做错了什么?是否有任何变通方法可以尝试获得更准确的结果?我最好只将输入限制为完整的邮政编码吗?
答案 0 :(得分:0)
我想出了一个相当混乱的黑客,似乎可以解决我的问题。
/etc/profile.d/lang.sh
如果邮政编码可识别为部分(4个字符或更少)并以字母// 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}";
开头,则我在其前面添加“曼彻斯特”。这解决了所有错误的编码,除了M
仍然固执地选择高速公路。
所以我在检查中添加了第二个字符并将前缀更改为“Salford”。这解决了这个问题。
答案 1 :(得分:0)
对于其他尝试此解决方案的人,您会遇到M60邮政编码和其他随机(非曼彻斯特)邮政编码的问题,这些邮政编码会路由到同样随机的地方(例如尝试E3)。
如果您检测到任何部分邮政编码,并在其后添加“邮政编码”(例如M60邮政编码),则会路由到正确的位置。