
 نشانگرها مکانها را روی نقشه مشخص میکنند. نشانگر پیشفرض از یک آیکون استاندارد استفاده میکند که با ظاهر و حس نقشههای گوگل مشترک است. تغییر رنگ، تصویر یا نقطه لنگر آیکون از طریق API امکانپذیر است. نشانگرها اشیاء از نوع Marker هستند و با متد GoogleMap.addMarker(markerOptions) به نقشه اضافه میشوند.
 نشانگرها طوری طراحی شدهاند که تعاملی باشند. آنها به طور پیشفرض رویدادهای click را دریافت میکنند و اغلب با شنوندههای رویداد برای نمایش پنجرههای اطلاعات استفاده میشوند. تنظیم ویژگی draggable نشانگر روی true به کاربر اجازه میدهد موقعیت نشانگر را تغییر دهد. برای فعال کردن قابلیت جابجایی نشانگر، از یک فشار طولانی استفاده کنید.
به طور پیشفرض، وقتی کاربر روی یک نشانگر ضربه میزند، نوار ابزار نقشه در پایین سمت راست نقشه ظاهر میشود و به کاربر دسترسی سریع به برنامه تلفن همراه Google Maps را میدهد. میتوانید نوار ابزار را غیرفعال کنید. برای اطلاعات بیشتر، به راهنمای کنترلها مراجعه کنید.
اضافه کردن نشانگر
 مثال زیر نحوه اضافه کردن یک نشانگر به نقشه را نشان میدهد. نشانگر در مختصات -33.852,151.211 (سیدنی، استرالیا) ایجاد میشود و با کلیک روی آن، رشته «نشانگر در سیدنی» در یک پنجره اطلاعات نمایش داده میشود. 
کاتلین
override fun onMapReady(googleMap: GoogleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. val sydney = LatLng(-33.852, 151.211) googleMap.addMarker( MarkerOptions() .position(sydney) .title("Marker in Sydney") ) googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) }
جاوا
@Override public void onMapReady(GoogleMap googleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. LatLng sydney = new LatLng(-33.852, 151.211); googleMap.addMarker(new MarkerOptions() .position(sydney) .title("Marker in Sydney")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); }
نمایش اطلاعات اضافی در مورد یک نشانگر
یک نیاز رایج، نمایش اطلاعات اضافی در مورد یک مکان یا موقعیت مکانی هنگام ضربه زدن کاربر به یک نشانگر روی نقشه است. به راهنمای پنجرههای اطلاعات مراجعه کنید.
مرتبط کردن دادهها با یک نشانگر
 شما میتوانید با استفاده از Marker.setTag() یک شیء داده دلخواه را با یک نشانگر ذخیره کنید و با استفاده از Marker.getTag() شیء داده را بازیابی کنید. نمونه زیر نشان میدهد که چگونه میتوانید تعداد دفعاتی که یک نشانگر با استفاده از برچسبها کلیک شده است را بشمارید: 
کاتلین
/** * A demo class that stores and retrieves data objects with each marker. */ class MarkerDemoActivity : AppCompatActivity(), OnMarkerClickListener, OnMapReadyCallback { private val PERTH = LatLng(-31.952854, 115.857342) private val SYDNEY = LatLng(-33.87365, 151.20689) private val BRISBANE = LatLng(-27.47093, 153.0235) private var markerPerth: Marker? = null private var markerSydney: Marker? = null private var markerBrisbane: Marker? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_markers) val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment? mapFragment!!.getMapAsync(this) } /** Called when the map is ready. */ override fun onMapReady(map: GoogleMap) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker( MarkerOptions() .position(PERTH) .title("Perth") ) markerPerth?.tag = 0 markerSydney = map.addMarker( MarkerOptions() .position(SYDNEY) .title("Sydney") ) markerSydney?.tag = 0 markerBrisbane = map.addMarker( MarkerOptions() .position(BRISBANE) .title("Brisbane") ) markerBrisbane?.tag = 0 // Set a listener for marker click. map.setOnMarkerClickListener(this) } /** Called when the user clicks a marker. */ override fun onMarkerClick(marker: Marker): Boolean { // Retrieve the data from the marker. val clickCount = marker.tag as? Int // Check if a click count was set, then display the click count. clickCount?.let { val newClickCount = it + 1 marker.tag = newClickCount Toast.makeText( this, "${marker.title} has been clicked $newClickCount times.", Toast.LENGTH_SHORT ).show() } // Return false to indicate that we have not consumed the event and that we wish // for the default behavior to occur (which is for the camera to move such that the // marker is centered and for the marker's info window to open, if it has one). return false } }
جاوا
/** * A demo class that stores and retrieves data objects with each marker. */ public class MarkerDemoActivity extends AppCompatActivity implements GoogleMap.OnMarkerClickListener, OnMapReadyCallback { private final LatLng PERTH = new LatLng(-31.952854, 115.857342); private final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); private final LatLng BRISBANE = new LatLng(-27.47093, 153.0235); private Marker markerPerth; private Marker markerSydney; private Marker markerBrisbane; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_markers); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** Called when the map is ready. */ @Override public void onMapReady(GoogleMap map) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker(new MarkerOptions() .position(PERTH) .title("Perth")); markerPerth.setTag(0); markerSydney = map.addMarker(new MarkerOptions() .position(SYDNEY) .title("Sydney")); markerSydney.setTag(0); markerBrisbane = map.addMarker(new MarkerOptions() .position(BRISBANE) .title("Brisbane")); markerBrisbane.setTag(0); // Set a listener for marker click. map.setOnMarkerClickListener(this); } /** Called when the user clicks a marker. */ @Override public boolean onMarkerClick(final Marker marker) { // Retrieve the data from the marker. Integer clickCount = (Integer) marker.getTag(); // Check if a click count was set, then display the click count. if (clickCount != null) { clickCount = clickCount + 1; marker.setTag(clickCount); Toast.makeText(this, marker.getTitle() + " has been clicked " + clickCount + " times.", Toast.LENGTH_SHORT).show(); } // Return false to indicate that we have not consumed the event and that we wish // for the default behavior to occur (which is for the camera to move such that the // marker is centered and for the marker's info window to open, if it has one). return false; } }
در اینجا چند نمونه از سناریوهایی که ذخیره و بازیابی دادهها با نشانگرها مفید است، آورده شده است:
-  ممکن است برنامه شما انواع مختلفی از نشانگرها را پشتیبانی کند و شما بخواهید وقتی کاربر روی آنها کلیک میکند، با آنها رفتار متفاوتی داشته باشید. برای انجام این کار، میتوانید یک 
Stringبا نشانگری که نوع آن را نشان میدهد، ذخیره کنید. - ممکن است با سیستمی در ارتباط باشید که شناسههای رکورد منحصر به فردی دارد، که در آن نشانگرها نشاندهنده رکوردهای خاصی در آن سیستم هستند.
 - دادههای نشانگر ممکن است اولویتی را که باید هنگام تصمیمگیری در مورد شاخص z یک نشانگر استفاده شود، نشان دهند.
 
یک نشانگر را قابل کشیدن کنید
 شما میتوانید پس از اضافه شدن یک نشانگر به نقشه، آن را تغییر موقعیت دهید، البته تا زمانی که ویژگی draggable آن روی true تنظیم شده باشد. برای فعال کردن قابلیت کشیدن، نشانگر را لمس طولانی کنید. وقتی انگشت خود را از روی صفحه نمایش برمیدارید، نشانگر در آن موقعیت باقی میماند.
 نشانگرها به طور پیشفرض قابل کشیدن نیستند. شما باید قبل از اضافه کردن نشانگر به نقشه، یا با استفاده MarkerOptions.draggable(boolean) یا پس از اضافه شدن آن به نقشه، با استفاده Marker.setDraggable(boolean) آن را به طور صریح قابل کشیدن تنظیم کنید. میتوانید رویدادهای کشیدن نشانگر را همانطور که در رویدادهای کشیدن نشانگر توضیح داده شده است، دنبال کنید.
قطعه کد زیر یک نشانگر قابل جابجایی در پرت، استرالیا اضافه میکند.
کاتلین
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .draggable(true) )
جاوا
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .draggable(true));
سفارشی کردن یک نشانگر
این ویدیو روشهای استفاده از نشانگرها برای تجسم مکانها روی نقشه را نشان میدهد.
نشانگرها میتوانند یک تصویر سفارشی را به جای آیکون پیشفرض نمایش دهند. تعریف یک آیکون شامل تنظیم تعدادی از ویژگیهایی است که بر رفتار بصری نشانگر تأثیر میگذارند.
نشانگرها از طریق ویژگیهای زیر از سفارشیسازی پشتیبانی میکنند:
- سمت (الزامی)
 -  مقدار 
LatLngبرای موقعیت نشانگر روی نقشه. این تنها ویژگی مورد نیاز برای یک شیءMarkerاست. - لنگر
 - نقطهای روی تصویر که در موقعیت LatLng نشانگر قرار خواهد گرفت. این نقطه به طور پیشفرض در وسط پایین تصویر قرار دارد.
 - آلفا
 - میزان شفافیت نشانگر را تنظیم میکند. مقدار پیشفرض ۱.۰ است.
 - عنوان
 - رشتهای که هنگام ضربه زدن کاربر روی نشانگر، در پنجره اطلاعات نمایش داده میشود.
 - قطعه کد
 - متن اضافی که زیر عنوان نمایش داده میشود.
 - آیکون
 - یک بیتمپ که به جای تصویر نشانگر پیشفرض نمایش داده میشود.
 - قابل کشیدن
 -  اگر میخواهید به کاربر اجازه دهید نشانگر را جابجا کند، روی 
trueتنظیم کنید. مقدار پیشفرضfalseاست. - قابل مشاهده
 -  برای نامرئی کردن نشانگر، روی 
falseتنظیم کنید. مقدار پیشفرضtrueاست. - جهتگیری مسطح یا بیلبوردی
 - به طور پیشفرض، نشانگرها از جهت بیلبورد استفاده میکنند، به این معنی که آنها به جای سطح نقشه، نسبت به صفحه نمایش دستگاه رسم میشوند. چرخاندن، کج کردن یا بزرگنمایی نقشه، جهت نشانگر را تغییر نمیدهد. میتوانید جهت یک نشانگر را طوری تنظیم کنید که نسبت به زمین صاف باشد. نشانگرهای مسطح هنگام چرخش نقشه میچرخند و هنگام کج شدن نقشه، پرسپکتیو را تغییر میدهند. مانند نشانگرهای بیلبورد، نشانگرهای مسطح هنگام بزرگنمایی یا کوچکنمایی نقشه، اندازه خود را حفظ میکنند.
 - چرخش
 - جهت نشانگر، که بر حسب درجه در جهت عقربههای ساعت مشخص شده است. اگر نشانگر صاف باشد، موقعیت پیشفرض تغییر میکند. موقعیت پیشفرض برای یک نشانگر صاف، جهت شمال است. وقتی نشانگر صاف نیست، موقعیت پیشفرض رو به بالا است و چرخش به گونهای است که نشانگر همیشه رو به دوربین باشد.
 
قطعه کد زیر یک نشانگر ساده با آیکون پیشفرض ایجاد میکند.
کاتلین
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) )
جاوا
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation));
رنگ نشانگر را سفارشی کنید
 میتوان رنگ تصویر نشانگر پیشفرض را با ارسال یک شیء BitmapDescriptor به متد icon() سفارشی کرد. میتوانید از مجموعهای از رنگهای از پیش تعریفشده در شیء BitmapDescriptorFactory استفاده کنید، یا با استفاده از متد BitmapDescriptorFactory.defaultMarker(float hue) یک رنگ نشانگر سفارشی تنظیم کنید. hue مقداری بین 0 تا 360 است که نشاندهنده نقاط روی چرخ رنگ است. 
کاتلین
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) )
جاوا
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
میزان شفافیت نشانگر را سفارشی کنید
شما میتوانید میزان شفافیت یک نشانگر را با استفاده از متد MarkerOptions.alpha() کنترل کنید. آلفا باید به عنوان یک عدد اعشاری بین 0.0 و 1.0 مشخص شود، که در آن 0 کاملاً شفاف و 1 کاملاً مات است.
کاتلین
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .alpha(0.7f) )
جاوا
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker(new MarkerOptions() .position(melbourneLocation) .alpha(0.7f));
تصویر نشانگر را سفارشی کنید
 شما میتوانید تصویر نشانگر پیشفرض را با یک تصویر نشانگر سفارشی جایگزین کنید، که اغلب آیکون نامیده میشود. آیکونهای سفارشی همیشه به عنوان یک BitmapDescriptor تنظیم میشوند و با استفاده از یکی از متدهای کلاس BitmapDescriptorFactory تعریف میشوند.
-  
fromAsset(String assetName) - با استفاده از نام یک تصویر Bitmap در دایرکتوری assets، یک نشانگر سفارشی ایجاد میکند.
 -  
fromBitmap(Bitmap image) - یک نشانگر سفارشی از یک تصویر Bitmap ایجاد میکند.
 -  
fromFile(String fileName) - با استفاده از نام یک فایل تصویری Bitmap که در حافظه داخلی قرار دارد، یک آیکون سفارشی ایجاد میکند.
 -  
fromPath(String absolutePath) - یک نشانگر سفارشی از مسیر مطلق فایل یک تصویر Bitmap ایجاد میکند.
 -  
fromResource(int resourceId) - با استفاده از شناسه منبع یک تصویر Bitmap، یک نشانگر سفارشی ایجاد میکند.
 
قطعه کد زیر یک نشانگر با یک آیکون سفارشی ایجاد میکند.
کاتلین
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) )
جاوا
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
یک نشانگر را صاف کنید
نمادهای نشانگر معمولاً نسبت به صفحه نمایش رسم میشوند؛ چرخاندن، کج کردن یا بزرگنمایی نقشه، جهت نشانگر را تغییر نمیدهد. میتوانید جهت یک نشانگر را طوری تنظیم کنید که نسبت به زمین صاف باشد. نشانگرهایی که به این شکل جهتگیری شدهاند، هنگام چرخش نقشه میچرخند و هنگام کج کردن نقشه، پرسپکتیو آنها تغییر میکند. نشانگرهای مسطح هنگام بزرگنمایی یا کوچکنمایی نقشه، اندازه خود را حفظ میکنند.
 برای تغییر جهت نشانگر، ویژگی flat نشانگر را روی true تنظیم کنید. 
کاتلین
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .flat(true) )
جاوا
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .flat(true));
چرخاندن یک نشانگر
 شما میتوانید یک نشانگر را با استفاده از متد Marker setRotation() حول نقطه لنگر آن بچرخانید. چرخش از موقعیت پیشفرض بر حسب درجه در جهت عقربههای ساعت اندازهگیری میشود. وقتی نشانگر روی نقشه صاف است، موقعیت پیشفرض شمال است. وقتی نشانگر صاف نیست، موقعیت پیشفرض رو به بالا است و چرخش به گونهای است که نشانگر همیشه رو به دوربین باشد.
 مثال زیر نشانگر را ۹۰ درجه میچرخاند. تنظیم نقطه لنگر روی 0.5,0.5 باعث میشود نشانگر به جای پایهاش، حول مرکزش بچرخد. 
کاتلین
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .anchor(0.5f, 0.5f) .rotation(90.0f) )
جاوا
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .anchor(0.5f,0.5f) .rotation(90.0f));
شاخص z نشانگر
 شاخص z، ترتیب قرارگیری این نشانگر را نسبت به سایر نشانگرهای روی نقشه مشخص میکند. نشانگری با شاخص z بالا روی نشانگرهایی با شاخص z پایینتر رسم میشود. مقدار پیشفرض شاخص z، 0 است.
 با فراخوانی MarkerOptions.zIndex() ، همانطور که در قطعه کد زیر نشان داده شده است، z-index را روی شیء گزینههای نشانگر تنظیم کنید: 
کاتلین
map.addMarker( MarkerOptions() .position(LatLng(10.0, 10.0)) .title("Marker z1") .zIndex(1.0f) )
جاوا
map.addMarker(new MarkerOptions() .position(new LatLng(10, 10)) .title("Marker z1") .zIndex(1.0f));
 شما میتوانید با فراخوانی Marker.getZIndex() به z-index نشانگر دسترسی پیدا کنید و با فراخوانی Marker.setZIndex() میتوانید آن را تغییر دهید.
نشانگرها همیشه بالای لایههای کاشی و سایر پوششهای غیر نشانگری (پوششهای زمینه، چندخطیها، چندضلعیها و سایر اشکال) صرف نظر از شاخص z سایر پوششها رسم میشوند. نشانگرها در مقایسه با سایر پوششها، عملاً در یک گروه شاخص z جداگانه در نظر گرفته میشوند.
در مورد تأثیر z-index بر رویدادهای کلیک، در ادامه بخوانید.
مدیریت رویدادهای نشانگر
 API نقشهها به شما امکان میدهد به رویدادهای نشانگر گوش دهید و به آنها پاسخ دهید. برای گوش دادن به این رویدادها، باید شنونده مربوطه را روی شیء GoogleMap که نشانگرها به آن تعلق دارند، تنظیم کنید. هنگامی که رویداد روی یکی از نشانگرهای روی نقشه رخ میدهد، تابع فراخوانی شنونده با شیء Marker مربوطه که به عنوان پارامتر ارسال میشود، فراخوانی میشود. برای مقایسه این شیء Marker با ارجاع خودتان به یک شیء Marker ، باید از equals() و نه == استفاده کنید.
میتوانید به رویدادهای زیر گوش دهید:
رویدادهای کلیک نشانگر
 شما میتوانید از یک OnMarkerClickListener برای گوش دادن به رویدادهای کلیک روی نشانگر استفاده کنید. برای تنظیم این شنونده روی نقشه، GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) را فراخوانی کنید. هنگامی که کاربر روی یک نشانگر کلیک میکند، onMarkerClick(Marker) فراخوانی میشود و نشانگر به عنوان یک آرگومان ارسال میشود. این متد یک مقدار بولی برمیگرداند که نشان میدهد آیا شما از این رویداد استفاده کردهاید یا خیر (یعنی میخواهید رفتار پیشفرض را سرکوب کنید). اگر false را برگرداند، رفتار پیشفرض علاوه بر رفتار سفارشی شما رخ خواهد داد. رفتار پیشفرض برای رویداد کلیک نشانگر، نمایش پنجره اطلاعات آن (در صورت وجود) و حرکت دوربین به گونهای است که نشانگر در مرکز نقشه قرار گیرد.
تأثیر z-index بر رویدادهای کلیک:
- وقتی کاربر روی مجموعهای از نشانگرها کلیک میکند، رویداد کلیک برای نشانگری که بالاترین z-index را دارد، فعال میشود.
 - حداکثر یک رویداد به ازای هر کلیک فعال میشود. به عبارت دیگر، کلیک به نشانگرها یا سایر پوششها با مقادیر z-index پایینتر منتقل نمیشود.
 - کلیک کردن روی یک خوشه از نشانگرها باعث میشود کلیکهای بعدی در خوشه بچرخند و هر کدام را به نوبت انتخاب کنند. ترتیب این چرخه ابتدا شاخص z و سپس نزدیکی به نقطه کلیک را در اولویت قرار میدهد.
 - اگر کاربر خارج از محدودهی نزدیک خوشه کلیک کند، API خوشه را دوباره محاسبه میکند و وضعیت چرخه کلیک را طوری تنظیم مجدد میکند که از ابتدا شروع شود.
 - صرف نظر از z-index سایر overlayها، نشانگرها در مقایسه با سایر overlayها یا اشکال (چندخطیها، چندضلعیها، دایرهها و/یا overlayهای زمینه) در یک گروه z-index جداگانه در نظر گرفته میشوند. اگر چندین نشانگر، overlay یا شکل روی هم قرار گرفته باشند، رویداد کلیک ابتدا در خوشه نشانگرها چرخیده میشود.
 
رویدادهای کشیدن نشانگر
 شما میتوانید از یک OnMarkerDragListener برای گوش دادن به رویدادهای کشیدن روی یک نشانگر استفاده کنید. برای تنظیم این شنونده روی نقشه، GoogleMap.setOnMarkerDragListener را فراخوانی کنید. برای کشیدن یک نشانگر، کاربر باید انگشت خود را برای مدت طولانی روی نشانگر نگه دارد. وقتی کاربر انگشت خود را از روی صفحه نمایش برمیدارد، نشانگر در آن موقعیت باقی میماند. وقتی یک نشانگر کشیده میشود، در ابتدا onMarkerDragStart(Marker) فراخوانی میشود. در حالی که نشانگر کشیده میشود، onMarkerDrag(Marker) دائماً فراخوانی میشود. در پایان کشیدن onMarkerDragEnd(Marker) فراخوانی میشود. میتوانید موقعیت نشانگر را در هر زمانی با فراخوانی Marker.getPosition() دریافت کنید.