how to implement OpenStreetMap in android

To implement OpenStreetMap in Android, you can use the following steps:


  • Add the OpenStreetMap library to your project's dependencies. You can do this by adding the following line to your project's build.gradle file:


implementation 'org.osmdroid:osmdroid-android:6.1.14'

  • Add the required permissions to your app's AndroidManifest.xml file:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/> 

  • Create a layout file for the map view. You can use a RelativeLayout or a FrameLayout to contain the map view. Here's an example layout file:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".Activity.MainActivity">

<org.osmdroid.views.MapView
android:id="@+id/osmmap"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</RelativeLayout>


  • In your activity, initialize the map view and set its properties. Here's an example code:


import android.app.ProgressDialog
import android.graphics.Rect
import android.location.GpsStatus
import android.location.Location
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.common.api.GoogleApiClient
import com.google.android.gms.location.LocationRequest
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.*
import com.nic.supperapp.R
import com.nic.supperapp.databinding.ActivityMainBinding
import org.osmdroid.api.IMapController
import org.osmdroid.config.Configuration
import org.osmdroid.events.MapListener
import org.osmdroid.events.ScrollEvent
import org.osmdroid.events.ZoomEvent
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay

class MainActivity : AppCompatActivity(), MapListener, GpsStatus.Listener {






lateinit var mMap: MapView
lateinit var controller: IMapController;
lateinit var mMyLocationOverlay: MyLocationNewOverlay;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
Configuration.getInstance().load(
applicationContext,
getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE)
)
mMap = binding.osmmap
mMap.setTileSource(TileSourceFactory.MAPNIK)
mMap.mapCenter
mMap.setMultiTouchControls(true)
mMap.getLocalVisibleRect(Rect())


mMyLocationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(this), mMap)
controller = mMap.controller

mMyLocationOverlay.enableMyLocation()
mMyLocationOverlay.enableFollowLocation()
mMyLocationOverlay.isDrawAccuracyEnabled = true
mMyLocationOverlay.runOnFirstFix {
runOnUiThread {
controller.setCenter(mMyLocationOverlay.myLocation);
controller.animateTo(mMyLocationOverlay.myLocation)
}
}
// val mapPoint = GeoPoint(latitude, longitude)

controller.setZoom(6.0)

Log.e("TAG", "onCreate:in ${controller.zoomIn()}")
Log.e("TAG", "onCreate: out ${controller.zoomOut()}")

// controller.animateTo(mapPoint)
mMap.overlays.add(mMyLocationOverlay)

mMap.addMapListener(this)


}

override fun onScroll(event: ScrollEvent?): Boolean {
// event?.source?.getMapCenter()
Log.e("TAG", "onCreate:la ${event?.source?.getMapCenter()?.latitude}")
Log.e("TAG", "onCreate:lo ${event?.source?.getMapCenter()?.longitude}")
// Log.e("TAG", "onScroll x: ${event?.x} y: ${event?.y}", )
return true
}

override fun onZoom(event: ZoomEvent?): Boolean {
// event?.zoomLevel?.let { controller.setZoom(it) }


Log.e("TAG", "onZoom zoom level: ${event?.zoomLevel} source: ${event?.source}")
return false;
}

override fun onGpsStatusChanged(event: Int) {


TODO("Not yet implemented")
}


}


  • Run the app and you should see a map view centered at the specified location.

 

Comments

Popular posts from this blog

How to Integrate or Work with Open Street Map (OSM) in an Android App (Kotlin)

ListView in android with api and volley Network Library in android Studio.