2017-02-04 5 views
0

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

У меня есть результаты из Google готовы к использованию. Проблема, с которой я сталкиваюсь, заключается в том, что если город появляется в разных местах страны. Например, Эшфорд (в Великобритании) его город, расположенный в Миддлсексе и в Кенте.

Как я могу заставить пользователя выбрать, что они имели в виду? Я уверен в создании выбранной формы, но мне нужен способ, если это возможно, используя функции PHP, чтобы получить 2 отдельных округа. Как вы увидите из фрагмента, нет ключа для разделения двух результатов.

Просто примечание, я использую PHP.

Вот Google результаты дает мне обратно:

object(stdClass)#5519 (2) { 
     ["results"]=> 
     array(2) { 
     [0]=> 
     object(stdClass)#5541 (5) { 
      ["address_components"]=> 
      array(5) { 
      [0]=> 
      object(stdClass)#5546 (3) { 
       ["long_name"]=> 
       string(7) "Ashford" 
       ["short_name"]=> 
       string(7) "Ashford" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(8) "locality" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [1]=> 
      object(stdClass)#5545 (3) { 
       ["long_name"]=> 
       string(7) "Ashford" 
       ["short_name"]=> 
       string(7) "Ashford" 
       ["types"]=> 
       array(1) { 
       [0]=> 
       string(11) "postal_town" 
       } 
      } 
      [2]=> 
      object(stdClass)#5544 (3) { 
       ["long_name"]=> 
       string(4) "Kent" 
       ["short_name"]=> 
       string(4) "Kent" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(27) "administrative_area_level_2" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [3]=> 
      object(stdClass)#5543 (3) { 
       ["long_name"]=> 
       string(7) "England" 
       ["short_name"]=> 
       string(7) "England" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(27) "administrative_area_level_1" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [4]=> 
      object(stdClass)#5542 (3) { 
       ["long_name"]=> 
       string(14) "United Kingdom" 
       ["short_name"]=> 
       string(2) "GB" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(7) "country" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      } 
      ["formatted_address"]=> 
      string(11) "Ashford, UK" 
      ["geometry"]=> 
      object(stdClass)#5537 (4) { 
      ["bounds"]=> 
      object(stdClass)#5539 (2) { 
       ["northeast"]=> 
       object(stdClass)#5540 (2) { 
       ["lat"]=> 
       float(51.1841519) 
       ["lng"]=> 
       float(0.914884) 
       } 
       ["southwest"]=> 
       object(stdClass)#5538 (2) { 
       ["lat"]=> 
       float(51.1228136) 
       ["lng"]=> 
       float(0.8276781) 
       } 
      } 
      ["location"]=> 
      object(stdClass)#5536 (2) { 
       ["lat"]=> 
       float(51.1464659) 
       ["lng"]=> 
       float(0.875019) 
      } 
      ["location_type"]=> 
      string(11) "APPROXIMATE" 
      ["viewport"]=> 
      object(stdClass)#5534 (2) { 
       ["northeast"]=> 
       object(stdClass)#5535 (2) { 
       ["lat"]=> 
       float(51.1841519) 
       ["lng"]=> 
       float(0.914884) 
       } 
       ["southwest"]=> 
       object(stdClass)#5533 (2) { 
       ["lat"]=> 
       float(51.1228136) 
       ["lng"]=> 
       float(0.8276781) 
       } 
      } 
      } 
      ["place_id"]=> 
      string(27) "ChIJh_M23CLD3kcRHsaOYTRPDSg" 
      ["types"]=> 
      array(2) { 
      [0]=> 
      string(8) "locality" 
      [1]=> 
      string(9) "political" 
      } 
     } 
     [1]=> 
     object(stdClass)#5528 (5) { 
      ["address_components"]=> 
      array(4) { 
      [0]=> 
      object(stdClass)#5532 (3) { 
       ["long_name"]=> 
       string(7) "Ashford" 
       ["short_name"]=> 
       string(7) "Ashford" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(8) "locality" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [1]=> 
      object(stdClass)#5531 (3) { 
       ["long_name"]=> 
       string(6) "Surrey" 
       ["short_name"]=> 
       string(6) "Surrey" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(27) "administrative_area_level_2" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [2]=> 
      object(stdClass)#5530 (3) { 
       ["long_name"]=> 
       string(7) "England" 
       ["short_name"]=> 
       string(7) "England" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(27) "administrative_area_level_1" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      [3]=> 
      object(stdClass)#5529 (3) { 
       ["long_name"]=> 
       string(14) "United Kingdom" 
       ["short_name"]=> 
       string(2) "GB" 
       ["types"]=> 
       array(2) { 
       [0]=> 
       string(7) "country" 
       [1]=> 
       string(9) "political" 
       } 
      } 
      } 
      ["formatted_address"]=> 
      string(11) "Ashford, UK" 
      ["geometry"]=> 
      object(stdClass)#5524 (4) { 
      ["bounds"]=> 
      object(stdClass)#5526 (2) { 
       ["northeast"]=> 
       object(stdClass)#5527 (2) { 
       ["lat"]=> 
       float(51.4399966) 
       ["lng"]=> 
       float(-0.4279375) 
       } 
       ["southwest"]=> 
       object(stdClass)#5525 (2) { 
       ["lat"]=> 
       float(51.4208625) 
       ["lng"]=> 
       float(-0.4913756) 
       } 
      } 
      ["location"]=> 
      object(stdClass)#5523 (2) { 
       ["lat"]=> 
       float(51.4274516) 
       ["lng"]=> 
       float(-0.4552643) 
      } 
      ["location_type"]=> 
      string(11) "APPROXIMATE" 
      ["viewport"]=> 
      object(stdClass)#5521 (2) { 
       ["northeast"]=> 
       object(stdClass)#5522 (2) { 
       ["lat"]=> 
       float(51.4399966) 
       ["lng"]=> 
       float(-0.4279375) 
       } 
       ["southwest"]=> 
       object(stdClass)#5520 (2) { 
       ["lat"]=> 
       float(51.4208625) 
       ["lng"]=> 
       float(-0.4913756) 
       } 
      } 
      } 
      ["place_id"]=> 
      string(27) "ChIJY_intExxdkgRVdGnlWdcKVw" 
      ["types"]=> 
      array(2) { 
      [0]=> 
      string(8) "locality" 
      [1]=> 
      string(9) "political" 
      } 
     } 
     } 
     ["status"]=> 
     string(2) "OK" 
    } 

Любая помощь очень ценится.

ответ

1

Как вы увидите из фрагмента, нет ключа для разделения двух результатов.

Мне ничего не хватает: почему вы не можете получить доступ (псевдокод) ["results"]["address_components"][2]["long_name"]?

Это ключ, который отделяет два результата: в одной записи это Суррей, а в другом - Кент.

ОБНОВЛЕНИЕ: НЕПРАВИЛЬНО. номер ключа отличается.

Плохо, но что на самом деле будет работать, это найти все response.results[0].address_components[i].short_name, где i, b такие, что response.results[0].address_components[i].types[b] == "administrative_area_level_2". См. this excellent answer (for a response that is GeoJSON, but can be amended appropriately).

Исповедь: причина я явно не выкладывал способ сослаться на ключ в вопросе является то, что каждый раз, когда я должен разобрать вещи, как, что из набора результатов я клудж своего пути через него, забыв каждый раз, как я делал это в последний раз («Никогда не совершайте память, которую вы можете посмотреть», - сказал Эйнштейн). Если бы это был XML, было бы проще.

В Суррее или Кенте могут быть два города, которые имеют одно и то же имя, где невозможно отличить их от данных в аспирации, но это не так в данных примера.

Исповеди II: Когда я первый ответил, я ключ "на administrative_area_level_2 как правая основа для дифференциации, и просмотрел назад, чтобы найти соответствующий узел - но только посмотрел на вторую записи. Виноват.

+0

Поскольку ключ [2] не выравнивается для обоих результатов. Один из них - ключ 2, другой - ключ 1. –

+0

Правда (проклятие моих глупых старых глаз) ... однако вы можете найти тег, у которого был ребенок = "Administrative_area_level_2" - найти все «response.results [0] .address_components [ i] .short_name' где 'i, b' st 'response.results [0] .address_components [i] .types [b] ==" Administrative_area_level_2 "'. См. Этот ответ (для «ответа», который является GeoJSON, но может быть изменен соответствующим образом): http://stackoverflow.com/a/6773743/209219 - обновил мой ответ соответствующим образом –

+0

Я пытался сделать что-то подобное раньше с помощью " array_search ", но он найдет только ключ, принадлежащий этой записи, который, конечно, [0]. Этот ответ прекрасен! Большое спасибо! Серьезно оценили. –