1

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

Я трогание со следующим кодом:

result = Geocoder.search(full_address_to_verify) 
if result != [] 
    street_address = result[0].address_components[1]["long_name"] 
    city = result[0].address_components[2]["long_name"] 
    state = result[0].address_components[5]["long_name"] 
    zip = result[0].address_components[7]["long_name"] 
end 

Я обнаружил, что иногда я получаю несколько результатов, и поэтому я буду с первым ([0] выше). Кроме того, я обнаружил некоторую странность в том, что большую часть времени result[0].address_components[1] содержит полный адрес, в том числе street_number, но время от времени это не так, и я должен добавить result[0].address_components[0]. Мне еще предстоит выяснить рифму или причину этого.

В конечном счете, моя цель состоит в том, чтобы получить номер улицы США + улицы, города, штата и почтового индекса в отдельные переменные.

Итак, мой вопрос: есть ли лучший способ получить адрес, чтобы номер улицы всегда правильно связывался с маршрутом?

Из документации, я на самом деле не видя никаких чистых методов, которые бы просто дать мне нужные поля адреса без извлечения данных из отдельных полей из запроса ответ ...

ответ

0

Правильно, address_components должен позволить вам делать то, что вы хотите выполнить. Для rhyme вы можете обратиться к this part of the documentation about address type.

Google Maps API отмечен какой тип компонента это поле принадлежит, поместив строку в этом месте:

result[0].address_components[i].types[0] 

Вы должны получить свои значения соответствуют на основе типов, но не положение address_components.

Это как Google подошел к ней в их Places Autocomplete API demo:

var componentForm = { 
    street_number: 'short_name', 
    route: 'long_name', 
    locality: 'long_name', 
    administrative_area_level_1: 'short_name', 
    country: 'long_name', 
    postal_code: 'short_name' 
}; 
... 
... 
    // Get each component of the address from the place details 
    // and fill the corresponding field on the form. 
    for (var i = 0; i < place.address_components.length; i++) { 
    var addressType = place.address_components[i].types[0]; 
    if (componentForm[addressType]) { 
     var val = place.address_components[i][componentForm[addressType]]; 
     document.getElementById(addressType).value = val; 
    } 
    } 
Смежные вопросы