web-dev-qa-db-ja.com

郵便番号による都市と州の検索Google Geocode Api

基本的に、郵便番号内の市と州のリストを取得したいです。 GoogleのGeocode APIはこれを実行できますか?ドキュメントを調べてみましたが、圧倒的な情報が見つかりました。

任意の助けをいただければ幸いです。そのようなタスクを達成する別の方法がある場合、私に知らせてください。

ありがとう

編集:私は市と州を取得することができました: http://maps.google.com/maps/geo?output=xml&q=14606 しかし、それに対する制限はありますか?

74
meenxo

GeoCoding API を使用します

たとえば、Zip 77379を検索するには、次のようなリクエストを使用します。

http://maps.googleapis.com/maps/api/geocode/json?address=77379&sensor=true

103
Jason

WebベースのAPIでこれを行う方法をいくつか見つけました。 S Postal Service が最も正確だと思います。郵便番号が重要なので、 Ziptastic の方がはるかに簡単です。

US Postal Service HTTP/XML APIを使用する

これによれば XMLベースのWeb APIを文書化した米国郵政公社のウェブサイトのページ 、具体的には this PDF document のセクション4.0(22ページ)、 5桁の郵便番号を含むXMLリクエストを送信できるURLがあり、対応する市と州を含む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>

USPSdoesでは、APIを使用する前に登録する必要がありますが、私が知る限り、アクセスに料金はかかりません。ところで、APIには他にもいくつかの機能があります。住所の標準化と郵便番号の検索、追跡、配送、ラベルなどのスイート全体を実行できます。

Ziptastic HTTP/JSON APIの使用( サポートされなくなりました

更新:2017年8月13日の時点で、Zipasticは有料のAPIになりました こちら

これはかなり新しいサービスですが、ドキュメントによると、必要なのはGETリクエストを http://ziptasticapi.com に送信するだけのようです。

GET http://ziptasticapi.com/48867

そして、次の行に沿ってJSONオブジェクトを返します。

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

確かに、それは動作します。次のようなことを行うことで、コマンドラインからこれをテストできます。

curl http://ziptasticapi.com/48867 
49
Richard Jones
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));
}
13

数か月前、プロジェクトの1つに同じ要件がありました。私はそれを少し検索し、次の解決策を見つけました。これはonlyソリューションではありませんが、simplerone。

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>

お役に立てれば...

6
Som Poddar