Город поиск и государства на молнии в Google геокодирования API [закрыт]
Я в основном хочу получить список города и государства в zipcode. Способен ли Google Geocode API сделать это? Я попытался заглянуть в документацию, но нашел информацию подавляющей.
любая помощь будет оценили. Если есть другой способ выполнения такой задачи, пожалуйста, дайте мне знать.
спасибо
EDIT: я смог получить город и государство через: http://maps.google.com/maps/geo?output=xml&q=14606 но есть ли ограничение против этого?
4 ответа:
использовать геокодирование API
например, для поиска zip 77379 используйте такой запрос:
http://maps.googleapis.com/maps/api/geocode/json?address=77379&sensor=true
я нашел несколько способов сделать это с помощью веб-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
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)); }
пару месяцев назад у меня было такое же требование для одного из моих проектов. Я немного поискал его и нашел следующее решение. Это не только решение, но я нашел его для одного из проще один.
используйте веб-сервис по адресу 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>
надеюсь, что это помогает...