Android için Google Haritalar Amaçları

Android için Google Haritalar uygulaması, Google Haritalar'ı görüntülü, arama, navigasyon veya Street View modlarında başlatmak için kullanabileceğiniz çeşitli intent'ler sunar. Uygulamanıza harita yerleştirmek istiyorsanız lütfen Google Haritalar Android API Başlangıç Kılavuzu'na bakın.

Genel Bakış

Intent'ler, gerçekleştirmek istediğiniz basit bir işlemi (ör. "harita görüntüleme" veya "havaalanına giden yol tarifini gösterme") Intent nesnesinde tanımlayarak başka bir uygulamada etkinlik başlatmanıza olanak tanır. Android için Google Haritalar uygulaması, Google Haritalar uygulamasını başlatmanıza ve dört işlemden birini gerçekleştirmenize olanak tanıyan çeşitli intent'leri destekler:

  1. Haritayı belirtilen bir konumda ve yakınlaştırma düzeyinde görüntüleyin.
  2. Konumları veya yerleri arayıp haritada görüntüleyin.
  3. Bir yerden başka bir yere yol tarifi isteyebilirsiniz. Araba, yürüyüş ve bisiklet olmak üzere üç ulaşım şekli için yol tarifi döndürülebilir.
  4. Google Street View'da panorama görüntülerini görüntüleyin.

Bu sayfada, Android için Google Haritalar uygulamasında kullanabileceğiniz intent'ler açıklanmaktadır. Intent'ler ve Intent Filtreleri veya Android platformunda ortak Intent'ler hakkında daha fazla bilgi için Android geliştirici belgelerine bakın.

Intent istekleri

Google Haritalar'ı bir intent ile başlatmak için öncelikle işlemini, URI'sini ve paketini belirterek bir Intent nesnesi oluşturmanız gerekir.

  • İşlem: Tüm Google Haritalar intent'leri Görüntüle işlemi olarak çağrılır (ACTION_VIEW).
  • URI: Google Haritalar intent'leri, istenen işlemi belirten URL kodlamasını ve işlemi gerçekleştirmek için gereken bazı verileri kullanır.
  • Paket: setPackage("com.google.android.apps.maps") çağrısı, Android için Google Haritalar uygulamasının Intent'i işlemesini sağlar. Paket ayarlanmamışsa sistem, Intent'yi hangi uygulamaların işleyebileceğini belirler. Birden fazla uygulama varsa kullanıcıdan hangi uygulamayı kullanmak istediği sorulabilir.

Intent'yi oluşturduktan sonra sistemin ilgili uygulamayı başlatmasını çeşitli şekillerde isteyebilirsiniz. Yaygın bir yöntem, Intent öğesini startActivity() yöntemine iletmektir. Sistem, gerekli uygulamayı (bu örnekte Google Haritalar) başlatır ve ilgili Activity'i başlatır.

Java

// 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);

Kotlin

// 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)

Sistem, intent'e yanıt verebilecek bir uygulama tanımlayamazsa uygulamanız kilitlenebilir. Bu nedenle, bu intentlerden birini kullanıcıya sunmadan önce öncelikle alıcı uygulamanın yüklü olup olmadığını doğrulamanız gerekir.

Bir uygulamanın niyeti alıp alamayacağını doğrulamak için Intent nesnenizden resolveActivity() işlevini çağırın. Sonuç null değilse intent'i işleyebilecek en az bir uygulama vardır ve startActivity() çağrılması güvenlidir. Sonuç null ise niyeti kullanmamalı ve mümkünse niyeti çağıran özelliği devre dışı bırakmalısınız.

Java

if (mapIntent.resolveActivity(getPackageManager()) != null) {
  ...
}

Kotlin

mapIntent.resolveActivity(packageManager)?.let {
  ...
}

Örneğin, San Francisco haritasını görüntülemek için aşağıdaki kodu kullanabilirsiniz:

Java

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);
}

Kotlin

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)
}

URL olarak kodlanmış sorgu dizeleri

Google Haritalar Intent'lerine iletilen tüm dizeler URI kodlamalıdır. Örneğin, "1st & Pike, Seattle" dizesi 1st%20%26%20Pike%2C%20Seattle olmalıdır. Dizedeki boşluklar %20 ile kodlanabilir veya artı işareti (+) ile değiştirilebilir.

Dizelerinizi kodlamak için android.net.Uri parse() yöntemini kullanabilirsiniz. Örneğin:

Java

Uri gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));

Kotlin

val gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))

Harita görüntüleme

Belirli bir konumda ve yakınlaştırma düzeyinde harita görüntülemek için geo: intent'ini kullanın.

geo:latitude,longitude?z=zoom

Parametreler

  • latitude ve longitude, haritanın merkez noktasını belirler.
  • z isteğe bağlı olarak haritanın ilk yakınlaştırma düzeyini belirler. Kabul edilen değerler 0 (tüm dünya) ile 21 (tek tek binalar) arasındadır. Üst sınır, seçilen konumdaki harita verilerine bağlı olarak değişiklik gösterebilir.

Örnekler

Java

// 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);

Kotlin

// 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)

Konum arama

Arama sorgularını belirli bir görüntü alanında görüntülemek için bu amacı kullanın. Sorgu tek bir sonuç içerdiğinde bu amacı kullanarak belirli bir yerde veya adreste (ör. önemli bir yer, işletme, coğrafi özellik veya kasaba) raptiye gösterebilirsiniz.

geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
geo:0,0?q=latitude,longitude(label)

Parametreler

Arama, harita görüntülemek için kullanılan parametrelerin yanı sıra aşağıdaki parametreleri de destekler:

  • q, haritada vurgulanacak yerleri tanımlar. q parametresi tüm arama istekleri için gereklidir. Yeri, yer adı veya adres olarak kabul eder. Dize URL kodlamalı olmalıdır. Bu nedenle, "Belediye Binası, İstanbul, İstanbul" gibi bir adres City+Hall,Istanbul,İstanbul olarak dönüştürülmelidir.

  • label, haritada tanımlanan bir yere özel etiket ayarlamanızı sağlar. label dize olarak belirtilmelidir.

Genel bir arama terimi gönderirseniz Google Haritalar, belirttiğiniz enlem/boylam yakınında ölçütlerinizle eşleşen bir konum bulmaya çalışır. Belirli bir konum belirtilmezse Google Haritalar, yakınlardaki girişleri bulmaya çalışır. Örneğin:

Java

// 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);

Kotlin

// 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)

San Francisco'da restoran arama

Sorgu dizesinin yanı sıra bir yakınlaştırma parametresi belirterek arama sonuçlarını daha da etkileyebilirsiniz. Aşağıdaki örnekte, 10 kat yakınlaştırma eklemek, restoranları yakınınızda değil, şehir düzeyinde bulmaya çalışır.

Java

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);

Kotlin

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)

Belirli bir adresi aradığınızda o konumda bir raptiye gösterilir.

Java

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);

Kotlin

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)

Yukarıdaki örnekte 0,0 enlem/boylam ayarlanır ancak bir adres sorgu dizesi olarak iletilir. Çok spesifik bir konum arıyorsanız enlem ve boylam gerekli değildir. Ancak tam adresi bilmiyorsanız bir koordinat belirterek arama sonuçlarını yönlendirmeye çalışabilirsiniz. Örneğin, "Ana Cadde" için adres araması yaptığınızda çok fazla sonuç döndürülür.

Java

// Searching for 'Main Street' will return too many results
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");

Kotlin

// Searching for 'Main Street' will return too many results
val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")

Intent URI'sine lat/lng eklemek, sonuçları belirli bir bölgeye yönlendirir:

Java

// 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);

Kotlin

// 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)

Aramanızın tek bir değer döndüreceğini biliyorsanız isteğe bağlı bir etiket iletebilirsiniz. Etiketler dize olarak belirtilmelidir ve harita işaretçisinin altında görünür. Etiketlerin yalnızca q enlem/boylam koordinatı olarak belirtildiğinde kullanılabildiğini unutmayın.

Java

// 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);

Kotlin

// 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)

Açık adrese veya enlem/boylam bilgisine alternatif olarak, plus code kullanarak bilinen bir konumda raptiye gösterebilirsiniz.

Java

// 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

Kotlin

// 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

Adım adım navigasyonu başlatma

Belirtilen adrese veya koordinata adım adım yol tarifi içeren Google Haritalar navigasyonunu başlatmak için bu niyeti kullanın. Yol tarifleri her zaman kullanıcının mevcut konumundan verilir.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude

Parametreler

  • q: Gezinme aramalarının bitiş noktasını belirler. Bu değer, enlem, boylam koordinatları veya sorgu biçimli bir adres olabilir. Birden fazla sonuç döndüren bir sorgu dizesiyse ilk sonuç seçilir.

  • mode, taşıma yöntemini belirler. Mod isteğe bağlıdır ve aşağıdakilerden birine ayarlanabilir:

    • d sürüş için (varsayılan)
    • Bisiklet için b
    • İki tekerlekli araç için l
    • Yürüyüş için w
  • avoid, rotanın kaçınmaya çalışması gereken özellikleri belirler. Kaçın seçeneği isteğe bağlıdır ve aşağıdakilerden biri veya daha fazlası olarak ayarlanabilir:

    • Geçiş ücretleri için t
    • Otoyollar için h
    • Feribotlar için f

Örnekler

Aşağıdaki Intent, Avustralya Sidney'deki Taronga Hayvanat Bahçesi'ne adım adım yol tarifi isteğinde bulunur:

Java

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);

Kotlin

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)

Taronga Hayvanat Bahçesi'ne yol tarifi

Ücretli geçiş ücreti ödemek veya feribot kullanmak istemiyorsanız bu tür ücretlerden kaçınmaya çalışan bir rota isteğinde bulunabilirsiniz.

Java

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);

Kotlin

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)

Biraz egzersiz yapmak isterseniz bisikletle gitmek için yol tarifi isteyebilirsiniz.

Java

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);

Kotlin

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)

Motorlu iki tekerlekli bir araçla gitmeyi tercih ediyorsanız yol tariflerinin, arabaların kullanamadığı dar yolları ve patikaları içermesini isteyebilirsiniz. Aşağıdaki intent, Hindistan'da bir rota döndürür.

Java

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);

Kotlin

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)

Street View panoramasını görüntüleme

Google Street View'u başlatmak için google.streetview intent'ini kullanın. Google Street View, kapsam alanında belirlenen konumlardan panoramik görüntüler sunar. Kullanıcı tarafından eklenen Photosphere'ler ve Street View özel koleksiyonları da kullanılabilir.

google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt
google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt

Parametreler

Tüm google.streetview URI'leri bir cbll veya panoid parametresi içermelidir.

  • cbll, enlem ve boylamı virgülle ayrılmış değerler olarak kabul eder (46.414382,10.013988). Uygulama, bu konuma en yakın yerde çekilen panoramayı gösterir. Street View görüntüleri düzenli olarak yenilendiği ve fotoğraflar her seferinde biraz farklı konumlardan çekilebileceği için görüntüler güncellendiğinde konumunuzun farklı bir panoramaya çekilmesi mümkündür.

  • panoid, belirli bir panorama kimliğidir. Hem panoid hem de cbll belirtilirse Google Haritalar panorama kimliğini kullanır. Android uygulamaları, StreetViewPanoramaLocation nesnesinden panorama kimliklerine erişebilir.

  • cbp, kameranın ilk yönünü ayarlayan isteğe bağlı bir parametredir. cbp parametresi, tümü isteğe bağlı olan 5 virgülle ayrılmış değer alır. En önemli değerler, sırasıyla yön, yakınlaştırma ve eğimi ayarlayan ikinci, dördüncü ve beşinci değerlerdir. İlk ve üçüncü değerler desteklenmez ve 0 olarak ayarlanmalıdır.

    • bearing: Kameranın pusula istikametini kuzeyden saat yönünde derece cinsinden belirtir. Gerçek kuzey 0, doğu 90, güney 180, batı 270 derecedir. Yöne iletilen değerler sarmalanır. Yani 0°, 360° ve 720° aynı yönü gösterir. Yön, virgülle ayrılmış beş değerden ikincisi olarak tanımlanır.
    • zoom: Kameranın yakınlaştırma düzeyini ayarlar. Varsayılan yakınlaştırma düzeyi 0 olarak ayarlanır. 1'e ayarlanmış yakınlaştırma, büyütmeyi iki katına çıkarır. Yakınlaştırma, 0 ile mevcut panoramanın maksimum yakınlaştırma düzeyi arasında sınırlandırılır. Bu, bu aralığın dışında kalan tüm değerlerin aralığa en yakın uç değere ayarlanacağı anlamına gelir. Örneğin, -1 değeri 0 olarak ayarlanır. Yakınlaştırma, virgülle ayrılmış beş değerden dördüncüsüdür.
    • tilt: Kameranın yukarı veya aşağı açısını belirtir. Aralık -90 ile 0 ila 90 arasındadır. 90 değeri kameranın aşağıya, 0 değeri ufkun ortasına, -90 değeri ise yukarıya baktığını gösterir.

Örnekler

Aşağıda, Street View intent'inin kullanımına ilişkin bazı örnekler verilmiştir.

Java

// 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);

Kotlin

// 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)

Street View'da piramitler