مقدمة في الجغرافيا المكانية والخرائط في Kotlin
Kotlin هي لغة برمجة حديثة، تُستخدم على نطاق واسع لتطوير تطبيقات Android. العمل مع الجغرافيا المكانية والخرائط هو أحد الإمكانيات الرئيسية للتطبيقات المحمولة. في هذه المقالة، سنستعرض المكتبات والأدوات الأساسية لدمج الخرائط، والحصول على إحداثيات المستخدم، وبناء المسارات في Kotlin.
1. Google Maps SDK لنظام Android
Google Maps هي الخدمة الأكثر شيوعًا لعرض الخرائط. لاستخدامها في Kotlin، يجب إضافة التبعية في ملف build.gradle:
dependencies { implementation 'com.google.android.gms:play-services-maps:18.2.0' implementation 'com.google.android.gms:play-services-location:21.0.1'}بعد إضافة مفتاح API في البيان (manifest)، يمكن عرض الخريطة في جزء (fragment):
import com.google.android.gms.maps.*import com.google.android.gms.maps.model.*
class MapsFragment : SupportMapFragment(), OnMapReadyCallback { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) getMapAsync(this) }
override fun onMapReady(googleMap: GoogleMap) { val sydney = LatLng(-33.852, 151.211) googleMap.addMarker(MarkerOptions().position(sydney).title("سيدني")) googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f)) }}2. الحصول على الموقع الحالي
للعمل مع الجغرافيا المكانية، يُستخدم Fused Location Provider. مثال للحصول على آخر موقع معروف:
import com.google.android.gms.location.*
class LocationHelper(private val context: Context) { private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
fun getLastLocation() { fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? -> location?.let { val lat = it.latitude val lng = it.longitude Log.d("Location", "خط العرض: $lat، خط الطول: $lng") } } }}للتتبع المستمر، استخدم LocationRequest و LocationCallback:
val locationRequest = LocationRequest.Builder( Priority.PRIORITY_HIGH_ACCURACY, 10000L).build()
val locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult) { for (location in locationResult.locations) { // معالجة الإحداثيات الجديدة } }}
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())3. OpenStreetMap ومكتبة osmdroid
إذا كنت بحاجة إلى بديل مجاني لـ Google Maps، استخدم osmdroid. الإضافة:
dependencies { implementation 'org.osmdroid:osmdroid-android:6.1.18'}مثال لعرض الخريطة وعلامة:
import org.osmdroid.config.Configurationimport org.osmdroid.tileprovider.tilesource.TileSourceFactoryimport org.osmdroid.views.MapViewimport org.osmdroid.util.GeoPointimport org.osmdroid.views.overlay.Marker
class OsmMapActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Configuration.getInstance().userAgentValue = packageName setContentView(R.layout.activity_osm)
val mapView = findViewById(R.id.map) mapView.setTileSource(TileSourceFactory.MAPNIK) mapView.controller.setZoom(15.0) val startPoint = GeoPoint(55.7558, 37.6173) // موسكو mapView.controller.setCenter(startPoint)
val marker = Marker(mapView) marker.position = startPoint marker.title = "موسكو" marker.snippet = "كراسنا"