Zip Google Geocode Api查找城市和州名[关闭]


82

我基本上想检索邮政编码中的城市和州列表。Google的Geocode API可以做到吗?我尝试查看文档,但发现信息不胜枚举。

任何帮助,将不胜感激。如果还有另一种完成此任务的方法,请告诉我。

谢谢

编辑:我能够通过以下网址检索城市和州:http : //maps.google.com/maps/geo ? output=xml&q=14606,但是对此有限制吗?


您可以使用HERE Maps地理编码REST API创建一个项目并获取REST凭据。等待1个小时,让他们上线(首先向我显示InvalidCredentials错误),然后致电例如geocoder.cit.api.here.com/6.2/geocode.json?PostalCode=2400&country=Denmark&app_id={APP_ID}&app_code={APP_CODE}&gen=9(您可以提供地址部分
aexl

Answers:


109

10
您的意思是sensor = false
Rup

19
“注意:地理编码API只能与Google地图结合使用;禁止对结果进行地理编码而不在地图上显示。
安迪·雷

2
@Rup传感器不再需要
Dejell 2015年

2
这是谷歌搜索“城市邮政编码api”时在Google上的首次点击,而这显然不是:(
DuckPuncher

6
@KevinLeary result_type不限于邮政编码。Google的地址解析器会将邮政编码误认为街道地址(请尝试使用邮政编码89100)。相反,要使用的格式是maps.googleapis.com/maps/api/geocode/...:这里记录developers.google.com/maps/documentation/geocoding/...
麦克Kormendy

53

我发现了使用基于Web的API的几种方法。我认为美国邮政服务将是最准确的,因为邮编是他们的事,但Ziptastic看起来要容易得多。

使用美国邮政服务HTTP / XML API

根据记录其基于XML的Web API的美国邮政服务网站上的本页(特别是此PDF文档的第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还有其他功能:您可以执行地址标准化和邮政编码查找,以及整套跟踪,运输,标签等功能。

使用Ziptastic HTTP / JSON API(不再受支持

更新:自2017年8月13日起,Ziptastic现在是付费API,可以在此处找到

这是一项非常新的服务,但是根据他们的文档,看来您需要做的就是向:// http://ziptasticapi.com发送GET请求,如下所示:

GET http://ziptasticapi.com/48867

他们将按照以下方式返回JSON对象:

{"country": "US", "state": "MI", "city": "OWOSSO"}

确实,它有效。您可以通过执行以下操作从命令行进行测试:

curl http://ziptasticapi.com/48867 

8
非常喜欢Ziptastic推荐。<3!
ceejayoz

5
除非您使用美国邮政服务的API专门从事与邮件相关的活动,否则美国邮政服务可能会拒绝您的访问请求。至少,这是我的经验。
eaj 2012年

1
@eaj是的,“地址验证API只能与USPS运送或邮递服务一起使用。”
dragan.stepanovic

2
不再支持Ziptastic。它不应该再使用了。
vaindil '16

2
@RationalRabbit:我提交了一份更新,指出Ziptastic现在是付费API。
理查德·琼斯

14
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));
}

您的部分代码对我有所帮助,非常感谢:)
Kamlesh

6

几个月前,我对我的一个项目有相同的要求。我搜索了一下,找到了以下解决方案。这不是唯一的解决方案,但我发现它是更简单的解决方案之一。

使用位于http://www.webservicex.net/uszip.asmx的Web服务。
具体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>

希望这可以帮助...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.