1

このhttps://developers.google.com/maps/documentation/places/#PlaceDetails を参照すると、JSON の結果が常にすべてのaddress_components詳細を保持することを期待していました。しかし、私の検索の 1 つで、street_number、post_code、およびその他の 1 つが欠落していました。インテリセンスで調べると、address_components返されたものの 1 つが管理エリア レベル 2 を保持していることがわかりました。

元の値が空だったとしても、元の値が返されることを常に期待していたため、ループに陥りました。また、期待されるリターンを次のようにハードコーディングしていました。

array.result.address_components(0).long_name

コンポーネントがすべての結果を返すとは期待できないため、それらに適切にアクセスし、一部が欠けている場合に何をすべきかを理解する新しい方法が必要です。

4

1 に答える 1

0

この問題を処理するために使用した case ステートメントを次に示します。うまくいきましたが、それが最もエレガントなソリューションかどうかはわかりません。

Dim street As String = ""
Dim city As String = ""
Dim state As String = ""
Dim country As String = ""
Dim zip As String = ""
Dim phone As String = ""
Dim website As String = ""

' No guareentee to the order of even if the data will be there so we check each type. '
For j = 0 To array.result.address_components.Length - 1
    Select Case array.result.address_components(j).types(0)
        Case "street_number"
            street += array.result.address_components(j).long_name()
        Case "route"
            street += " " & array.result.address_components(j).long_name()
        Case "locality"
            city = array.result.address_components(j).long_name()
        Case "administrative_area_level_1"
            state = array.result.address_components(j).long_name()
        Case "country"
            country = array.result.address_components(j).long_name()
        Case "postal_code"
            zip = array.result.address_components(j).long_name()
    End Select
Next

私は基本的に address_components を循環し、それらの型の値をチェックします。値が探しているものである場合は、それを割り当てます。後で Trim() を呼び出して、番地がない場合に追加した空白を削除します。

于 2012-05-04T14:01:53.030 に答える