نحوه اضافه کردن Google Maps SDK
برای استفاده از نقشه باید مطمئن شوید که google play services در sdk شما نصب شده باشد. برای فهمیدن این موضوع به آدرس زیر بروید:
SDK Manager → Extras
سپس چک باکس آن را انتخاب کنید و بر روی دکمه ی نصب بزنید.
سپس باید Google Play را به build.gradle اضافه کنید
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:playservices:6.5.87' }
گوگل به شما اجازه نمیدهد که بدون استفاده از api key از نقشه استفاده کنید
برای گرفتن یک کلید ترمینال را باز کنید و تلاش کنید فایل debug.keystore را پیدا کنید
– Windows (new): C:\Users\USERNAME\.android – Windows (old): C:\Documents and Settings\USERNAME\.android – Linux: /home/USERNAME/.android/ – – Mac: /Users/USERNAME/.android/ (?)
با استفاده از ترمینال و دستور cd وارد پوشه ی آن شوید و سپس کد زیر را وارد کنید
keytool -list -v -keystore debug.keystore (it asks for a password, so just press Enter)
حال در ترمینال به دنبال Certificate fingerprint بگردید و در آن SHA-1 برای ما مهم است که یک string با فرمتی مشابه فرمت پایین است
BD:2B:3F:4B:………
حال به Google APIs developer console به آدرس زیر بروید
https://console.developers.google.com/cloud-resource-manager
حال بر روی موارد زیر کلیک کنید
APIs and Auth → Credentials → Create new Key
سپس Android Key را انتخاب کنید
حال SHA1 را که کپی کرده بودید اینجا paste کنید.
تغییرات Manifest
برای استفاده از نقشه در برنامه باید یک سری تغییرات در manifest ایجاد کنید
<manifest ...> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application ...> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key" /> <activity ...> ... </activity> </application> </manifest>
اضافه کردن نقشه گوگل در کد اندروید
برای استفاده از Google Maps API گوگل یک کلاس فرگمنتی به اسم MapFragment ایجاد کرده است که میتوانید به وسیله آن در یک activity نقشه را داشته باشید
<LinearLayout ... xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" tools:ignore="MissingPrefix"> <fragment ... android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/ID" /> </LinearLayout>
برای آماده شدن نقشه باید کمی صبر کنید
public class Name extends Activity implements OnMapReadyCallback, GoogleMap.OnMapLoadedCallback { private GoogleMap map = null; @Override protected void onCreate(Bundle savedInstanceState) { ... MapFragment mf = (MapFragment) getFragmentManager().findFragmentById(R.id.ID); mf.getMapAsync(this); // calls onMapReady when loaded } @Override public void onMapReady(GoogleMap map) { // map is loaded but not laid out yet map.setOnMapLoadedCallback(this); // calls onMapLoaded when layout done } @Override public void onMapLoaded() { code to run when the map has loaded; } {
مروری بر متدهای Maps
قرار دادن یک آیتم بر روی نقشه
addCircle, addGroundOverlay, addMarker, addPolygon, addPolyline, addTileOverlay ,clear,Removes all markers, polylines/polygons, overlays
دستکاری دوربین
getCameraPosition, moveCamera, animateCamera, stopAnimation
تنظیمات و ظاهر نقشه
setBuildingsEnabled, setIndoorEnabled, setMapType, setPadding, setTrafficEnabled
گرفتن اسکرین شات از نقشه
Snapshot
واسطهای رویدادها
setOnCameraChangeListener, setOnMapClickListener, setOnMapLoadedCallback, setOnMapLongClickListener, setOnMarkerClickListener, setOnMarkerDragListener, setOnMyLocationChangeListener
المان های درون نقشه
المان های درون نقشه شامل موارد زیر است که در شکل نیز نمایش داده شده است
- target location (latitude/longitude)
- zoom (2.0 – 21.0)
- bearing (orientation/rotation)
- tilt (degrees)
latitude: زاویه ی N/S نسبت به استوا
longitude: زاویه ی E/W نسبت به نصف النهار اصلی
قرار دادن تنظیمات نقشه مثل موقعیت دوربین در xml
<fragment ... android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/ID" map:cameraBearing="112.5" map:cameraTargetLat="-33.796923" map:cameraTargetLng="150.922433" map:cameraTilt="30" map:cameraZoom="13" map:mapType="normal" map:uiCompass="false" map:uiRotateGestures="true" map:uiScrollGestures="false" map:uiTiltGestures="true" map:uiZoomControls="false" map:uiZoomGestures="true"/>
متد های cameraUpdateFactory
برای تنظیم کردن دوربین در جاوا از cameraUpdateFactory استفاده میکنیم. به عنوان نمونه برای نمایش دادن کل نقشه آمریکا، از کد زیر استفاده میکنیم:
LatLngBounds bounds = new LatLngBounds( new LatLng(20, -130.0), // SW new LatLng(55, -70.0)); // NE map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));
نمایش یک نشانگر بر روی نقشه
برای قراردادن یک نشانگر بر روی نقشه کافیست از متد addMarker استفاده کنید که در داخل کلاس GoogleMap قرار گرفته است همچنین میتوانید آیکون ، رنگ و .. را در یک نشانگر تغییر دهید.
map.addMarker(new MarkerOptions() .position(new LatLng(40.801, -96.691)) .title("Lincoln, NE") );
برای حذف یک نشانگر از روی نقشه کافیست به مانند مثال زیر عمل کنید
Marker mark = map.addMarker(new MarkerOptions() ...); mark.remove();
خطوط و مسیرها
برای اضافه کردن مسیر و خطوط بر روی نقشه میتوانیم از متد addPolyline استفاده کنیم که در آن میتوان مواردی چون رنگ ، عرض خطوط و … را آورد
map.addPolyline(new PolylineOptions() .add(new LatLng(40.801, -96.691)) // Lincoln, NE .add(new LatLng(34.020, -118.412)) // Los Angeles, CA .add(new LatLng(40.703, -73.980)) // New York, NY );
و برای حذف کردن یک مسیر میتوانید از کد زیر استفاده کنید
Polyline polly = map.addPolyline(...); polly.remove();
مسیرها به شکل زیر نمایش داده می شوند: