2016-02-09 6 views
1

Я использую Google Maps api, чтобы проверить адрес, который пользователи добавляют, передавая почтовый индекс и возвращая отформатированный адрес, который я могу сравнить, чтобы увидеть, он соответствует. Это вызов:Проблема, пытающаяся вытащить все города за почтовый индекс с помощью google api

resultNodeList = (NodeList) xpath.evaluate("/GeocodeResponse/result/formatted_address", geocoderResultDocument, XPathConstants.NODESET) 

Проблема заключается в некоторых почтовый индекс может быть частью Mutiple городов/городов. Вот результат для API Google для почтового индекса 77380:

<GeocodeResponse> 
<status>OK</status> 
<result> 
<type>postal_code</type> 
<formatted_address>Spring, TX 77380, USA</formatted_address> 
<address_component> 
<long_name>77380</long_name> 
<short_name>77380</short_name> 
<type>postal_code</type> 
</address_component> 
<address_component> 
<long_name>Spring</long_name> 
<short_name>Spring</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Texas</long_name> 
<short_name>TX</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>United States</long_name> 
<short_name>US</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry>...</geometry> 
<postcode_locality>Shenandoah</postcode_locality> 
<postcode_locality>Spring</postcode_locality> 
<postcode_locality>The Woodlands</postcode_locality> 
<place_id>ChIJUXEWvwI0R4YRWJe_Gb6C8Bk</place_id> 
</result> 
</GeocodeResponse> 

Пользователь в этом примере живет в лесистой местности TX, не Spring TX. То, что я пытаюсь сделать сейчас тянуть в postcode_locality, так что я могу сравнить любого из городов/городов в списке (Шенандоа, Spring, The Woodlands)

Я устал делать это:

resultNodeList = (NodeList) xpath.evaluate("/GeocodeResponse/result/postcode_locality", geocoderResultDocument, XPathConstants.NODESET); 

но я только вернулся Шенандоа. Я могу сделать/GeocodeResponse/result/postcode_locality [1] и получить каждое местоположение вручную, но этот код должен работать для любого введенного почтового индекса.

Есть ли способ потянуть в список postcode_locality?

ответ

0

Попробуйте использовать ниже:

Element e = (Element) node; 
    NodeList resultNodeList = e.getElementsByTagName("postcode_locality"); 

Это может помочь вам.

+0

Спасибо. Проблема в том, что я извлекаю результаты из google api с resultNodeList, поэтому у меня пока нет узла. Я действительно нашел решение и разместил его выше. –

0

Я думаю, что мое предложенное решение было слишком сложным. Я исправил свою проблему, пропустив название города с помощью zipcode.

private static final String GEOCODER_REQUEST = "http://maps.google.com/maps/api/geocode/xml"; 
. 
. 
. 
URL url = new URL(GEOCODER_REQUEST + "?address=" +address.getZip()+address.getCity().replaceAll("\\s+","%20")); 

http://maps.google.com/maps/api/geocode/xml?address=77380%20Woodlands

<GeocodeResponse> 
<status>OK</status> 
<result> 
<type>postal_code</type> 
<formatted_address>The Woodlands, TX 77380, USA</formatted_address> 
<address_component> 
<long_name>77380</long_name> 
<short_name>77380</short_name> 
<type>postal_code</type> 
</address_component> 
<address_component> 
<long_name>The Woodlands</long_name> 
<short_name>The Woodlands</short_name> 
<type>locality</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>Texas</long_name> 
<short_name>TX</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 
<address_component> 
<long_name>United States</long_name> 
<short_name>US</short_name> 
<type>country</type> 
<type>political</type> 
</address_component> 
<geometry> 
<location> 
<lat>30.1261952</lat> 
<lng>-95.4672962</lng> 
</location> 
<location_type>APPROXIMATE</location_type> 
<viewport> 
<southwest> 
<lat>30.1032280</lat> 
<lng>-95.5058700</lng> 
</southwest> 
<northeast> 
<lat>30.1782430</lat> 
<lng>-95.4368399</lng> 
</northeast> 
</viewport> 
<bounds> 
<southwest> 
<lat>30.1032280</lat> 
<lng>-95.5058700</lng> 
</southwest> 
<northeast> 
<lat>30.1782430</lat> 
<lng>-95.4368399</lng> 
</northeast> 
</bounds> 
</geometry> 
<partial_match>true</partial_match> 
<place_id>ChIJUXEWvwI0R4YRWJe_Gb6C8Bk</place_id> 
</result> 
</GeocodeResponse> 

Это дает более точную formatted_address.