Поиск города и штата с помощью Zip-архива Google Geocode Api [закрыто]

83

Я в основном хочу получить список города и штата в почтовом индексе. Способен ли Google Geocode API на это? Я пытался заглянуть в документацию, но нашел информацию ошеломляющей.

Любая помощь будет оценена. Если есть другой способ решения такой задачи, дайте мне знать.

благодаря

РЕДАКТИРОВАТЬ: мне удалось получить город и штат через: http://maps.google.com/maps/geo?output=xml&q=14606, но есть ли на это ограничение?

Meenxo
источник
Вы можете использовать HERE Maps Geocoding 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

Ответы:

111

Используйте GeoCoding API

Например, чтобы найти zip-адрес 77379, используйте такой запрос:

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

Джейсон
источник
10
Вы имеете ввиду датчик = ложь ?
Rup
19
«Примечание: API геокодирования можно использовать только вместе с картой Google; результаты геокодирования без отображения на карте запрещены».
Энди Рэй,
2
Датчик @Rup больше не требуется
Dejell
2
Это первое попадание в Google при поиске в Google "api почтового индекса города", и это явно не то :(
DuckPuncher
6
@KevinLeary result_type не ограничивается почтовым индексом. Геокодер Google ошибочно принимает почтовые индексы за номера улиц (попробуйте почтовый индекс 89100). Вместо этого следует использовать формат maps.googleapis.com/maps/api/geocode/… как описано здесь: developers.google.com/maps/documentation/geocoding/…
Майк Корменди
54

Я нашел несколько способов сделать это с помощью веб-API. Я думаю, что Почтовая служба США будет наиболее точной, поскольку почтовые индексы - это их дело, но Ziptastic выглядит намного проще.

Использование HTTP / XML API почтовой службы США

Согласно этой странице веб-сайта Почтовой службы США, которая документирует их веб-API на основе XML , в частности, раздел 4.0 (стр. 22) этого PDF-документа , у них есть URL-адрес, по которому вы можете отправить XML-запрос, содержащий 5-значный почтовый индекс, и они будут ответьте 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 ( больше не поддерживается )

Обновление: с 13 августа 2017 г. Ziptastic стал платным API, и его можно найти здесь.

Это довольно новый сервис, но, согласно их документации, похоже, что все, что вам нужно сделать, это отправить запрос GET на http://ziptasticapi.com , например:

GET http://ziptasticapi.com/48867

И они вернут объект JSON в следующем виде:

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

Действительно, работает. Вы можете проверить это из командной строки, выполнив примерно следующее:

curl http://ziptasticapi.com/48867 
Ричард Джонс
источник
8
Большая любовь к рекомендации Ziptastic. <3!
ceejayoz
5
Почтовая служба США, вероятно, отклонит ваш запрос на доступ, если вы не используете их API для действий, конкретно связанных с почтовой рассылкой. По крайней мере, таков мой опыт.
eaj
1
@eaj Это правда: «API проверки адресов могут использоваться ТОЛЬКО вместе с ДОСТАВКАМИ ИЛИ ПОЧТОВЫМИ УСЛУГАМИ USPS».
dragan.stepanovic
2
Ziptastic больше не поддерживается. Его больше не следует использовать.
vaindil
2
@RationalRabbit: Я отправил обновление, в котором отмечалось, что Ziptastic теперь является платным API.
Ричард Джонс,
15
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 .
Конкретно GetInfoByZIP()метод.

Вы сможете запросить любой zipcode ( 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>

Надеюсь это поможет...

Сом Поддар
источник