使用PHP将英国邮政编码转换为经度和纬度
过去,这个常见问题困扰着许多程序员,所以我想我会补充一小部分。在为此进行研究的同时,我设法找到了一个名为www.streetmap.co.uk的站点,该站点有一个不错的PostCode到地理参考工具。使用一个简单的URL参数,我就可以为站点提供一个PostCode,并从生成的HTML中删除经度和纬度。这是我想出的功能。
function postCode2Geog($code){ $code = strtolower(str_replace(' ','',$code)); $uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=".$code."&type=Postcode"; $ch = curl_init($uri); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); preg_match('#long \(wgs84\)\s*?\<\/td\>\s*?\\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch); preg_match('#lat \(wgs84\)\s*?\<\/td\>\s*?\\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch); $long = $longMatch[1]; $lat = $latMatch[1]; return array($lat,$long); }
要使用该功能,请使用以下内容,在这种情况下,我要看伦敦的BBC工作室。
这将产生纬度为51.518561和经度为-0.143800的结果,似乎已经结账了。
$geog=postCode2Geog('W1A1AA');
使用此方法的初步结果似乎很有希望,但Streetmap网站似乎自2004年以来就没有进行过更新。经过几分钟的搜索,我发现了此方法,我只需要将20个左右的邮政编码转换为地理坐标即可。一种替代方法是使用我之前在文章中讨论的方法,使用GoogleMapsAndPHP查找PostCode或ZipCode的经度和纬度,但这需要您拥有有效且有效的GoogleMapsAPI密钥。如果您不想沿着那条路线走,则可以使用此方法。