استفاده از نقشه گوگل در برنامه‌های آندروید - قسمت دوم

استفاده از نقشه گوگل در برنامه‌های آندروید - قسمت دوم

1
0
16

در قسمت اول استفاده از نقشه گوگل در برنامه‌های آندروید با نحوه ی ایجاد یک پروژه در برنامه IntelliJ و فراهم آوری پیش نیازهای لازم برای استفاده از نقشه گوگل در برنامه های آندروید آشنا شدید. در ادامه این مقاله وارد بخش کد نویسی شده و با نحوه نمایش یک نقشه ساده در برنامه و پس از آن با نحوه استفاده از مارکر، نمایش موقعیت فعلی بر روی نقشه، استفاده از انواع نقشه ها و استفاده از متد Geocode آشنا خواهید شد.

 

3- نمایش نقشه

3-1- Permission ها

برای استفاده از google map نیاز به تعدادی permission دارید که مطابق معمول آن‌ها را در فایل androidManifest.xml درج می­کنید. این permission ها عبارت‌اند از:

1-  INTERNET: چک کردن وضعیت اینترنت

2-  ACCESS_NETWORK_STATE: چک کردن اینکه می­تواند داده موردنظر را دانلود کند یا نه.

3- WRITE_EXTERNAL_STORAGE: ذخیره اطلاعات google map در حافظه

4-  READ_GSERVICES: مربوط به Google Play Service است.

 

همچنین برای مشخص کردن ورژن OpenGLES (که یک کتابخانه گرافیکی است) از glEsVersion استفاده کنید و required آن را True قرار دهید. این باعث می­شود که وقتی برنامه در google play store قرار می­گیرد، فقط برای گوشی­ هایی قابل‌مشاهده و دانلود باشد که ورژن OpenGLES آن‌ها 2.0 به بالا باشد.

 

3-2- طراحی layout

برای نمایش نقشه، لازم است که layout شامل یک fragment یا MapView باشد. این حداقل کامپوننت موردنیاز است و می­توان با استفاده از آن نقشه را نمایش داد.

اما در اینجا از کامپوننت های دیگری هم استفاده‌شده که برای استفاده از دیگر امکانات این پروژه هستند و بنا بر نیاز هر پروژه می­توانند تغییر کنند.

Layout ای که برای این پروژه طراحی‌شده به شکل زیر است:

 

همان‌طور که مشخص است در قسمت بالای layout یک LinearLayout قرار دارد و در آن کامپوننت های TextView، EditText و Button قرار دارد. در قسمت پایین یک fragment قرار داده‌شده است.

 

 

در این پروژه برای نمایش نقشه از fragment استفاده‌شده است. از MapView هم می­توان به‌جای fragment استفاده کرد اما معمولاً fragment استفاده می­شود.

همان‌طور که مشاهده می­کنید مقدار android:name برابر با com.google.android.gms.maps.SupportMapFragment قرار داده‌شده است و این به آن معنی است که fragment یک نمونه از کلاس SupportMapFragment است و این همان کلاسی است که نقشه را load می­کند. این کلاس برای SDK 2.2 به بالا شناخته‌شده است. کلاس MapFragment هم به این منظور می­توان استفاده کرد ولی مشکل این است که روی SDK 3.0 به بالا کار می­کند و برای ورژن های پایین­تر شناخته‌شده نیست.

 

3-3- نوشتن Activity

 

1- ارث‌بری از FragmentActivity

ازآنجاکه در layout از fragment استفاده‌شده، لازم است که کلاس اصلی برنامه، به‌جای Activity از FragmentActivity ارث‌بری کند.

 

 

2- چک کردن Google Play Service

متد serviceOk برای چک کردن ارتباط برنامه با GooglePlayService نوشته‌شده است و در onCreate فراخوانی شده است.

 

 

3- گرفتن نقشه از fragment برای استفاده در برنامه

متد initMap برای گرفتن نقشه از fragment نوشته‌شده است. googleMap یک نمونه از کلاس GoogleMap است که در سطح کلاس تعریف‌شده است. getMap متدی از کلاس SupportMapFragment است که نقشه را از fragment ای که روی layout قرار دارد می­گیرد و از این به بعد می­توانیم با استفاده از googleMap به نقشه‌مان دسترسی داشته باشیم.

 

4- نمایش مارکر

 مارکرها برای علامت‌گذاری نقشه هستند. در نقشه­های گوگل، مارکرهایی وجود دارند که ما می­توانیم نمایش آن‌ها را فعال یا غیرفعال کنیم، یا آیکون پیش‌فرض مارکر را به آیکون دلخواه خودمان تغییر دهیم.

متد setMarker برای تنظیم مارکر روی نقشه طراحی‌شده و هر جا که نیاز به استفاده از آن بوده call شده است.

 

در این متد، از کلاس MarkerOptions استفاده‌شده که شامل متدهایی است که تنظیمات مربوط به مارکر را انجام می­دهند. متدهای title و snippet مربوط به پنجره‌ای هستند که هنگام کلیک روی مارکر نمایش داده می­شود. متد position محل نمایش مارکر را تعیین می­کند. به‌وسیله متد icon می­توانیم آیکون مربوط به مارکر را به هر آیکونی که دلخواه خودمان است تغییر دهیم. در اینجا فقط رنگ آیکون پیش‌فرض تغییر داده‌شده است. با متد draggable تعیین می­کنیم که مارکر قابل جابجا شدن باشد یا نه.

سپس با استفاده از متد addMarker، مارکر به نقشه اضافه‌شده است.

برای اینکه در نقشه بیشتر از یک مارکر ایجاد نشود، یک متغیر از نوع Marker در سطح کلاس تعریف‌شده و مارکری که به نقشه اضافه‌شده به آن نسبت داده‌شده است. هر بار در ابتدای متد setMarker چک می­شود که اگر مارکری در نقشه وجود دارد، remove شود.

 

5- به دست آوردن موقعیت مکانی و نمایش آن

ابتدا لازم است permission های زیر را به فایل مانیفست اضافه کنیم:

 

 

ACCESS_COARSE_LOCATION: به دست آوردن موقعیت با استفاده از wifi یا آنتن­های موبایل

ACCESS_FINE_LOCATION: به دست آوردن موقعیت با استفاده از GPS

برای نمایش موقعیت مکانی لازم است که MyActivity از دو اینترفیس ConnectionCallbacks و OnConnectionFailedListener ارث‌بری کند که هردوی این‌ها اعضای اینترفیس GooglePlayServiceClient هستند.

 

متدهای مربوط به این اینترفیس ها که override شده‌اند نیز عبارت‌اند از:

 

 

هنگام استفاده از سرویس موقعیت‌یاب گوگل، اگر ارتباط موفق باشد، onConnected و در غیر این صورت onConnectionFailed و اگر ارتباط به دلیلی قطع شود، onDisconnected اجرا می­شود.

برای نمایش مکان فعلی کاربر یا Current location، باید یک فیلد از نوع LocationClient داشته باشیم. این فیلد را در سطح کلاس تعریف می­کنیم و در متد onCreate آن را new می­کنیم.

 

 

برای new کردن LocationClient سه پارامتر نیاز داریم که هر سه را this می­دهیم.

متد gotoCurrentLocation برای نمایش مکان فعلی کاربر طراحی‌شده است. 

 

 

ابتدا متغیری از نوع Location به نام currentLocation ایجادشده است. با استفاده از متد getLastLocation که مربوط به locationClient است، آخرین مکان کاربر گرفته می­شود و در currentLocation ذخیره می­گردد. سپس با استفاده از توابع مربوط به currentLocation، مختصات نقطه گرفته‌شده و به متغیری از جنس CameraUpdate داده‌شده است. سپس این متغیر به متد animateCamera داده‌شده که متعلق به شیء googleMap است. animateCamera برای نمایش جابجایی روی نقشه به‌کاررفته است.

در پایان متد setMarker فراخوانی شده که موقعیت مکانی کاربر را توسط مارکر روی نقشه نشان می­دهد.

 

6- انواع نمایش نقشه

برای نمایش نقشه حالت‌های مختلفی وجود دارد که عبارت‌اند ازNormal، Satellite، Terrain، Hybrid، None. برای این برنامه منویی طراحی‌شده که با استفاده از آن می­توان حالت نمایش نقشه را تعیین کرد.

 

 

متد onCreateOptionsMenu برای نمایش این منو override شده است.

متد onOptionsItemSelected برای مدیریت انتخاب کاربر override شده است.

برای تنظیم نوع نمایش نقشه از متد setMapType مربوط به آبجکت googleMap استفاده‌شده است.

 

 

همچنین در منو گزینه Current Location قرار داده‌شده که برای نشان دادن موقعیت مکانی کاربر است و در صورت انتخاب، متد gotoCurrentLocation -که قبلاً توضیح داده شد- فراخوانی شده است.

 

7- استفاده از Geocode

کلاس Geocode که متعلق به پکیج android.location است این امکان را ایجاد می­کند که با استفاده از نام یک مکان، مختصات آن را به دست آورید. متد getFromLocationName که در این پروژه از آن استفاده‌شده، با گرفتن نام یک مکان، مختصات آن را به ما می­دهد.

متد geoLocate برای استفاده از کلاس Geocode نوشته‌شده است. وقتی کاربر نام مکانی را در editText وارد می­کند و دکمه Go را می­زند، geoLocate مختصات آن مکان را به دست آورده و نمایش می­دهد.

 

 

سخن پایانی:

در پایان لازم می­دانم توجه شمارا به نکات زیر جلب نمایم:

این مقاله صرفاً برای آشنایی با طریقه استفاده از نقشه‌های گوگل در برنامه‌های دیگر نوشته‌شده است و بازنویسی Google Map خلاف قانون استفاده از API های گوگل است.
در هر برنامه، بنا بر سلیقه­ی طراح و برنامه‌نویس، می­توان از دیگر امکانات Google map استفاده کرد.
سرویس­هایی که در این مقاله معرفی‌شده‌اند، رایگان هستند. اما تا زمانی که برنامه شما بیش از 25000 درخواست در روز برای geocode و دیگر سرویس­ها نداشته باشد. اگر تعداد درخواست روزانه شما بیشتر از این تعداد است، باید از نسخه enterprise استفاده کنید. برای اطلاعات بیشتر به لینک زیر مراجعه کنید:

https://developers.google.com/maps/documentation/business

API Key که در مقاله توضیح داده شد، از نوع debug است. زمانی که می­خواهید برنامه را برای استفاده عرضه کنید، نیاز به نوع دیگر API Key به نام release دارید. برای این کار، زمان گرفتن API Key در کنسول گوگل، وقتی صفحه‌ای مطابق شکل زیر نمایش داده شد، دکمه + را زده و مجدداً sha1 را وارد کنید.

البته می­توانید بعداً هم از طریق کنسول آن را ویرایش کنید.

پایان

دانلود نسخه PDF مقاله استفاده از نقشه گوگل در برنامه های آندروید



دیدگاه‌ها

تصویر Anonymous

با سلام و تشکر از مقاله خوبتون

واقعا عالی بود

کاش سورس برنامه رو هم می گذاشتید

 

افزودن دیدگاه جدید

با عضویت در سایت بیتنا می‌توانید به‌راحتی کامنت گذاشته و یا به کامنت های دیگران رأی دهید
دیدگاه کاربران مهمان پس از تائید نمایش داده خواهد شد
اعتبار سنجی کاربر