Google Maps SDK — مجموعهای از ابزارهای Google برای یکپارچهسازی نقشههای تعاملی، ژئوکدینگ، مسیرها و جستجوی مکانها در برنامههای موبایل و وب است. SDK شامل Maps SDK برای Android و iOS، Places API برای کار با دادههای جغرافیایی و Directions API برای ساخت مسیرها میشود. سرویسهای Google Maps روزانه بیش از 100 میلیارد درخواست را پردازش میکنند که Maps SDK را به یکی از پربازدهترین راهحلهای نقشهبرداری تبدیل میکند. به گفته Google Maps Platform Documentation, 2025، SDK در 60٪ از تمام برنامههای موبایل دارای نقشه استفاده میشود.
نکات اصلی
Google Maps SDK — یک پلتفرم جامع برای توسعهدهندگان است که ابزارهایی برای کار با دادههای جغرافیایی در برنامهها فراهم میکند. این پلتفرم شامل چندین API است: Maps SDK (نمایش نقشهها)، Routes API (مسیرها)، Places API (جستجوی مکانها و دادههای جغرافیایی) و Geocoding API (تبدیل آدرسها به مختصات). هر SDK به طور جداگانه یکپارچه میشود و مدل صورتحساب خاص خود را دارد.
برخلاف Apple MapKit، Google Maps SDK مجموعه داده گستردهتری ارائه میدهد: اطلاعات درباره 250 میلیون مکان، ترافیک بلادرنگ، پانوراماهای Street View و Indoor Maps برای فضاهای داخلی. به گفته Statista (2025)، Google Maps Platform 75٪ از بازار SDKهای نقشهبرداری در برنامههای موبایل را در اختیار دارد. مزیت کلیدی — یک کلید API واحد برای تمام سرویسهای Google Maps و یکپارچهسازی بینپلتفرمی (Android، iOS، وب).
کلید API — عنصر اجباری برای کار با Google Maps SDK است. کلید در Google Cloud Console ایجاد میشود و به پروژه خاصی متصل میشود. برای Android باید SHA-1 گواهی برنامه و برای iOS Bundle Identifier مشخص شود. Google توصیه میکند استفاده از کلید API را بر اساس آدرسهای IP، ارجاعدهندههای HTTP یا بستههای برنامه برای جلوگیری از دسترسی غیرمجاز محدود کنید.
Maps SDK برای Android — کتابخانهای است که نقشههای تعاملی Google را در داخل برنامه Android از طریق MapView یا SupportMapFragment نمایش میدهد. SDK پشتیبانی میکند: سبکهای سفارشی نقشه، نشانگرها با پنجرههای اطلاعاتی، چندضلعیها و چندخطیها، لایههای ترافیک و حملونقل، و همچنین رویدادهای لمسی و ژستها (بزرگنمایی، چرخش، کج کردن). نقشهها از OpenGL برای رندرینگ استفاده میکنند و 60 FPS را در دستگاههای مدرن تضمین میکنند.
یکپارچهسازی با افزودن وابستگی در build.gradle و پیکربندی کلید API از طریق AndroidManifest.xml آغاز میشود. Google Maps SDK برای Android به Google Play Services در دستگاه نیاز دارد. اگر Google Play Services موجود نباشد (مثلاً در دستگاههای Huawei بدون سرویسهای Google)، نقشهها نمایش داده نمیشوند. برای چنین مواردی، Google استفاده از راهحلهای جایگزین یا WebView با JavaScript Maps API را توصیه میکند.
// AndroidManifest.xml — فراداده کلید API
// <meta-data android:name="com.google.android.geo.API_KEY"
// android:value="YOUR_API_KEY"/>
// قطعه نقشه در Activity
class MapActivity : AppCompatActivity(),
OnMapReadyCallback {
private lateinit var map: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
val sydney = LatLng(-33.8688, 151.2093)
map.addMarker(MarkerOptions().position(sydney)
.title("Sydney"))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(sydney, 12f))
}
}Google Maps SDK در Android از Indoor Maps — نمایش نقشههای ساختمانها (فرودگاهها، مراکز خرید) پشتیبانی میکند. برای فعالسازی کافی است map.isIndoorEnabled = true تنظیم شود. لایه ترافیک (Traffic Layer) تراکم جادهها را در زمان واقعی نشان میدهد — دادهها هر 2-5 دقیقه بهروزرسانی میشوند. لایه حملونقل (Transit Layer) مسیرهای حملونقل عمومی را در شهرهای پشتیبانیشده نمایش میدهد.
Maps SDK برای iOS همان قابلیتهای نسخه Android را فراهم میکند، اما برای پلتفرم Apple تطبیق داده شده است. یکپارچهسازی از طریق Swift Package Manager یا CocoaPods انجام میشود. Maps SDK برای iOS از سرورهای Google برای رندرینگ نقشهها استفاده میکند، اما میتواند با Apple MapKit برای ناوبری بومی کار کند. SDK از iOS 15 و بالاتر و همچنین SwiftUI از طریق UIViewRepresentable پشتیبانی میکند.
ویژگی نسخه iOS — پیکربندی اجباری Info.plist با مشخص کردن کلید API و افزودن طرح URL برای Google Maps. برخلاف Android، iOS SDK به Google Play Services نیاز ندارد، اما برای برخی عملکردها (مثلاً باز کردن نقشهها در ناوبری) به برنامه Google Maps نصبشده نیاز دارد. برای پروژههای بینپلتفرمی، Google یک کلید API واحد برای پروژه فعالشده برای هر دو پلتفرم را توصیه میکند.
import GoogleMaps
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(
withLatitude: 55.7558,
longitude: 37.6173,
zoom: 10
)
let mapView = GMSMapView.map(
withFrame: view.frame,
camera: camera
)
self.view = mapView
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(
latitude: 55.7558,
longitude: 37.6173
)
marker.title = "Moscow"
marker.map = mapView
}
}در iOS Google Maps SDK از سبکهای سفارشی از طریق فایل JSON در قالب Google Maps Styling پشتیبانی میکند. سبکها امکان تغییر رنگ جادهها، آب، پارکها و ساختمانها را مطابق با طراحی برنامه فراهم میکنند. همچنین Heatmap Layer برای تجسم تراکم دادهها، KML و GeoJSON برای وارد کردن دادههای جغرافیایی از منابع خارجی پشتیبانی میشود.
Places API — سرویس Google Maps Platform برای دریافت اطلاعات درباره مکانهای جغرافیایی است: آدرسها، مختصات، امتیاز، ساعات کاری، عکسها و نظرات. Places API در دو حالت کار میکند: Place Search (جستجوی مکان بر اساس متن یا شعاع) و Place Details (دریافت اطلاعات دقیق درباره یک مکان خاص با Place ID). SDK برای Android، iOS و به صورت REST API در دسترس است.
Places SDK برای Android و iOS امکان تعبیه تکمیل خودکار آدرسها (Place Autocomplete) را مستقیماً در فیلدهای متنی برنامه فراهم میکند. این یک ویژگی کلیدی برای برنامههای تحویل، تاکسی و لجستیک است — کاربر شروع به تایپ آدرس میکند و SDK گزینههایی از پایگاه Google Maps پیشنهاد میدهد. Place Autocomplete خطاهای ورود آدرس را در مقایسه با ورود دستی 80٪ کاهش میدهد. صورتحساب Places API: 2.83 دلار به ازای هر 1000 درخواست Place Details، Place Search — 4.71 دلار به ازای هر 1000.
// جستجوی مکان بر اساس متن در Android
val placesClient = Places.createClient(context)
val request = FindCurrentPlaceRequest.builder(
listOf(Place.Field.NAME, Place.Field.ADDRESS)
).build()
placesClient.findCurrentPlace(request)
.addOnSuccessListener { response ->
for (placeLikelihood in response.placeLikelihoods) {
Log.d("Places", "${placeLikelihood.place.name} - ${placeLikelihood.likelihood}")
}
}Geocoding API — ژئوکدینگ معکوس (مختصات → آدرس) و مستقیم (آدرس → مختصات). برای تبدیل آدرس واردشده توسط کاربر به مختصات برای نمایش روی نقشه استفاده میشود. Geocoding API به طور جداگانه صورتحساب میشود: 4.71 دلار به ازای هر 1000 درخواست. Google روزانه 200 درخواست رایگان به ازای هر حساب برای آزمایش ارائه میدهد.
Directions API — سرویسی برای محاسبه مسیرها بین دو یا چند نقطه با در نظر گرفتن نوع حملونقل (خودرو، پیاده، دوچرخه، حملونقل عمومی). API چندین مسیر جایگزین را با ذکر فاصله، زمان سفر، راهنمای گامبهگام و چندخطی برای رسم مسیر روی نقشه برمیگرداند. Directions API به صورت REST API و از طریق SDKهای کلاینت در دسترس است.
قابلیت توسعهیافته — Routes API (API جدید که توسط Google از سال 2024 توصیه شده است). Routes API مسیریابی بهبودیافته با در نظر گرفتن ترافیک بلادرنگ، ردپای زیستمحیطی (eco-friendly routing) و تحلیل پیشبینیکننده زمان رسیدن را ارائه میدهد. به گفته Google، Routes API زمان سفر را در شرایط شهری 20٪ دقیقتر از Directions API کلاسیک محاسبه میکند. صورتحساب Routes API: 5.00 دلار به ازای هر 1000 درخواست.
// درخواست مسیر از طریق Routes API
val client = OkHttpClient()
val requestBody = """
{
"origin": {"location": {"latLng": {"latitude": 55.75, "longitude": 37.61}}},
"destination": {"location": {"latLng": {"latitude": 55.79, "longitude": 37.79}}},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE"
}
""".trimIndent()
val request = Request.Builder()
.url("https://routes.googleapis.com/directions/v2:computeRoutes")
.header("X-Goog-Api-Key", apiKey)
.header("Content-Type", "application/json")
.post(requestBody.toRequestBody())
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
Log.d("Route", response.body?.string() ?: "")
}
})Directions API تا 25 نقطه میانی (waypoints) را برای یک مسیر پشتیبانی میکند. نقاط میانی میتوانند به صورت مختصات یا Place ID تعیین شوند. برای بهینهسازی ترتیب نقاط (مسئله فروشنده دورهگرد) از پارامتر optimize:true استفاده کنید. صورتحساب: Directions API — 4.71 دلار به ازای هر 1000 درخواست (تا 10 نقطه)، هر نقطه اضافی 50٪ به هزینه درخواست اضافه میکند.
Google Maps SDK امکانات گستردهای برای سفارشیسازی فراهم میکند: تغییر طرح رنگی نقشه از طریق سبکهای JSON، افزودن نشانگرهای سفارشی (از جمله متحرک)، پنجرههای اطلاعاتی (InfoWindow) با محتوای دلخواه و لایههای گرافیکی (GroundOverlay، Circle، Polygon). سفارشیسازی امکان تطبیق نقشه با برند برنامه و بهبود تجربه کاربری را فراهم میکند.
سبکسازی نقشهها از طریق Google Maps Styling Wizard یا فایل JSON در قالب Map Style انجام میشود. میتوان رنگ جادهها (featureType: road)، آب (water)، پارکها (poi.park)، ساختمانها (building) و سایر عناصر را تغییر داد. برای نقشهها در تم تیره برنامه از سبک شب با پسزمینه تیره و رنگهای ملایم استفاده کنید. Google Maps تا 100 قانون سبک را در یک فایل JSON پشتیبانی میکند.
| عنصر سفارشیسازی | روش/کلاس | توضیحات |
|---|---|---|
| نشانگرها | MarkerOptions.icon(BitmapDescriptor) | آیکون سفارشی نشانگر از منابع یا URL |
| چندخطیها | PolylineOptions.color(width) | خطوط برای نمایش مسیرها با رنگ سفارشی |
| چندضلعیها | PolygonOptions.fillColor(strokeColor) | پر کردن ناحیه با شفافیت و حاشیه |
| InfoWindow | GoogleMap.setInfoWindowAdapter | محتوای سفارشی پنجره اطلاعاتی (هر View) |
| GroundOverlay | GroundOverlayOptions.image(BitmapDescriptor) | تصویر قرارگرفته روی ناحیه نقشه |
Clustering — ترکیب نشانگرها در خوشهها هنگام تعداد زیاد نقاط روی نقشه. Google Maps SDK برای Android و iOS شامل ابزار خوشهبندی داخلی (com.google.maps.android:android-maps-utils) است. خوشهبندی از پر شدن نقشه با نشانگرها در بزرگنماییهای زیر سطح مشخص جلوگیری میکند. هنگام بزرگنمایی، خوشه به طور خودکار به نشانگرهای جداگانه تقسیم میشود. به گفته Google، خوشهبندی عملکرد نقشه را با 1000+ نشانگر 40٪ بهبود میبخشد.
نمونه کامل نمایش نقشه با نشانگر سفارشی، چندخطی مسیر و پنجره اطلاعاتی. برنامه نقشه مسکو را با نقطه مورد علاقه و مسیر رسیدن به آن از مرکز شهر نمایش میدهد. کد قابلیتهای اصلی Google Maps SDK را نشان میدهد: افزودن نشانگر، رسم چندخطی، حرکت دوربین و پردازش کلیکها.
class MapDemoActivity : AppCompatActivity(), OnMapReadyCallback {
override fun onMapReady(map: GoogleMap) {
val kremlin = LatLng(55.7513, 37.6189)
val gorkyPark = LatLng(55.7311, 37.6116)
map.addMarker(MarkerOptions()
.position(kremlin)
.title("کرملین")
.icon(BitmapDescriptorFactory.defaultMarker(
BitmapDescriptorFactory.HUE_RED)))
map.addPolyline(PolylineOptions()
.add(kremlin, gorkyPark)
.width(5f)
.color(Color.parseColor("#2196F3")))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(kremlin, 13f))
map.setOnInfoWindowClickListener { marker ->
Toast.makeText(this,
"${marker.title} clicked",
Toast.LENGTH_SHORT).show()
}
}
}توصیههای عملکرد: از بارگذاری ناهمگام نشانگرها از طریق ClusterManager هنگام بیش از 200 نقطه استفاده کنید، تعداد چندخطیهای قابل مشاهده را محدود کنید (Google بیش از 100 همزمان را توصیه نمیکند)، از Lite Mode برای نقشههایی که نیاز به عملکرد کامل ندارند استفاده کنید (پیمایش بدون تغییر بزرگنمایی). Lite Mode مصرف حافظه را 50٪ کاهش میدهد و بارگذاری نقشه را 2 برابر سرعت میبخشد.
Google Maps Platform از مدل پرداخت Pay-as-you-go با محدودیت اعتبار رایگان ماهانه 200 دلار استفاده میکند. هر API به طور جداگانه صورتحساب میشود: Maps SDK — 2.83 دلار به ازای هر 1000 بارگذاری نقشه، Places API — 4.71 دلار به ازای هر 1000 درخواست، Directions API — 4.71 دلار به ازای هر 1000 مسیر. Routes API (توصیهشده) — 5.00 دلار به ازای هر 1000 درخواست. محدودیت رایگان 200 دلار معمولاً تا 70 000 بارگذاری نقشه در ماه را پوشش میدهد.
برای پروژههای پربار، Google تخفیفهایی برای حجم از 500 000 درخواست در ماه ارائه میدهد. Google Maps SDK برای نمایش نقشه پایه بدون تعامل صورتحساب نمیشود — هزینه فقط برای بارگذاری (map load) دریافت میشود. هر بار که کاربر صفحه دارای نقشه را باز میکند، این یک بارگذاری محسوب میشود. بهینهسازی: ذخیره کاشیهای نقشه تعداد بارگذاریها را در بازگشایی مجدد کاهش میدهد.
محدودیتها: 300 درخواست در دقیقه برای Places API (قابل افزایش تا 3000 از طریق سهمیه در Cloud Console). برای Directions API — 100 درخواست در دقیقه. تجاوز از محدودیت خطای OVER_QUERY_LIMIT را برمیگرداند. Google استفاده از تأخیر نمایی (exponential backoff) را برای درخواستهای تکراری توصیه میکند. نظارت بر مصرف در Google Cloud Console با تأخیر تا 5 دقیقه در دسترس است.
سؤالات متداول
Google Maps SDK بر اساس مدل pay-as-you-go صورتحساب میشود: 2.83 دلار به ازای هر 1000 بارگذاری نقشه. هر ماه Google 200 دلار اعتبار رایگان ارائه میدهد که تا 70 000 بارگذاری را پوشش میدهد. Places API و Directions API به طور جداگانه صورتحساب میشوند. برای پروژههای کوچک با مخاطب تا 10 000 کاربر، هزینهها معمولاً 10-50 دلار در ماه است.
بله، Google Maps SDK از نقشههای آفلاین از طریق ذخیره کاشیها پشتیبانی میکند. SDK به طور خودکار تا 1000 کاشی (حدود 10x10 کیلومتر منطقه) را ذخیره میکند. برای پشتیبانی کامل آفلاین از Google Maps Offline API برای Android استفاده کنید که امکان دانلود نقشه یک منطقه کامل را فراهم میکند. نقشههای آفلاین از ترافیک، مسیرها و Places API پشتیبانی نمیکنند.
Google Maps SDK مجموعه داده گستردهتری ارائه میدهد: 250 میلیون مکان، ترافیک بلادرنگ، Street View، Indoor Maps. Apple MapKit رایگان است اما دادههای کمتری در خارج از ایالات متحده و اروپا دارد. Google SDK به کلید API و پرداخت نیاز دارد، Apple MapKit خیر. برای پروژههای بینپلتفرمی، Google Maps SDK با یک کلید API واحد برای هر دو پلتفرم ترجیح داده میشود.
کلید API در Google Cloud Console از طریق بخش APIs & Services → Credentials ایجاد میشود. برای فعالسازی باید کلید را به حساب پرداختی متصل کنید، اما Google ماهانه 200 دلار اعتبار رایگان ارائه میدهد. کلید را میتوان بر اساس IP، HTTP referrer یا بسته Android / iOS Bundle ID محدود کرد. برای آزمایش نیازی به وارد کردن اطلاعات کارت بانکی نیست.
بله، Google Maps SDK از خوشهبندی از طریق کتابخانه android-maps-utils (Android) و Google-Maps-iOS-Utils (iOS) پشتیبانی میکند. ClusterManager به طور خودکار نشانگرهای نزدیک را در یک خوشه با نشانگر عددی ترکیب میکند. هنگام بزرگنمایی، خوشه به نشانگرهای جداگانه تقسیم میشود. خوشهبندی برای 200+ نشانگر برای حفظ عملکرد نقشه ضروری است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید