1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidで郵便番号から住所を取得

Last updated at Posted at 2019-10-29

Androidで郵便番号から住所を取得したいと思ったことはないでしょうか。
私はあります。
さて、Geocoderを使用して住所を取得していきたいと思います。

検証環境

Pixcel 3a
Api 28

画面作成

content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:orientation="vertical"
            android:layout_centerInParent="true">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <EditText
                    android:id="@+id/zip_code1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:inputType="number"
                    android:maxLength="3"/>

                <EditText
                    android:id="@+id/zip_code2"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginStart="5dp"
                    android:inputType="number"
                    android:maxLength="4"/>

                <Button
                    android:id="@+id/search_button"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginStart="5dp"
                    android:text="検索"/>

            </LinearLayout>

            <TextView
                android:id="@+id/result"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:gravity="center"
                android:textSize="24dp"/>

        </LinearLayout>

    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

検索ボタンが押下されたら入力された郵便番号を元に住所を検索します

検索処理

MainActivity.kt

private fun searchAddressFromZipCode(zipCode: String): Address? {
        if (zipCode.length != 8) {
            return null
        }

        val geocoder = Geocoder(this, Locale.JAPAN)
        val address = geocoder.getFromLocationName(zipCode, 1)
        if (address != null && address.size != 0) {
            val latitude = address[0].latitude
            val longitude = address[0].longitude
            val addressList = geocoder.getFromLocation(latitude, longitude, 100)

            val filteredList = addressList.filter { x -> x.latitude == latitude && x.longitude == longitude }
            val sortedList = filteredList.sortedBy { x -> x.getAddressLine(0).length }
            sortedList.forEach { temp ->
                if (!temp.featureName.equals(zipCode)) {
                    return temp
                }
            }

            return if (addressList.isEmpty()) address[0] else addressList[0]
        }

        return null
    }

結果

上記コードで期待した住所が得られる場合もありますが、住所のデータが更新されていないのか一部正しく取得できない郵便番号がありました。(089-4324など)

郵便番号は町や村の統廃合で変更されうるものなので、下記の日本郵便が配布している郵便番号データを取り込んでそのデータを元に住所取得処理を実装するのが良いと思います。
郵便番号データダウンロードURL

Google Map Apiを使用する方法もあるようです。
便利すぎる!Google Maps APIで郵便番号から住所を取得する!サンプルそのまま使えます

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?