برنامه Google Maps برای اندروید چندین هدف را نشان میدهد که میتوانید از آنها برای راهاندازی Google Maps در حالتهای نمایش، جستجو، ناوبری یا نمای خیابان استفاده کنید. اگر میخواهید نقشهای را در برنامه خود جاسازی کنید، لطفاً به راهنمای شروع Google Maps Android API مراجعه کنید.
Intent به شما امکان می دهد با توصیف یک عمل ساده که می خواهید انجام دهید (مانند "نمایش نقشه" یا "نمایش مسیرها به فرودگاه") در یک شیء Intent
، یک فعالیت را در برنامه دیگری شروع کنید. برنامه Google Maps برای Android از چندین هدف مختلف پشتیبانی می کند، به شما امکان می دهد برنامه Google Maps را راه اندازی کنید و یکی از چهار عمل زیر را انجام دهید:
- یک نقشه را در یک مکان مشخص و سطح بزرگنمایی نمایش دهید.
- مکان ها یا مکان ها را جستجو کنید و آنها را روی نقشه نمایش دهید.
- درخواست مسیرها از یک مکان به مکان دیگر. مسیرها را می توان برای سه حالت حمل و نقل بازگرداند: رانندگی، پیاده روی، دوچرخه سواری.
- نمایش تصاویر پانوراما در نمای خیابان گوگل.
این صفحه اهدافی را که میتوانید با برنامه Google Maps برای اندروید استفاده کنید، شرح میدهد. برای اطلاعات بیشتر در مورد Intent ها و Intent Filters یا Intents مشترک در پلتفرم Android ، به مستندات توسعه دهنده Android مراجعه کنید.
برای راهاندازی نقشههای Google با یک intent، ابتدا باید یک شی Intent
ایجاد کنید و عملکرد، URI و بسته آن را مشخص کنید.
- اقدام : تمام اهداف Google Maps به عنوان یک کنش نمایش نامیده میشوند —
ACTION_VIEW
. - URI : اهداف Google Maps از URL کدگذاری شده استفاده میکنند که یک عمل مورد نظر را به همراه برخی دادهها برای انجام عمل مشخص میکند.
- بسته : تماس با
setPackage("com.google.android.apps.maps")
اطمینان حاصل می کند که برنامه Google Maps برای Android با Intent مدیریت می کند. اگر بسته تنظیم نشده باشد، سیستم تعیین می کند که کدام برنامه ها می توانندIntent
را مدیریت کنند. اگر چندین برنامه در دسترس باشد، ممکن است از کاربر پرسیده شود که میخواهد از کدام برنامه استفاده کند.
پس از ایجاد Intent
، میتوانید از راههای مختلفی درخواست کنید که سیستم برنامه مربوطه را راهاندازی کند. یک روش رایج این است که Intent
را به متد startActivity()
ارسال کنید. سیستم برنامه لازم را راه اندازی می کند - در این مورد Google Maps - و Activity
مربوطه را شروع می کند.
// Create a Uri from an intent string. Use the result to create an Intent. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps"); // Attempt to start an activity that can handle the Intent startActivity(mapIntent);
// Create a Uri from an intent string. Use the result to create an Intent. val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps") // Attempt to start an activity that can handle the Intent startActivity(mapIntent)
اگر سیستم نتواند برنامه ای را شناسایی کند که بتواند به هدف پاسخ دهد، ممکن است برنامه شما از کار بیفتد. به همین دلیل، قبل از ارائه یکی از این اهداف به کاربر، ابتدا باید بررسی کنید که یک برنامه دریافت کننده نصب شده است.
برای تأیید اینکه یک برنامه برای دریافت intent در دسترس است، resolveActivity()
در شی Intent
خود فراخوانی کنید. اگر نتیجه غیر تهی باشد، حداقل یک برنامه وجود دارد که می تواند intent را مدیریت کند و فراخوانی startActivity()
بی خطر است. اگر نتیجه null
است، نباید از intent استفاده کنید و در صورت امکان، باید ویژگی را که intent را فراخوانی می کند غیرفعال کنید.
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
mapIntent.resolveActivity(packageManager)?.let { ... }
به عنوان مثال برای نمایش نقشه سانفرانسیسکو می توانید از کد زیر استفاده کنید:
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); if (mapIntent.resolveActivity(getPackageManager()) != null) { startActivity(mapIntent); }
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") mapIntent.resolveActivity(packageManager)?.let { startActivity(mapIntent) }
تمام رشتههای ارسال شده به Google Maps Intent باید URI رمزگذاری شده باشد. برای مثال، رشته "1st & Pike, Seattle" باید 1st%20%26%20Pike%2C%20Seattle
شود. فضاهای رشته را می توان با %20 کدگذاری کرد یا با علامت مثبت (+) جایگزین کرد.
شما می توانید از متد android.net.Uri
parse()
برای رمزگذاری رشته های خود استفاده کنید. به عنوان مثال:
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))
از geo:
intent برای نمایش نقشه در یک مکان مشخص و سطح بزرگنمایی استفاده کنید.
geo:latitude,longitude?z=zoom
پارامترها
-
latitude
وlongitude
نقطه مرکزی نقشه را تعیین می کند. -
z
به صورت اختیاری سطح زوم اولیه نقشه را تنظیم می کند. مقادیر پذیرفته شده از 0 (کل جهان) تا 21 (ساختمان های فردی) متغیر است. حد بالایی بسته به داده های نقشه موجود در مکان انتخاب شده می تواند متفاوت باشد.
نمونه ها
// Creates an Intent that will load a map of San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Creates an Intent that will load a map of San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
از این intent برای نمایش عبارت های جستجو در یک viewport مشخص استفاده کنید. هنگامی که پرس و جو دارای یک نتیجه واحد است، می توانید از این هدف برای نمایش پین در یک مکان یا آدرس خاص، مانند یک نقطه عطف، کسب و کار، ویژگی جغرافیایی یا شهر استفاده کنید.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
پارامترها
علاوه بر پارامترهای مورد استفاده برای نمایش نقشه، Search از پارامترهای زیر نیز پشتیبانی می کند:
q
مکان(های) را برای برجسته کردن روی نقشه تعریف می کند. پارامترq
برای تمام درخواست های جستجو مورد نیاز است. مکان را به عنوان نام مکان یا آدرس می پذیرد. رشته باید با URL رمزگذاری شود، بنابراین آدرسی مانند "City Hall, New York, NY" باید به City+Hall, New+York, NY تبدیل شود.label
به شما امکان می دهد یک برچسب سفارشی را در مکانی مشخص شده روی نقشه تنظیم کنید.label
باید به عنوان یک رشته مشخص شود.
اگر یک عبارت جستجوی کلی را بپذیرید، Google Maps سعی می کند مکانی را نزدیک به lat/lng که مشخص کرده اید پیدا کند که با معیارهای شما مطابقت دارد. اگر مکانی مشخص نشده باشد، Google Maps سعی میکند فهرستهای اطراف را پیدا کند. به عنوان مثال:
// Search for restaurants nearby Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Search for restaurants in San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Search for restaurants nearby val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Search for restaurants in San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
می توانید با تعیین پارامتر بزرگنمایی به همراه رشته پرس و جو، نتایج جستجو را بیشتر سوگیری کنید. در مثال زیر، با افزودن زوم 10 سعی می شود رستوران ها را به جای نزدیکی در سطح شهر پیدا کنید.
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
با جستجوی یک آدرس خاص، یک پین در آن مکان نمایش داده می شود.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
مثال بالا یک lat/lng 0
، 0
را تنظیم می کند، اما یک آدرس را به عنوان رشته پرس و جو ارسال می کند. هنگام جستجو برای یک مکان بسیار خاص، طول و عرض جغرافیایی لازم نیست. با این حال، اگر آدرس دقیق را نمیدانید، میتوانید با تعیین مختصات، نتایج جستجو را سوگیری کنید. به عنوان مثال، انجام جستجوی آدرس برای "خیابان اصلی" نتایج بسیار زیادی را نشان می دهد.
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
// Searching for 'Main Street' will return too many results val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
افزودن lat/lng به URI قصد، نتایج را به سمت یک ناحیه خاص سوگیری می کند:
// Searches for 'Main Street' near San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Searches for 'Main Street' near San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
هنگامی که می دانید جستجوی شما یک مقدار واحد را برمی گرداند، ممکن است بخواهید یک برچسب اختیاری ارسال کنید. برچسب ها باید به عنوان یک رشته مشخص شوند و در زیر نشانگر نقشه ظاهر می شوند. توجه داشته باشید که برچسب ها فقط زمانی در دسترس هستند که q
به عنوان مختصات lat/lng مشخص شده باشد.
// Display a label at the location of Google's Sydney office Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Display a label at the location of Google's Sydney office val gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
به عنوان جایگزینی برای آدرس خیابان یا طول/طول جغرافیایی، میتوانید یک پین را در یک مکان شناخته شده با استفاده از یک کد مثبت نمایش دهید.
// Display the location of Google, San Francisco using a global plus code. Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX"); // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco"); // Construct and use the Intent as in the examples above
// Display the location of Google, San Francisco using a global plus code. var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX") // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco") // Construct and use the Intent as in the examples above
از این هدف برای راهاندازی ناوبری Google Maps با جهتهای گام به گام به آدرس یا مختصات مشخص شده استفاده کنید. دستورالعمل ها همیشه از مکان فعلی کاربر داده می شود.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
پارامترها
q
: نقطه پایانی را برای جستجوهای پیمایش تنظیم می کند. این مقدار می تواند مختصات عرض جغرافیایی، طول جغرافیایی یا آدرس فرمت شده پرس و جو باشد. اگر یک رشته کوئری است که بیش از یک نتیجه را برمی گرداند، اولین نتیجه انتخاب می شود.mode
روش حمل و نقل را تعیین می کند. حالت اختیاری است و می توان آن را روی یکی از موارد زیر تنظیم کرد:-
d
برای رانندگی (پیش فرض) -
b
برای دوچرخه سواری -
l
برای دو چرخ -
w
برای پیاده روی
-
avoid
مجموعه ویژگی هایی که مسیر باید سعی کند از آن اجتناب کند. اجتناب اختیاری است و می توان آن را روی یک یا چند مورد از موارد زیر تنظیم کرد:-
t
برای عوارض -
h
برای بزرگراه ها -
f
برای کشتی
-
نمونه ها
Intent
زیر، پیمایش گام به گام به باغ وحش تارونگا، در سیدنی استرالیا را درخواست می کند:
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر ترجیح می دهید عوارضی نپردازید یا سوار کشتی نشوید، می توانید درخواست مسیریابی کنید که سعی می کند از این موارد جلوگیری کند.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر کمی ورزش را ترجیح می دهید، می توانید به جای آن مسیر دوچرخه سواری را درخواست کنید.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر ترجیح میدهید از یک موتور دو چرخه استفاده کنید، میتوانید درخواست کنید که مسیرها شامل جادههای باریک و مسیرهای غیرقابل دسترسی خودروها باشد. intent
زیر مسیری را در هند برمی گرداند.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
از قصد google.streetview
برای راه اندازی نمای خیابان Google استفاده کنید. نمای خیابان Google نماهای پانوراما را از مکان های تعیین شده در سراسر منطقه تحت پوشش خود ارائه می دهد. Photospheres و مجموعههای ویژه نمای خیابان توسط کاربر نیز موجود است.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
پارامترها
همه URI های google.streetview
باید شامل یک پارامتر cbll
یا panoid
باشند.
cbll
طول و عرض جغرافیایی را به عنوان مقادیر جدا شده با کاما می پذیرد (46.414382,10.013988
). برنامه پانورامای عکاسی شده را در نزدیکترین مکان به این مکان نمایش می دهد. از آنجایی که تصاویر نمای خیابان به طور دورهای بازخوانی میشوند و ممکن است هر بار عکسها از موقعیتهای کمی متفاوت گرفته شوند، ممکن است هنگام بهروزرسانی تصاویر، موقعیت مکانی شما به پانورامای متفاوتی تبدیل شود.panoid
یک شناسه پانوراما خاص است. اگر همpanoid
و همcbll
مشخص شده باشد، Google Maps از شناسه پانوراما استفاده خواهد کرد. شناسههای پانوراما از شیStreetViewPanoramaLocation
برای یک برنامه Android در دسترس هستند.cbp
یک پارامتر اختیاری است که جهت اولیه دوربین را تنظیم می کند. پارامترcbp
5 مقدار جدا شده با کاما می گیرد که همه آنها اختیاری هستند. مهم ترین مقادیر دوم، چهارم و پنجم هستند که به ترتیب یاتاقان، زوم و شیب را تنظیم می کنند. مقادیر اول و سوم پشتیبانی نمی شوند و باید روی0
تنظیم شوند.-
bearing
: جهت قطب نما دوربین را بر حسب درجه در جهت عقربه های ساعت از شمال نشان می دهد. شمال واقعی 0، شرق 90، جنوب 180، غرب 270 است. یعنی 0 درجه، 360 درجه و 720 درجه همه در یک جهت قرار دارند. بلبرینگ به عنوان دومین مقدار از پنج مقدار جدا شده با کاما تعریف می شود. -
zoom
: سطح زوم دوربین را تنظیم می کند. سطح بزرگنمایی پیش فرض روی 0 تنظیم شده است. بزرگنمایی 1 بزرگنمایی را دو برابر می کند. زوم بین 0 و حداکثر سطح بزرگنمایی برای پانورامای فعلی گیره است. این بدان معنی است که هر مقداری که خارج از این محدوده قرار گیرد، به نزدیکترین حدی که در محدوده قرار می گیرد، تنظیم می شود. به عنوان مثال، مقدار -1 روی 0 تنظیم می شود. بزرگنمایی چهارمین مقدار از پنج مقدار جدا شده با کاما است. -
tilt
: زاویه بالا یا پایین دوربین را مشخص می کند. محدوده 90- تا 0 تا 90 است که 90 مستقیم به پایین، 0 در مرکز افق و 90- مستقیم به بالا نگاه می کند.
-
نمونه ها
در زیر چند نمونه از استفاده از هدف نمای خیابان آورده شده است.
// Displays an image of the Swiss Alps Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Displays an image of the Swiss Alps val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia val gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. val gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
برنامه Google Maps برای اندروید چندین هدف را نشان میدهد که میتوانید از آنها برای راهاندازی Google Maps در حالتهای نمایش، جستجو، ناوبری یا نمای خیابان استفاده کنید. اگر میخواهید نقشهای را در برنامه خود جاسازی کنید، لطفاً به راهنمای شروع Google Maps Android API مراجعه کنید.
Intent به شما امکان می دهد با توصیف یک عمل ساده که می خواهید انجام دهید (مانند "نمایش نقشه" یا "نمایش مسیرها به فرودگاه") در یک شیء Intent
، یک فعالیت را در برنامه دیگری شروع کنید. برنامه Google Maps برای Android از چندین هدف مختلف پشتیبانی می کند، به شما امکان می دهد برنامه Google Maps را راه اندازی کنید و یکی از چهار عمل زیر را انجام دهید:
- یک نقشه را در یک مکان مشخص و سطح بزرگنمایی نمایش دهید.
- مکان ها یا مکان ها را جستجو کنید و آنها را روی نقشه نمایش دهید.
- درخواست مسیرها از یک مکان به مکان دیگر. مسیرها را می توان برای سه حالت حمل و نقل بازگرداند: رانندگی، پیاده روی، دوچرخه سواری.
- نمایش تصاویر پانوراما در نمای خیابان گوگل.
این صفحه اهدافی را که میتوانید با برنامه Google Maps برای اندروید استفاده کنید، شرح میدهد. برای اطلاعات بیشتر در مورد Intent ها و Intent Filters یا Intents مشترک در پلتفرم Android ، به مستندات توسعه دهنده Android مراجعه کنید.
برای راهاندازی نقشههای Google با یک هدف، ابتدا باید یک شیء Intent
ایجاد کنید، که عملکرد، URI و بسته آن را مشخص کنید.
- اقدام : تمام اهداف Google Maps به عنوان یک کنش مشاهده نامیده میشوند —
ACTION_VIEW
. - URI : اهداف Google Maps از URL کدگذاری شده استفاده میکنند که یک عمل مورد نظر را به همراه برخی دادهها برای انجام عمل مشخص میکند.
- بسته : تماس با
setPackage("com.google.android.apps.maps")
اطمینان حاصل می کند که برنامه Google Maps برای Android با Intent مدیریت می کند. اگر بسته تنظیم نشده باشد، سیستم تعیین می کند که کدام برنامه ها می توانندIntent
را مدیریت کنند. اگر چندین برنامه در دسترس باشد، ممکن است از کاربر پرسیده شود که میخواهد از کدام برنامه استفاده کند.
پس از ایجاد Intent
، میتوانید از راههای مختلفی درخواست کنید که سیستم برنامه مربوطه را راهاندازی کند. یک روش رایج این است که Intent
را به متد startActivity()
ارسال کنید. سیستم برنامه لازم را راه اندازی می کند - در این مورد Google Maps - و Activity
مربوطه را شروع می کند.
// Create a Uri from an intent string. Use the result to create an Intent. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps"); // Attempt to start an activity that can handle the Intent startActivity(mapIntent);
// Create a Uri from an intent string. Use the result to create an Intent. val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps") // Attempt to start an activity that can handle the Intent startActivity(mapIntent)
اگر سیستم نتواند برنامهای را شناسایی کند که بتواند به هدف پاسخ دهد، ممکن است برنامه شما از کار بیفتد. به همین دلیل، قبل از ارائه یکی از این اهداف به کاربر، ابتدا باید بررسی کنید که یک برنامه دریافت کننده نصب شده است.
برای تأیید اینکه یک برنامه برای دریافت intent در دسترس است، resolveActivity()
در شی Intent
خود فراخوانی کنید. اگر نتیجه غیر تهی باشد، حداقل یک برنامه وجود دارد که می تواند intent را مدیریت کند و فراخوانی startActivity()
بی خطر است. اگر نتیجه null
است، نباید از intent استفاده کنید و در صورت امکان، باید ویژگی را که intent را فراخوانی می کند غیرفعال کنید.
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
mapIntent.resolveActivity(packageManager)?.let { ... }
برای مثال برای نمایش نقشه سانفرانسیسکو می توانید از کد زیر استفاده کنید:
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); if (mapIntent.resolveActivity(getPackageManager()) != null) { startActivity(mapIntent); }
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") mapIntent.resolveActivity(packageManager)?.let { startActivity(mapIntent) }
همه رشتههای ارسال شده به Google Maps Intent باید URI رمزگذاری شده باشند. برای مثال، رشته "1st & Pike, Seattle" باید 1st%20%26%20Pike%2C%20Seattle
شود. فضاهای رشته را می توان با %20 کدگذاری کرد یا با علامت مثبت (+) جایگزین کرد.
می توانید از متد android.net.Uri
parse()
برای رمزگذاری رشته های خود استفاده کنید. به عنوان مثال:
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))
از geo:
intent برای نمایش نقشه در یک مکان مشخص و سطح بزرگنمایی استفاده کنید.
geo:latitude,longitude?z=zoom
پارامترها
-
latitude
وlongitude
نقطه مرکزی نقشه را تعیین می کند. -
z
به صورت اختیاری سطح زوم اولیه نقشه را تنظیم می کند. مقادیر پذیرفته شده از 0 (در کل جهان) تا 21 (ساختمان های فردی) متغیر است. حد بالایی بسته به داده های نقشه موجود در مکان انتخاب شده می تواند متفاوت باشد.
نمونه ها
// Creates an Intent that will load a map of San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Creates an Intent that will load a map of San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
از این intent برای نمایش عبارت های جستجو در یک viewport مشخص استفاده کنید. هنگامی که پرس و جو دارای یک نتیجه واحد است، می توانید از این هدف برای نمایش پین در یک مکان یا آدرس خاص، مانند یک نقطه عطف، کسب و کار، ویژگی جغرافیایی یا شهر استفاده کنید.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
پارامترها
علاوه بر پارامترهای مورد استفاده برای نمایش نقشه، Search از پارامترهای زیر نیز پشتیبانی می کند:
q
مکان(های) را برای برجسته کردن روی نقشه تعریف می کند. پارامترq
برای تمام درخواست های جستجو مورد نیاز است. مکان را به عنوان نام مکان یا آدرس می پذیرد. رشته باید با URL رمزگذاری شود، بنابراین آدرسی مانند "City Hall, New York, NY" باید به City+Hall, New+York, NY تبدیل شود.label
به شما امکان می دهد یک برچسب سفارشی را در مکانی مشخص شده روی نقشه تنظیم کنید.label
باید به عنوان یک رشته مشخص شود.
اگر یک عبارت جستجوی کلی را بپذیرید، Google Maps سعی می کند مکانی را نزدیک به lat/lng که مشخص کرده اید پیدا کند که با معیارهای شما مطابقت دارد. اگر مکانی مشخص نشده باشد، Google Maps سعی میکند فهرستهای اطراف را پیدا کند. به عنوان مثال:
// Search for restaurants nearby Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Search for restaurants in San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Search for restaurants nearby val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Search for restaurants in San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
می توانید با تعیین پارامتر بزرگنمایی به همراه رشته پرس و جو، نتایج جستجو را بیشتر سوگیری کنید. در مثال زیر، با افزودن زوم 10 سعی می شود رستوران ها را به جای نزدیکی در سطح شهر پیدا کنید.
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
با جستجوی یک آدرس خاص، یک پین در آن مکان نمایش داده می شود.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
مثال بالا یک lat/lng 0
، 0
را تنظیم می کند، اما یک آدرس را به عنوان رشته پرس و جو ارسال می کند. هنگام جستجو برای یک مکان بسیار خاص، طول و عرض جغرافیایی لازم نیست. با این حال، اگر آدرس دقیق را نمیدانید، میتوانید با تعیین مختصات، نتایج جستجو را سوگیری کنید. به عنوان مثال، انجام جستجوی آدرس برای "خیابان اصلی" نتایج بسیار زیادی را نشان می دهد.
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
// Searching for 'Main Street' will return too many results val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
افزودن lat/lng به URI قصد، نتایج را به سمت یک ناحیه خاص سوگیری می کند:
// Searches for 'Main Street' near San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Searches for 'Main Street' near San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
هنگامی که می دانید جستجوی شما یک مقدار واحد را برمی گرداند، ممکن است بخواهید یک برچسب اختیاری ارسال کنید. برچسب ها باید به عنوان یک رشته مشخص شوند و در زیر نشانگر نقشه ظاهر می شوند. توجه داشته باشید که برچسب ها فقط زمانی در دسترس هستند که q
به عنوان مختصات lat/lng مشخص شده باشد.
// Display a label at the location of Google's Sydney office Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Display a label at the location of Google's Sydney office val gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
به عنوان جایگزینی برای آدرس خیابان یا طول/طول جغرافیایی، میتوانید یک پین را در یک مکان شناخته شده با استفاده از یک کد مثبت نمایش دهید.
// Display the location of Google, San Francisco using a global plus code. Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX"); // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco"); // Construct and use the Intent as in the examples above
// Display the location of Google, San Francisco using a global plus code. var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX") // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco") // Construct and use the Intent as in the examples above
از این هدف برای راهاندازی ناوبری Google Maps با جهتهای گام به گام به آدرس یا مختصات مشخص شده استفاده کنید. دستورالعمل ها همیشه از مکان فعلی کاربر داده می شود.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
پارامترها
q
: نقطه پایانی را برای جستجوهای پیمایش تنظیم می کند. این مقدار می تواند مختصات عرض جغرافیایی، طول جغرافیایی یا آدرس فرمت شده پرس و جو باشد. اگر یک رشته کوئری است که بیش از یک نتیجه را برمی گرداند، اولین نتیجه انتخاب می شود.mode
روش حمل و نقل را تعیین می کند. حالت اختیاری است و می توان آن را روی یکی از موارد زیر تنظیم کرد:-
d
برای رانندگی (پیش فرض) -
b
برای دوچرخه سواری -
l
برای دو چرخ -
w
برای پیاده روی
-
avoid
مجموعه ویژگی هایی که مسیر باید سعی کند از آن اجتناب کند. اجتناب اختیاری است و می توان آن را روی یک یا چند مورد از موارد زیر تنظیم کرد:-
t
برای عوارض -
h
برای بزرگراه ها -
f
برای کشتی
-
نمونه ها
Intent
زیر، ناوبری گام به گام به باغ وحش تارونگا، در سیدنی استرالیا را درخواست می کند:
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر ترجیح میدهید عوارضی نپردازید یا سوار کشتی نشوید، میتوانید درخواست مسیریابی کنید که سعی میکند از این موارد جلوگیری کند.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر کمی ورزش را ترجیح می دهید، می توانید به جای آن مسیر دوچرخه سواری را درخواست کنید.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
اگر ترجیح میدهید از یک موتور دو چرخه استفاده کنید، میتوانید درخواست کنید که مسیرها شامل جادههای باریک و مسیرهای غیرقابل دسترسی خودروها باشد. intent
زیر مسیری را در هند برمی گرداند.
Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
val gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
از قصد google.streetview
برای راه اندازی نمای خیابان Google استفاده کنید. نمای خیابان Google نماهای پانوراما را از مکان های تعیین شده در سراسر منطقه تحت پوشش خود ارائه می دهد. Photospheres و مجموعههای ویژه نمای خیابان توسط کاربر نیز موجود است.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
پارامترها
همه URI های google.streetview
باید شامل یک پارامتر cbll
یا panoid
باشند.
cbll
طول و عرض جغرافیایی را به عنوان مقادیر جدا شده با کاما می پذیرد (46.414382,10.013988
). این برنامه پانورامای عکاسی شده را در نزدیکترین مکان به این مکان نمایش می دهد. از آنجایی که تصاویر نمای خیابان به طور دورهای بازخوانی میشوند و ممکن است هر بار عکسها از موقعیتهای کمی متفاوت گرفته شوند، ممکن است هنگام بهروزرسانی تصاویر، موقعیت مکانی شما به پانورامای متفاوتی تبدیل شود.panoid
یک شناسه پانوراما خاص است. اگر همpanoid
و همcbll
مشخص شده باشد، Google Maps از شناسه پانوراما استفاده خواهد کرد. شناسههای پانوراما از شیStreetViewPanoramaLocation
برای یک برنامه Android در دسترس هستند.cbp
یک پارامتر اختیاری است که جهت اولیه دوربین را تنظیم می کند. پارامترcbp
5 مقدار جدا شده با کاما می گیرد که همه آنها اختیاری هستند. مهم ترین مقادیر دوم، چهارم و پنجم هستند که به ترتیب یاتاقان، زوم و شیب را تنظیم می کنند. مقادیر اول و سوم پشتیبانی نمی شوند و باید روی0
تنظیم شوند.-
bearing
: جهت قطب نما دوربین را بر حسب درجه در جهت عقربه های ساعت از شمال نشان می دهد. شمال واقعی 0، شرق 90، جنوب 180، غرب 270 است. یعنی 0 درجه، 360 درجه و 720 درجه همه در یک جهت قرار دارند. بلبرینگ به عنوان دومین مقدار از پنج مقدار جدا شده با کاما تعریف می شود. -
zoom
: سطح زوم دوربین را تنظیم می کند. سطح بزرگنمایی پیش فرض روی 0 تنظیم شده است. بزرگنمایی 1 بزرگنمایی را دو برابر می کند. زوم بین 0 و حداکثر سطح بزرگنمایی برای پانورامای فعلی گیره است. این بدان معنی است که هر مقداری که خارج از این محدوده قرار گیرد، به نزدیکترین حدی که در محدوده قرار می گیرد، تنظیم می شود. به عنوان مثال، مقدار -1 روی 0 تنظیم می شود. بزرگنمایی چهارمین مقدار از پنج مقدار جدا شده با کاما است. -
tilt
: زاویه بالا یا پایین دوربین را مشخص می کند. محدوده 90- تا 0 تا 90 است که 90 مستقیم به پایین، 0 در مرکز افق و 90- مستقیم به بالا نگاه می کند.
-
نمونه ها
در زیر چند نمونه از استفاده از هدف نمای خیابان آورده شده است.
// Displays an image of the Swiss Alps Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
// Displays an image of the Swiss Alps val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia val gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. val gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)