জিওকোডিং দিয়ে ঠিকানা থেকে স্থানাঙ্ক বের করা
এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে এন্ড্রয়েডে একটি ঠিকানা থেকে অক্ষাংশ (latitude) এবং দ্রাঘিমাংশ (longitude) বের করা যায়। Geocoder ক্লাস ব্যবহার করে এটিকে বাস্তবায়ন করা হয়েছে।
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট XML ফাইল কনফিগার করুন
res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textViewAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:text="ঠিকানা লিখুন: "
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<EditText
android:id="@+id/editTextAddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textViewAddress"
android:singleLine="true"
android:text="" />
<Button
android:id="@+id/addressButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textViewAddress"
android:layout_marginTop="50dp"
android:layout_toEndOf="@+id/textViewAddress"
android:text="Lat/Long দেখান" />
<TextView
android:id="@+id/latLongTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/textViewAddress"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/background_dark" />
</RelativeLayout>
ধাপ ৩: MainActivity.kt ফাইলে লজিক লিখুন
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var addressButton: Button
private lateinit var textViewAddress: TextView
lateinit var textViewLatLong: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
textViewAddress = findViewById(R.id.textViewAddress)
textViewLatLong = findViewById(R.id.latLongTV)
addressButton = findViewById(R.id.addressButton)
addressButton.setOnClickListener {
val editText = findViewById<EditText>(R.id.editTextAddress)
val address = editText.text.toString()
val locationAddress = GeoCodingLocation()
locationAddress.getAddressFromLocation(address, applicationContext, GeoCoderHandler(this))
}
}
companion object {
private class GeoCoderHandler(private val mainActivity: MainActivity) : Handler() {
override fun handleMessage(message: Message) {
val locationAddress: String? = when (message.what) {
1 -> {
val bundle = message.data
bundle.getString("address")
}
else -> null
}
mainActivity.textViewLatLong.text = locationAddress
}
}
}
}
ধাপ ৪: GeoCodingLocation.kt ক্লাস তৈরি করুন
একটি নতুন কোটলিন ক্লাস তৈরি করে নিচের কোড যোগ করুন:
import android.content.Context
import android.location.Address
import android.location.Geocoder
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.util.Log
import java.io.IOException
import java.util.*
class GeoCodingLocation {
private val TAG = "GeoCodeLocation"
fun getAddressFromLocation(locationAddress: String, context: Context, handler: Handler) {
val thread = object : Thread() {
override fun run() {
val geoCoder = Geocoder(context, Locale.getDefault())
var result: String? = null
try {
val addressList = geoCoder.getFromLocationName(locationAddress, 1)
if (addressList != null && addressList.size > 0) {
val address = addressList.get(0) as Address
val sb = StringBuilder()
sb.append(address.latitude).append("\n")
sb.append(address.longitude).append("\n")
result = sb.toString()
}
} catch (e: IOException) {
Log.e(TAG, "Unable to connect to GeoCoder", e)
} finally {
val message = Message.obtain()
message.target = handler
message.what = 1
val bundle = Bundle()
result = ("Address: $locationAddress" + "\n\nLatitude and Longitude: \n" + result)
bundle.putString("address", result)
message.data = bundle
message.sendToTarget()
}
}
}
thread.start()
}
}
ধাপ ৫: AndroidManifest.xml-এ লোকেশন পারমিশন যোগ করুন
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
অ্যাপ্লিকেশন চালানোর পদ্ধতি
ডিভাইস সংযুক্ত করে Run করুন। ঠিকানা লিখে "Lat/Long দেখান" বাটনে ক্লিক করলে অক্ষাংশ ও দ্রাঘিমাংশ দেখাবে।