我基本上想要在邮政编码中检索城市和州的列表。 Google的Geocode API是否有能力这样做?我已经尝试查看文档,但发现信息压倒性。
任何帮助将不胜感激。如果有另一种方法可以完成这项任务,请告诉我。
由于
编辑:我能够通过http://maps.google.com/maps/geo?output=xml&q=14606检索城市和州,但是对此有限制吗?
答案 0 :(得分:101)
例如,要查找zip 77379,请使用以下请求:
http://maps.googleapis.com/maps/api/geocode/json?address=77379&sensor=true
答案 1 :(得分:49)
我找到了几种基于Web的API的方法。我认为US Postal Service是最准确的,因为邮政编码是他们的事情,但Ziptastic看起来更容易。
根据page on the US Postal Service website which documents their XML based web API,特别是this PDF document的第4.0节(第22页),他们有一个URL,您可以在其中发送包含5位邮政编码的XML请求,他们将使用XML进行响应包含相应城市和州的文件。
根据他们的文档,这是你要发送的内容:
http://SERVERNAME/ShippingAPITest.dll?API=CityStateLookup&XML=<CityStateLookupRequest%20USERID="xxxxxxx"><ZipCode ID= "0"><Zip5>90210</Zip5></ZipCode></CityStateLookupRequest>
这就是你要收到的东西:
<?xml version="1.0"?>
<CityStateLookupResponse>
<ZipCode ID="0">
<Zip5>90210</Zip5>
<City>BEVERLY HILLS</City>
<State>CA</State>
</ZipCode>
</CityStateLookupResponse>
USPS 确实要求您在使用API之前注册它们,但据我所知,访问是免费的。顺便说一下,他们的API还有一些其他功能:你可以做地址标准化和邮政编码查询,以及整套跟踪,运输,标签等。
更新:截至2017年8月13日,Ziptastic现已成为付费API,可以找到here
这是一项非常新的服务,但根据他们的文档,看起来您需要做的就是向http://ziptasticapi.com发送GET请求,如下所示:
GET http://ziptasticapi.com/48867
他们将返回一个JSON对象:
{"country": "US", "state": "MI", "city": "OWOSSO"}
确实,它有效。您可以通过执行以下操作从命令行对此进行测试:
curl http://ziptasticapi.com/48867
答案 2 :(得分:13)
function getCityState($zip, $blnUSA = true) {
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $zip . "&sensor=true";
$address_info = file_get_contents($url);
$json = json_decode($address_info);
$city = "";
$state = "";
$country = "";
if (count($json->results) > 0) {
//break up the components
$arrComponents = $json->results[0]->address_components;
foreach($arrComponents as $index=>$component) {
$type = $component->types[0];
if ($city == "" && ($type == "sublocality_level_1" || $type == "locality") ) {
$city = trim($component->short_name);
}
if ($state == "" && $type=="administrative_area_level_1") {
$state = trim($component->short_name);
}
if ($country == "" && $type=="country") {
$country = trim($component->short_name);
if ($blnUSA && $country!="US") {
$city = "";
$state = "";
break;
}
}
if ($city != "" && $state != "" && $country != "") {
//we're done
break;
}
}
}
$arrReturn = array("city"=>$city, "state"=>$state, "country"=>$country);
die(json_encode($arrReturn));
}
答案 3 :(得分:6)
使用http://www.webservicex.net/uszip.asmx处的网络服务
具体来说是GetInfoByZIP()
方法。
您可以通过任何邮政编码(ex: 40220
)进行查询,您将得到以下回复...
<?xml version="1.0" encoding="UTF-8"?>
<NewDataSet>
<Table>
<CITY>Louisville</CITY>
<STATE>KY</STATE>
<ZIP>40220</ZIP>
<AREA_CODE>502</AREA_CODE>
<TIME_ZONE>E</TIME_ZONE>
</Table>
</NewDataSet>
希望这会有所帮助......