Maps JavaScript API 2. sürümü 26 Mayıs 2021'den itibaren kullanılamamaktadır. Sonuç olarak, sitenizin v2 haritaları çalışmayı durdurur ve JavaScript hataları döndürür. Haritaları sitenizde kullanmaya devam etmek için Maps JavaScript API v3'e geçin. Bu kılavuz, işlem boyunca size yardımcı olacaktır.
  Genel Bakış
Her uygulamanın geçiş süreci biraz farklıdır ancak tüm projelerde ortak olan bazı adımlar vardır:
  - Yeni bir anahtar alın. Maps JavaScript API, anahtarları yönetmek için artık Google Cloud Console'u kullanıyor. Hâlâ 2. sürüm anahtarı kullanıyorsanız taşıma işlemine başlamadan önce yeni API anahtarınızı edindiğinizden emin olun.
  
- API Bootstrap'inizi güncelleyin. Çoğu uygulama, Maps JavaScript API v3'ü aşağıdaki kodla yükler:
 <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script> 
- Kodu güncelleyin. Gerekli değişiklik miktarı, uygulamanıza bağlı olarak büyük ölçüde değişir. Sık karşılaşılan değişiklikler şunlardır:
    
      - Her zaman google.maps ad alanını referans olarak kullanın. 3. sürümde, tüm Maps JavaScript API kodu, genel ad alanı yerine google.maps.*ad alanında depolanır. Çoğu nesne de bu sürecin bir parçası olarak yeniden adlandırıldı. Örneğin,GMap2yerinegoogle.maps.Mapyüklenir.
- Kullanımdan kaldırılmış yöntemlere yapılan tüm referansları kaldırın. GDownloadURLveGLoggibi bazı genel amaçlı yardımcı program yöntemleri kaldırıldı.
        Bu işlevi üçüncü taraf yardımcı program kitaplıklarıyla değiştirin veya bu referansları kodunuzdan kaldırın.
- (İsteğe bağlı) Kodunuza kitaplık ekleyin. Birçok özellik, her uygulamanın yalnızca API'nin kullanılacak bölümlerini yüklemesi gerektiği için yardımcı kitaplıklara aktarıldı.
      
- (İsteğe bağlı) Projenizi v3 haricilerini kullanacak şekilde yapılandırın.
        V3 harici öğeleri, kodunuzu Closure Compiler ile doğrulamanıza veya IDE'nizde otomatik tamamlamayı tetiklemenize yardımcı olmak için kullanılabilir.
        
          Gelişmiş Derleme ve Stajyerler hakkında daha fazla bilgi edinin.
 
- Test edin ve tekrarlayın. Bu noktada hâlâ yapmanız gereken bazı işler var ancak yeni v3 harita uygulamanıza doğru iyi bir yoldasınız.
Maps JavaScript API'nin 3. sürümünde yapılan değişiklikler
Taşıma işleminizi planlamadan önce, Haritalar JavaScript API v2 ile Haritalar JavaScript API v3 arasındaki farkları anlamalısınız. Maps JavaScript API'nin en yeni sürümü, modern JavaScript programlama tekniklerine, kitaplıkların daha fazla kullanılmasına ve basitleştirilmiş bir API'ye odaklanarak sıfırdan yazılmıştır.
  API'ye birçok yeni özellik eklendi ve bilinen bazı özellikler değiştirildi hatta kaldırıldı. Bu bölümde, iki sürüm arasındaki temel farklılıklardan bazıları vurgulanmaktadır.
v3 API'deki değişikliklerden bazıları şunlardır:
  - Basitleştirilmiş bir çekirdek kitaplık. Ek işlevlerin çoğu kitaplıklara taşındı. Bu sayede Core API'nin yüklenmesi ve ayrıştırma süreleri azaltıldı. Böylece haritanız herhangi bir cihazda hızlı bir şekilde yüklenebilir.
- Poligon oluşturma ve işaretçi yerleşimi gibi çeşitli özelliklerin performansı iyileştirildi.
- Mobil proxy'ler ve kurumsal güvenlik duvarları tarafından kullanılan ortak adresleri daha iyi barındırmak için istemci taraflı kullanım sınırlamalarına yönelik yeni bir yaklaşım.
- Çeşitli modern tarayıcılar ve mobil tarayıcılar için destek eklendi. Internet Explorer 6 desteği kaldırıldı.
- Genel amaçlı yardımcı sınıfların çoğu kaldırıldı (
  
  GLogveyaGDownloadUrl). Günümüzde, Closure veya
  jQuery gibi benzer işlevler sunan birçok mükemmel JavaScript kitaplığı mevcuttur.
- Herhangi bir mobil cihazda yüklenecek bir HTML5 Street View uygulaması.
- Kendi fotoğraflarınızla özel Street View panoramaları oluşturarak kayak pistlerinin, satılık evlerin veya ilgi çekici diğer yerlerin panoramalarını paylaşabilirsiniz.
- Stilize Haritalar özelleştirmeleri, temel haritadaki öğelerin görüntülenmesini benzersiz görsel stilinize uyacak şekilde değiştirmenize olanak tanır.
- ElevationService ve Distance Matrix gibi çeşitli yeni hizmetler için destek
- İyileştirilmiş yol tarifi hizmetleri, alternatif rotalar, rota optimizasyonu (
  satıcı seyahati problemi için yaklaşık çözümler), bisiklet yol tarifleri (
  bisiklet katmanı ile), toplu taşıma yol tarifleri ve 
  sürükle bırak yol tarifleri sunar.
- Geocoding API v2'deki accuracydeğerinden daha doğru tür bilgileri sağlayan güncellenmiş bir coğrafi kodlama biçimi.
- Tek bir haritada birden fazla bilgi panosunun desteklenmesi
Yeni Anahtarınız
    Maps JavaScript API'nin 3. sürümü, 2. sürümdeki yeni bir anahtar sistemini kullanır. Uygulamanızda zaten v3 anahtarı kullanıyor olabilirsiniz. Bu durumda herhangi bir değişiklik yapmanız gerekmez. Doğrulamak için, Maps JavaScript API'yi yüklediğiniz URL'de key parametresini kontrol edin. Anahtar değeri "ABQIAA" ile başlıyorsa v2 anahtarı kullanıyorsunuz demektir. V2 anahtarınız varsa taşıma işleminin bir parçası olarak anahtarınızı v3 sürümüne geçirmeniz gerekir. Bu işlem sonucunda:
    
  
    Anahtar, Maps JavaScript API v3 yüklenirken iletilir.
    API anahtarları oluşturma hakkında daha fazla bilgi edinin.
  
  
    Work için Google Haritalar API'leri müşterisiyseniz key parametresi yerine client parametresini kullanan bir müşteri kimliği kullanıyor olabileceğinizi unutmayın. İstemci kimlikleri, Haritalar JavaScript API v3'te hâlâ desteklenmektedir ve anahtar yükseltme sürecinden geçmeleri gerekmez.
  
  API'yi yükleme
  Kodunuzda yapmanız gereken ilk değişiklik, API'yi yükleme şeklinizle ilgilidir. 2. sürümde, Maps JavaScript API'yi http://maps.google.com/maps adresine gönderilen bir istek üzerinden yüklersiniz. Maps JavaScript API 3.0 sürümünü yüklüyorsanız aşağıdaki değişiklikleri yapmanız gerekir:
  - API'yi //maps.googleapis.com/maps/api/jsadresinden yükleme
- fileparametresini kaldırın.
- keyparametresini yeni v3 anahtarınızla güncelleyin. Work için Google Haritalar API'si müşterileri- clientparametresi kullanmalıdır.
- (Yalnızca Google Haritalar Platformu Premium Planı) clientparametresinin, 
    Google Haritalar Platformu Premium Planı Geliştirici Kılavuzu'nda açıklandığı şekilde sağlandığını doğrulayın.
- En son yayınlanan sürümü istemek için vparametresini kaldırın veya değerini v3 sürümlendirme şemasına göre değiştirin.
- (İsteğe bağlı) hlparametresinilanguageile değiştirin ve değerini koruyun.
- (İsteğe bağlı) İsteğe bağlı kitaplıkları yüklemek için librariesparametresi ekleyin.
En basit durumda, v3 önyüklemesi yalnızca API anahtarı parametrenizi belirtir:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
Aşağıdaki örnekte, Maps JavaScript API v2'nin en son sürümünün Almanca olarak istendiği görülüyor:
<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>
Aşağıdaki örnek, v3 için eşdeğer bir istektir.
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>
google.maps ad alanı
Maps JavaScript API v3'teki en dikkat çekici değişiklik muhtemelen google.maps ad alanının kullanıma sunulmasıydı. v2 API, tüm nesneleri varsayılan olarak Global ad alanına yerleştirir. Bu da ad çakışmasına neden olabilir. 3. sürümde tüm nesneler google.maps ad alanında bulunur.
Uygulamanızı v3'e taşırken yeni ad alanını kullanmak için kodunuzu değiştirmeniz gerekir. Maalesef "G" araması yapıp "google.maps" ile değiştirmek tam olarak işe yaramaz. Ancak kodunuzu incelerken bu yöntemi uygulamak iyi bir fikirdir. Aşağıda, v2 ve v3'teki eşdeğer sınıflara dair bazı örnekler verilmiştir.
  | v2 | v3 | 
  | GMap2 | google.maps.Map | 
  | GLatLng | google.maps.LatLng | 
  | GInfoWindow | google.maps.InfoWindow | 
  | GMapOptions | google.map.MapOptions | 
  | G_API_VERSION | google.maps.version | 
  | GPolyStyleOptions | google.maps.PolygonOptions or
    google.maps.PolylineOptions
 | 
  
  
    Eski Kodları Kaldırma
    Haritalar JavaScript API'si sürüm 3, sürüm 2'deki işlevlerin çoğuna paralel işlevlere sahiptir. Ancak artık desteklenmeyen bazı sınıflar vardır. Taşıma işleminiz kapsamında bu sınıfları üçüncü taraf yardımcı program kitaplıklarıyla değiştirmeniz veya bu referansları kodunuzdan kaldırmanız gerekir. Closure veya jQuery gibi benzer işlevler sunan birçok mükemmel JavaScript kitaplığı vardır.
    Aşağıdaki sınıfların Maps JavaScript API v3'te eşdeğeri yoktur:
    
      | GBounds | GLanguage | 
      | GBrowserIsCompatible | GLayer | 
      | GControl | GLog | 
      | GControlAnchor | GMercatorProjection | 
      | GControlImpl | GNavLabelControl | 
      | GControlPosition | GObliqueMercator | 
      | GCopyright | GOverlay | 
      | GCopyrightCollection | GPhotoSpec | 
      | GDownloadUrl | GPolyEditingOptions | 
      | GDraggableObject | GScreenOverlay | 
      | GDraggableObjectOptions | GStreetviewFeatures | 
      | GFactualGeocodeCache | GStreetviewLocation | 
      | GGeoAddressAccuracy | GStreetviewOverlay | 
      | GGeocodeCache | GStreetviewUserPhotosOptions | 
      | GGoogleBar | GTileLayerOptions | 
      | GGoogleBarAdsOptions | GTileLayerOverlayOptions | 
      | GGoogleBarLinkTarget | GTrafficOverlayOptions | 
      | GGoogleBarListingTypes | GUnload | 
      | GGoogleBarOptions | GXml | 
      | GGoogleBarResultList | GXmlHttp | 
      | GInfoWindowTab | GXslt | 
      | GKeyboardHandler |  | 
    
  
  
    Kodu Karşılaştırma
    Aşağıda, v2 ve v3 API'leri kullanılarak yazılmış iki uygulamanın karşılaştırması verilmiştir.
    
    
    <!DOCTYPE html>
<html>
  <head>
    <script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(
            document.getElementById('map'));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
        map.setUIToDefault();
        map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
      }
    }
    </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map"></div>
  </body>
</html>
    
     
    
    <!DOCTYPE html>
<html>
  <head>
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      var map = new google.maps.Map(
        document.getElementById('map'), {
          center: new google.maps.LatLng(37.4419, -122.1419),
          zoom: 13,
          mapTypeId: google.maps.MapTypeId.ROADMAP
      });
      var marker = new google.maps.Marker({
            position: new google.maps.LatLng(37.4419, -122.1419),
            map: map
      });
    }
    google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>
    
     
    
     
    Gördüğünüz gibi, iki uygulama arasında birkaç fark var. Önemli değişikliklerden bazıları şunlardır:
    
      - API'nin yüklendiği adres değişti.
- GBrowserIsCompatible()ve- GUnload()yöntemleri artık v3'te gerekli değildir ve API'den kaldırılmıştır.
- GMap2nesnesi, API'deki merkezi nesne olarak- google.maps.Mapile değiştirilir.
- Mülkler artık Seçenekler sınıfları aracılığıyla yüklenir. Yukarıdaki örnekte, bir haritayı yüklemek için gereken üç özelliği (center,zoomvemapTypeId) dahili birMapOptionsnesnesi kullanarak belirledik.
- Varsayılan kullanıcı arayüzü, v3'te varsayılan olarak açıktır. Bunu devre dışı bırakmak için MapOptionsnesnesindedisableDefaultUIözelliğini true olarak ayarlayabilirsiniz.
Özet
    Bu noktada, Haritalar JavaScript API'nin 2. sürümünden 3. sürümüne geçişinizle ilgili bazı önemli noktaları öğrenmiş olacaksınız.
      Bilmeniz gereken başka bilgiler de vardır ancak bu bilgiler uygulamanıza bağlıdır. Aşağıdaki bölümlerde, karşılaşabileceğiniz belirli durumlar için taşıma talimatları verilmiştir. Ayrıca, yükseltme işlemi sırasında faydalı bulabileceğiniz çeşitli kaynaklar da vardır.
    
    Bu belgeyle ilgili herhangi bir sorun veya sorunuz olursa bu sayfanın üst kısmındaki GERİ BİLDİRİM GÖNDER bağlantısını kullanın.
  
  
  Bu bölümde, Maps JavaScript API'nin hem 2. hem de 3. sürümünün en popüler özelliklerinin ayrıntılı bir karşılaştırması sunulmaktadır. Referansın her bölümü ayrı ayrı okunacak şekilde tasarlanmıştır. Bu referansı baştan sona okumanızı değil, taşıma işleminize yardımcı olması için duruma göre bu materyali kullanmanızı öneririz.
  - Etkinlikler: Etkinlikleri kaydetme ve işleme.
- Denetimler: Haritada görünen gezinme denetimlerini yönetme.
- Yer paylaşımları: Haritaya nesne ekleme ve düzenleme
- Harita Türleri: Temel haritayı oluşturan karolar.
  
- Katmanlar: KML veya Trafik katmanları gibi grup halinde içerik ekleme ve düzenleme.
- Hizmetler: Google'ın coğrafi kodlama, yol tarifi veya Street View hizmetleri ile çalışır.
Etkinlikler
Maps JavaScript API v3'ün etkinlik modeli, v2'de kullanılana benzer olsa da temelde çok şey değişti.
  MVC Desteği İçin Yeni Etkinlik
v3 API, MVC durum değişikliklerini yansıtmak için yeni bir etkinlik türü ekler. Artık iki tür etkinlik vardır:
  
    - Kullanıcı etkinlikleri ("tıklama" fare etkinlikleri gibi), DOM'dan Haritalar JavaScript API'sine iletilir. Bu etkinlikler, standart DOM etkinliklerinden ayrı ve farklıdır.
- MVC durum değişikliği bildirimleri, Haritalar API nesnelerindeki değişiklikleri yansıtır ve property_changedkuralı kullanılarak adlandırılır.
  Her Haritalar API nesnesi, bir dizi adlandırılmış etkinlik dışa aktarır. Belirli etkinliklerle ilgilenen uygulamalar, bu etkinlikler için etkinlik dinleyicileri kaydetmeli ve bu etkinlikler alındığında kodu çalıştırmalıdır. Bu etkinlik odaklı mekanizma, ad alanının GEvent yerine google.maps.event olarak değiştiği dışında hem Maps JavaScript API v2 hem de v3'te aynıdır:
  
    
    GEvent.addListener(map, 'click', function() {
  alert('You clicked the map.');
});
     
    
    google.maps.event.addListener(map, 'click', function() {
  alert('You clicked the map.');
});
     
    
   
  
  
    Etkinlik işleyicileri kaldırma
    
      Performans nedeniyle, artık gerekli olmayan bir etkinlik işleyiciyi kaldırmak en iyisidir. Bir etkinlik işleyiciyi kaldırma işlemi, v2 ve v3'te aynı şekilde çalışır:
    
    
      - Bir etkinlik işleyici oluşturduğunuzda opak bir nesne (v2'de GEventListener, v3'te MapsEventListener) döndürülür.
      
- Etkinlik işleyiciyi kaldırmak istediğinizde bu nesneyi removeListener()yöntemine (v2'deGEvent.removeListener()veya v3'tegoogle.maps.event.removeListener()) göndererek etkinlik işleyiciyi kaldırabilirsiniz.
DOM Etkinliklerini Dinleme
    DOM (Belge Nesne Modeli) etkinliklerini yakalamak ve bunlara yanıt vermek istiyorsanız v3, v2'deki GEvent.addDomListener() yöntemine eşdeğer olan google.maps.event.addDomListener() statik yöntemini sağlar.
  
  
    Etkinliklerde İletilen Bağımsız Değişkenleri Kullanma
    Kullanıcı arayüzü etkinlikleri genellikle bir etkinlik bağımsız değişkeni ileterek etkinlik işleyicinin bu bağımsız değişkene erişmesini sağlar. v3'teki çoğu etkinlik bağımsız değişkeni, API'deki nesnelerle daha tutarlı olması için basitleştirildi. (Ayrıntılar için v3 Referansı'na bakın.)
    v3 etkinlik işleyicilerinde overlay bağımsız değişkeni yoktur. v3 haritasında bir click etkinliği kaydederseniz geri çağırma yalnızca kullanıcı ana haritayı tıkladığında gerçekleşir. Tıklanabilir yer paylaşımlarına ek geri çağırma işlevleri kaydederek bu tıklamalara tepki verebilirsiniz.
    
    
      
      // Passes an overlay argument when clicking on a map
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
GEvent.addListener(map,'click', function(overlay, latlng) {
  if (latlng) {
    var marker = new GMarker(latlng);
    map.addOverlay(marker);
  }
});
       
      
      // Passes only an event argument
var myOptions = {
    center: new google.maps.LatLng(-25.363882, 131.044922),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'),
    myOptions);
google.maps.event.addListener(map, 'click', function(event) {
  var marker = new google.maps.Marker({
      position: event.latLng,
      map: map
  });
});
       
      
     
  
  
    Denetimler
    Maps JavaScript API, kullanıcıların haritanızla etkileşime girmesine olanak tanıyan kullanıcı arayüzü denetimlerini gösterir. Bu denetimlerin nasıl görüneceğini özelleştirmek için API'yi kullanabilirsiniz.
    
      Kontrol türlerinde yapılan değişiklikler
      v3 API ile control türlerinde bazı değişiklikler yapıldı.
      
        - v3 API, arazi haritaları ve özel harita türleri ekleme özelliği de dahil olmak üzere ek harita türlerini destekler.
- GHierarchicalMapTypeControladlı v2 hiyerarşik kontrolü artık kullanılamıyor.- google.maps.MapTypeControlStyle.HORIZONTAL_BARdenetimini kullanarak benzer bir etki elde edebilirsiniz.
- GMapTypeControltarafından 2. sürümde sağlanan yatay düzen, 3. sürümde kullanılamaz.
Haritaya kontrol ekleme
    Maps JavaScript API v2 ile haritanıza, harita nesnenizin addControl() yöntemi aracılığıyla denetimler eklersiniz. 3. sürümde, denetimlere doğrudan erişmek veya denetimleri değiştirmek yerine, ilişkili MapOptions nesnesini değiştirirsiniz. Aşağıdaki örnekte, haritanın aşağıdaki denetimleri eklemek için nasıl özelleştirileceği gösterilmektedir:
    
    
     - Kullanıcının mevcut harita türleri arasında geçiş yapmasına olanak tanıyan düğmeler
- harita ölçeği
      
        var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add controls
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
       
      
        var myOptions = {
    center: new google.maps.LatLng(-25.363882, 131.044922),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    // Add controls
    mapTypeControl: true,
    scaleControl: true
};
var map = new google.maps.Map(document.getElementById('map'),
    myOptions);
       
      
     
  
  
    Haritada Konum Kontrolleri
    Konumlandırma kontrolleri, 3. sürümde büyük ölçüde değişti. addControl() yöntemi, 2. sürümde kontrol elemanının haritanın köşelerine göre konumunu belirtmenize olanak tanıyan isteğe bağlı ikinci bir parametre alır.
    
    3. sürümde, bir kontrolün konumunu kontrol seçeneklerinin position mülkü aracılığıyla belirlersiniz. Bu denetimlerin konumlandırması mutlak değildir. Bunun yerine API, denetimleri belirli kısıtlamalar (harita boyutu gibi) dahilinde mevcut harita öğelerinin etrafında "akıtarak" akıllıca düzenler.
      Bu düzen, varsayılan kontrollerin kontrollerinizle uyumlu olmasını sağlar.
      Daha fazla bilgi için v3'te konumlandırmayı kontrol etme başlıklı makaleyi inceleyin.
    
    Aşağıdaki kod, yukarıdaki örneklerdeki kontrolleri yeniden konumlandırır:
    
      
        var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add map type control
map.addControl(new GMapTypeControl(), new GControlPosition(
    G_ANCHOR_TOP_LEFT, new GSize(10, 10)));
// Add scale
map.addControl(new GScaleControl(), new GControlPosition(
    G_ANCHOR_BOTTOM_RIGHT, new GSize(20, 20)));
       
      
      var myOptions = {
  center: new google.maps.LatLng(-25.363882, 131.044922),
  zoom: 4,
  mapTypeId: google.maps.MapTypeId.ROADMAP,
  // Add map type control
  mapTypeControl: true,
  mapTypeControlOptions: {
      style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
      position: google.maps.ControlPosition.TOP_LEFT
  },
  // Add scale
  scaleControl: true,
  scaleControlOptions: {
      position: google.maps.ControlPosition.BOTTOM_RIGHT
  }
};
var map = new google.maps.Map(document.getElementById('map'),
    myOptions);
       
      
     
  
  
    Özel Denetimler
    Özel gezinme kontrolleri oluşturmak için Maps JavaScript API'yi kullanın.
      Denetimleri v2 API ile özelleştirmek için GControl sınıfını alt sınıfa alır ve initialize() ile getDefaultPosition() yöntemleri için işleyiciler tanımlarsınız.
      GControl sınıfının v3'teki eşdeğeri yoktur. Bunun yerine denetimler DOM öğeleri olarak temsil edilir. v3 API ile özel bir denetim eklemek için bir Node öğesinin (ör. <div> öğesi) alt öğesi olarak bir oluşturucuda denetim için bir DOM yapısı oluşturun ve tüm DOM etkinliklerini işlemek üzere etkinlik dinleyicileri ekleyin. Haritanıza özel denetim örneği eklemek için Node öğesini haritaların controls[position] dizisine gönderin.
    
    Yukarıda belirtilen arayüz koşullarına uyan bir HomeControl sınıfı uygulaması verildiğinde (ayrıntılar için Özel Kontroller dokümanlarına bakın), aşağıdaki kod örnekleri bir haritaya özel kontrol eklemeyi gösterir.
    
    
      
        map.addControl(new HomeControl(),
    GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
       
      
        var homeControlDiv = document.createElement('DIV');
var homeControl = new HomeControl(homeControlDiv, map);
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(
    homeControlDiv);
       
      
     
  
  
    Katmanlar
    Yer paylaşımları, noktaları, çizgileri, alanları veya nesne koleksiyonlarını belirtmek için haritaya "eklediğiniz" nesneleri yansıtır.
 
   Yer paylaşımları ekleme ve kaldırma
  Yer paylaşımı tarafından temsil edilen nesne türleri, v2 ile v3 arasında aynıdır ancak farklı şekilde ele alınır.
  v2 API'deki yer paylaşımları, GMap2 nesnesinin addOverlay() ve removeOverlay() yöntemleri kullanılarak haritaya eklenip haritadan kaldırılıyordu. 3. sürümde, ilişkili yer paylaşımı seçenekleri sınıfının map mülkünü kullanarak bir haritayı yer paylaşımına atarsınız.
  Ayrıca, yer paylaşımı nesnesinin setMap() yöntemini çağırarak ve istediğiniz haritayı belirterek doğrudan yer paylaşımı ekleyebilir veya kaldırabilirsiniz. Yer paylaşımını kaldırmak için harita özelliğini null olarak ayarlayın.
    clearOverlays() yöntemi v3'te mevcut değildir.
  Bir dizi yer paylaşımını yönetmek istiyorsanız yer paylaşımlarını barındıracak bir dizi oluşturmanız gerekir. Bu diziyi kullanarak, dizideki her yer paylaşımı için setMap() işlevini çağırabilirsiniz (kaldırmanız gerekiyorsa null parametresini iletin).
  
  
    Sürüklenebilir İşaretçiler
    İşaretçileri varsayılan olarak tıklayabilirsiniz ancak sürükleyemezsiniz. Aşağıdaki iki örnekte sürüklenebilir bir işaretçi eklenmiştir:
    
      
        var myLatLng = new GLatLng(-25.363882, 131.044922);
var map = new GMap2(document.getElementById('map'));
map.setCenter(myLatLng, 4);
var marker = new GMarker(latLng, {
  draggable: true
});
map.addOverlay(marker);
       
      
      var myLatLng = new google.maps.LatLng(-25.363882, 131.044922);
var map = new google.maps.Map(
  document.getElementById('map'), {
  center: myLatLng,
  zoom: 4,
  mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
    position: myLatLng,
    draggable: true,
    map: map
});
       
      
     
  
  
    Simgeler
  Varsayılan işaretçi yerine gösterilecek özel bir simge tanımlayabilirsiniz.
  v2'de özel bir resim kullanmak için G_DEFAULT_ICON type'dan bir GIcon
  örneği oluşturabilir ve bunu değiştirebilirsiniz. Resminiz varsayılan simgeden daha büyük veya daha küçükse bunu bir GSize örneğiyle belirtmeniz gerekir.
  v3 API bu süreci biraz basitleştirir.
  İşaretçinin icon
  mülkünü özel resminizin URL'sine ayarladığınızda API, simgeyi otomatik olarak boyutlandırır.
  Maps JavaScript API, karmaşık simgeler için de destek sağlar.
    Karmaşık simgeler birden fazla karo, karmaşık şekiller içerebilir veya resimlerin diğer yer paylaşımlarına göre nasıl gösterileceğinin "yığın sırasını" belirtebilir. v2'de bir işaretçiye şekil eklemek için her GIcon örneğinde ek mülkü belirtmeniz ve bunu bir GMarker oluşturucusuna seçenek olarak iletmeniz gerekir. 3. sürümde, bu şekilde belirtilen simgelerin icon özelliklerinin Icon türüne ayarlanması gerekir.
    İşaretçi gölgeleri v3'te desteklenmez.
    Aşağıdaki örneklerde, Avustralya'daki Bondi Plajı'nda bir plaj bayrağı gösterilmektedir. Simgenin şeffaf kısmı tıklanamaz:
    
    
      
        var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
var flagIcon = new GIcon(G_DEFAULT_ICON);
flagIcon.image = '/images/beachflag.png';
flagIcon.imageMap = [1, 1, 1, 20, 18, 20, 18 , 1];
var bbLatLng = new GLatLng(-33.890542, 151.274856);
map.addOverlay(new GMarker(bbLatLng, {
  icon: flagIcon
}));
       
      
        var map = new google.maps.Map(
  document.getElementById('map'), {
  center: new google.maps.LatLng(-25.363882, 131.044922),
  zoom: 4,
  mapTypeId: google.maps.MapTypeId.ROADMAP
});
var shape = {
    coord: [1, 1, 1, 20, 18, 20, 18 , 1],
    type: 'poly'
};
var bbLatLng = new google.maps.LatLng(-33.890542, 151.274856);
var bbMarker = new google.maps.Marker({
    icon: '/images/beachflag.png'
    shape: shape,
    position: bbLatLng,
    map: map
});
       
      
     
  
  
    Çoklu çizgiler
    Bir çok çizgi, bir LatLng dizisi ve bu konumları sıralı bir sırada birbirine bağlayan bir dizi çizgi segmentinden oluşur.
  Polyline nesnesi oluşturma ve görüntüleme işlemi, v3'te GPolyline nesnesi kullanma işlemine benzer. Aşağıdaki örneklerde, Zürih'ten Singapur üzerinden Sydney'e giden yarı şeffaf, 3 piksel genişliğinde bir jeodezik poli çizgisi çizilmiştir:
    
      
      var polyline = new GPolyline(
  [
    new GLatLng(47.3690239, 8.5380326),
    new GLatLng(1.352083, 103.819836),
    new GLatLng(-33.867139, 151.207114)
  ],
  '#FF0000', 3, 0.5, {
  geodesic: true
});
map.addOverlay(polyline);
       
      
        var polyline = new google.maps.Polyline({
  path: [
    new google.maps.LatLng(47.3690239, 8.5380326),
    new google.maps.LatLng(1.352083, 103.819836),
    new google.maps.LatLng(-33.867139, 151.207114)
  ],
  strokeColor: '#FF0000',
  strokeOpacity: 0.5,
  strokeWeight: 3,
  geodesic: true
});
polyline.setMap(map);
       
      
     
    Kodlanmış çoklu çizgiler
    Polyline nesnelerini doğrudan kodlanmış poli çizgilerden oluşturmak için v3'te destek yoktur. Bunun yerine, Geometri Kitaplığı, poli çizgileri kodlama ve kodlarını çözme yöntemleri sağlar. Bu kitaplığın nasıl yükleneceği hakkında daha fazla bilgi için v3 Haritalar API'sindeki Kitaplıklar bölümüne bakın.
    
    Aşağıdaki örneklerde aynı kodlanmış çoklu çizgi çizilmektedir. v3 kodunda, google.maps.geometry.encoding ad alanındaki decodePath() yöntemi kullanılmaktadır.
    
    
      
        var polyline = new GPolyline.fromEncoded({
  points: 'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H',
  levels: 'PPP',
  zoomFactor: 2,
  numLevels: 18,
  color: '#ff0000',
  opacity: 0.8,
  weight: 3
});
map.addOverlay(polyline);
       
      
        var polyline = new google.maps.Polyline({
  path: google.maps.geometry.encoding.decodePath(
    'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H'),
  strokeColor: '#FF0000',
  strokeOpacity: 0.5,
  strokeWeight: 3,
});
polyline.setMap(map);
       
      
     
  
  
    Poligonlar
    Poligon, kapalı bir döngü içindeki bir bölgeyi tanımlar. Polyline nesnesine benzer şekilde, Polygon nesneleri de sıralı bir sıradaki bir dizi noktadan oluşur. v3 Polygon sınıfı, v2 GPolygon sınıfıyla hemen hemen aynıdır. Tek fark, döngüyü kapatmak için artık yolun sonunda başlangıç köşesini tekrarlamanız gerekmemesidir. v3 API, son koordinatı ilk koordinata bağlayan bir çizgi çizerek tüm poligonları otomatik olarak kapatır. Aşağıdaki kod snippet'leri, Bermuda Şeytan Üçgeni'ni temsil eden bir poligon oluşturur:
    
      
      var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(24.886436, -70.268554), 5);
var bermudaTriangle = new GPolygon(
  [
    new GLatLng(25.774252, -80.190262),
    new GLatLng(18.466465, -66.118292),
    new GLatLng(32.321384, -64.75737),
    new GLatLng(25.774252, -80.190262)
  ],
  '#FF0000', 2, 0.8, '#FF0000', 0.35);
map.addOverlay(bermudaTriangle);
       
      
      var map = new google.maps.Map(document.getElementById('map'), {
  center: new google.maps.LatLng(24.886436, -70.268554),
  mapTypeId: google.maps.MapTypeId.TERRAIN,
  zoom: 5
});
var bermudaTriangle = new google.maps.Polygon({
  paths: [
    new google.maps.LatLng(25.774252, -80.190262),
    new google.maps.LatLng(18.466465, -66.118292),
    new google.maps.LatLng(32.321384, -64.75737)
  ],
  strokeColor: '#FF0000',
  strokeWeight: 2,
  strokeOpacity: 0.8,
  fillColor: '#FF0000',
  fillOpacity: 0.35
});
bermudaTriangle.setMap(map);
       
      
     
  
  
    Kullanıcı Tarafından Düzenlenebilir Şekiller
    Çoklu çizgiler ve poligonlar kullanıcı tarafından düzenlenebilir hale getirilebilir. Aşağıdaki kod snippet'leri eşdeğerdir:
    
    
      
        map.addOverlay(polyline);
polyline.enableEditing();
       
      
        polyline.setMap(map);
polyline.setEditable(true);
       
      
     
    Daha gelişmiş çizim özellikleri için v3 dokümanlarında yer alan Çizim Kitaplığı'na bakın.
  
  
    Bilgi Pencereleri
    InfoWindow, içeriği haritanın üstünde kayan bir pencerede gösterir. 2. sürüm ile 3. sürüm bilgi pencereleri arasında birkaç temel fark vardır:
    
    
      - v2 API her harita için yalnızca GInfoWindowdesteklerken v3 API her haritada birden fazla eşzamanlıInfoWindowdestekler.
- Haritayı tıkladığınızda v3 InfoWindowaçık kalır. Haritayı tıkladığınızda v2GInfoWindowotomatik olarak kapanır.Mapnesnesine birclickdinleyici ekleyerek v2 davranışını taklit edebilirsiniz.
- v3 API, sekmeli InfoWindowiçin yerleşik destek sağlamaz.
Zemin yer paylaşımları
    Bir resmi haritaya yerleştirmek için GroundOverlay nesnesi kullanmanız gerekir. GroundOverlay sınıfının oluşturucusu, v2 ve v3'te temel olarak aynıdır: Bir resmin URL'sini ve resmin sınırlarını parametre olarak belirtir.
    Aşağıdaki örnekte, Newark, NJ'nin eski bir haritası haritaya yer paylaşımı olarak yerleştirilmiştir:
    
      
        var bounds = new GLatLngBounds(
    new GLatLng(40.716216, -74.213393),
    new GLatLng(40.765641, -74.139235));
var overlay = new GGroundOverlay(
    'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
    bounds);
map.addOverlay(overlay);
       
      
        var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(40.716216, -74.213393),
    new google.maps.LatLng(40.765641, -74.139235));
var overlay = new google.maps.GroundOverlay(
    'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
    bounds);
overlay.setMap(map);
       
      
     
  
  Harita Türleri
v2 ve v3'te kullanılabilen harita türleri biraz farklıdır ancak temel harita türlerinin tümü API'nin her iki sürümünde de kullanılabilir. v2, varsayılan olarak standart "boyalı" yol haritası karolarını kullanır. Ancak v3, google.maps.Map nesnesi oluştururken belirli bir harita türü belirtilmesini gerektirir.
  Yaygın Harita Türleri
Dört temel harita türü hem sürüm 2 hem de sürüm 3'te kullanılabilir:
  - MapTypeId.ROADMAP(- G_NORMAL_MAPyerine)
    yol haritası görünümünü gösterir.
- MapTypeId.SATELLITE(- G_SATELLITE_MAPyerine)
    Google Earth uydu görüntülerini gösterir.
- MapTypeId.HYBRID(- G_HYBRID_MAPyerine)
    normal ve uydu görünümlerinin bir karışımını gösterir.
- MapTypeId.TERRAIN(- G_PHYSICAL_MAPyerine)
    Arazi bilgilerine dayalı fiziksel bir harita gösterir.
Aşağıda, haritayı arazi görünümüne ayarlayan v2 ve v3 örnekleri verilmiştir:
  
    map.setMapType(G_PHYSICAL_MAP);
    
   
  
    map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
    
   
  
 
Maps JavaScript API v3, daha az kullanılan harita türlerinde de birkaç değişiklik yaptı:
  - Dünya dışındaki gök cisimleri için harita karoları v3 API'de harita türü olarak kullanılamaz ancak özel harita türleri olarak erişilebilir. Örnek olarak bu özel harita türleri örneğine bakın.
  
- G_SATELLITE_3D_MAPtürünün v2'deki yerini v3'te özel bir harita türü almaz. Bunun yerine, bu kitaplığı kullanarak Google Earth eklentisini v3 haritalarınızda entegre edebilirsiniz.
Maksimum Yakınlaştırma Görüntüleri
Uydu görüntüleri her zaman yüksek yakınlaştırma düzeylerinde kullanılamaz. Yakınlaştırma düzeyini ayarlama<2ce>  işleminden önce kullanılabilen en yüksek yakınlaştırma düzeyini bilmek isteyebilirsiniz. Bu durumda google.maps.MaxZoomService sınıfını kullanın. Bu sınıf, v2'deki GMapType.getMaxZoomAtLatLng() yönteminin yerini alır.
var point = new GLatLng(
    180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new GMap2(document.getElementById("map"));
map.setUIToDefault();
map.setCenter(point);
map.setMapType(G_HYBRID_MAP);
map.getCurrentMapType().getMaxZoomAtLatLng(point,
  function(response) {
    if (response.status) {
      map.setZoom(response.zoom);
    } else {
      alert("Error in Max Zoom Service.");
    }
});
 
var myLatlng = new google.maps.LatLng(
    180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new google.maps.Map(
  document.getElementById("map"),{
    zoom: 0,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.HYBRID
});
var maxZoomService = new google.maps.MaxZoomService();
maxZoomService.getMaxZoomAtLatLng(
  myLatlng,
  function(response) {
    if (response.status == google.maps.MaxZoomStatus.OK) {
      map.setZoom(response.zoom);
    } else {
      alert("Error in Max Zoom Service.");
    }
});
 
 
  Havadan Perspektif Görüntüleri
V3'te havadan görüntüleme etkinleştirildiğinde kontroller, desteklenen yönlerde döndürmek için ek bir ara reklamlı GLargeZoomControl3D kontrolüne sahip v2 kontrolüne benzer.
 45° görüntüleme özelliğinin kullanılabildiği şehirleri desteklenen şehirler haritasında görebilirsiniz. 45° görüntüler mevcut olduğunda Maps API Uydu düğmesine bir alt menü seçeneği eklenir.
  Katmanlar
  Katmanlar, haritadaki bir veya daha fazla yer paylaşımından oluşan nesnelerdir. Tek bir birim olarak işlenebilirler ve genellikle nesne koleksiyonlarını yansıtırlar.
  
    Desteklenen Katmanlar
  v3 API, çeşitli katmanlara erişim sağlar. Bu katmanlar aşağıdaki alanlarda v2 GLayer sınıfıyla örtüşür:
  
   - 
    KmlLayernesnesi, KML ve GeoRSS öğelerini v3 yer paylaşımlarına dönüştürerek v2GeoXmlkatmanına eşdeğer bir katman sağlar.
- TrafficLayernesnesi, v2- GTrafficOverlayyer paylaşımına benzer şekilde trafik koşullarını gösteren bir katman oluşturur.
Bu katmanlar, v2'den farklıdır. Farklılıklar aşağıda açıklanmıştır. Katmanlar, setMap() çağrılarak ve katmanın görüntüleneceği Map nesnesi geçirilerek haritaya eklenebilir.
  Desteklenen katmanlar hakkında daha fazla bilgiyi Katmanlar dokümanlarında bulabilirsiniz.
  
  
    KML ve GeoRSS Katmanları
    Maps JavaScript API, coğrafi bilgileri görüntülemek için KML ve GeoRSS veri biçimlerini destekler. KML veya GeoRSS dosyalarını haritaya dahil etmek istiyorsanız bu dosyalara herkese açık olarak erişilebilmelidir. 3. sürümde bu veri biçimleri, 2. sürümdeki GGeoXml nesnesinin yerini alan bir KmlLayer örneği kullanılarak görüntülenir.
    v3 API, KML'yi oluştururken daha esnektir. Bu sayede bilgi pencerelerini devre dışı bırakabilir ve tıklama yanıtını değiştirebilirsiniz. Daha fazla bilgi için v3 KML ve GeoRSS Katmanları dokümanlarını inceleyin.
    KmlLayer oluşturma işleminde boyut ve karmaşıklık kısıtlamaları geçerlidir. Ayrıntılar için KmlLayer belgelerine bakın.
    
    Aşağıdaki örneklerde, bir KML dosyasının nasıl yükleneceği karşılaştırılmıştır.
    
      
        geoXml = new GGeoXml(
  'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml');
map.addOverlay(geoXml);
       
      
        var layer = new google.maps.KmlLayer(
  'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml', {
    preserveViewport: true
});
layer.setMap(map);
       
      
     
  
  
    Trafik Katmanı
    
     3. sürümde, TrafficLayer nesnesini kullanarak haritalara gerçek zamanlı trafik bilgileri (desteklendiği durumlarda) ekleyebilirsiniz. Trafik bilgileri, istek gönderildiği sırada sağlanır. Bu örneklerde, Los Angeles'a ait trafik bilgileri gösterilmektedir:
    
    
      
        var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(34.0492459, -118.241043), 13);
map.setUIToDefault();
var trafficOptions = {incidents:false};
trafficInfo = new GTrafficOverlay(trafficOptions);
map.addOverlay(trafficInfo);
       
      
        var map = new google.maps.Map(
    document.getElementById('map'), {
  center: new google.maps.LatLng(34.0492459, -118.241043),
  mapTypeId: google.maps.MapTypeId.ROADMAP,
  zoom: 13
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
       
      
     
    2. sürümün aksine, 3. sürümde TrafficLayer sınıfının yapıcısı için seçenek yoktur. Olaylar, v3'te kullanılamaz.
    
  
  Hizmetler
  
    Coğrafi Kodlama
    Maps JavaScript API, kullanıcı girişinden adresleri dinamik olarak coğrafi kodlamak için bir geocoder nesnesi sağlar. Statik, bilinen adresleri coğrafi kodlamak istiyorsanız Geocoding API dokümanlarına bakın.
    Coğrafi Kodlama API, yeni özellikler eklenerek ve verilerin temsil edilme şekli değiştirilerek önemli ölçüde yükseltildi ve geliştirildi.
    
    v2 API'sindeki GClientGeocoder, ileri ve geri coğrafi kodlama için iki farklı yöntemin yanı sıra coğrafi kodlamanın nasıl yapıldığını etkileyen ek yöntemler sağladı. Buna karşılık, v3 Geocoder nesnesi yalnızca bir geocode() yöntemi sağlar. Bu yöntem, giriş terimlerini (Coğrafi Kodlama İstekleri nesnesi biçiminde) içeren bir nesne değişmez ifadesi ve bir geri çağırma yöntemi alır. Geocoding API, istekte metin tabanlı bir address özelliği veya LatLng nesnesi olup olmadığına bağlı olarak ileri veya ters coğrafi kodlama yanıtı döndürür. Coğrafi kodlama isteğine ek alanlar göndererek coğrafi kodlamanın nasıl yapılacağını etkileyebilirsiniz:
    
    
      - Metin biçiminde bir addresseklemek,getLatLng()yönteminin çağrılmasına eşdeğer olan ileri coğrafi kodlamayı tetikler.
- latLngnesnesi eklemek, tersine coğrafi kodlamayı tetikler. Bu,- getLocations()yönteminin çağrılmasına eşdeğerdir.
- boundsözelliğini eklemek,- setViewport()yönteminin çağrılmasına eşdeğer olan Görüntüleme Alanı Eğilimleri'ni etkinleştirir.
- regionözelliğini eklemek,- setBaseCountryCode()yöntemini çağırmaya eşdeğer olan Bölge Kodu Eğilimi'ni etkinleştirir.
      3. sürümdeki coğrafi kodlama yanıtları, 2. sürüm yanıtlarından çok farklıdır. v3 API, v2'nin kullandığı iç içe yerleştirilmiş yapıyı, ayrıştırması daha kolay olan daha düz bir yapıyla değiştirir. Ayrıca, v3 yanıtları daha ayrıntılıdır: Her sonucun, her sonucun çözünürlüğü hakkında daha iyi fikir edinmenize yardımcı olan birkaç adres bileşeni vardır.
    
    
      Aşağıdaki kod, metin biçimindeki bir adresi alır ve coğrafi kodlamasından elde edilen ilk sonucu gösterir:
    
    
      
      var geocoder = new GClientGeocoder();
var infoPanel;
var map;
var AccuracyDescription = [
  'Unknown accuracy', 'country level accuracy',
  'region level accuracy', 'sub-region level accuracy',
  'town level accuracy', 'post code level accuracy',
  'street level accuracy', 'intersection level accuracy',
  'address level accuracy', 'premise level accuracy',
];
function geocode_result_handler(response) {
  if (!response || response.Status.code != 200) {
    alert('Geocoding failed. ' + response.Status.code);
  } else {
    var bounds = new GLatLngBounds(new GLatLng(
        response.Placemark[0].ExtendedData.LatLonBox.south,
        response.Placemark[0].ExtendedData.LatLonBox.west
    ), new GLatLng(
        response.Placemark[0].ExtendedData.LatLonBox.north,
        response.Placemark[0].ExtendedData.LatLonBox.east
    ));
    map.setCenter(bounds.getCenter(),
        map.getBoundsZoomLevel(bounds));
    var latlng = new GLatLng(
        response.Placemark[0].Point.coordinates[1],
        response.Placemark[0].Point.coordinates[0]);
    infoPanel.innerHTML += '<p>1st result is <em>' +
        // No info about location type
        response.Placemark[0].address +
        '</em> of <em>' +
        AccuracyDescription[response.Placemark[0].
            AddressDetails.Accuracy] +
        '</em> at <tt>' + latlng + '</tt></p>';
    var marker_title = response.Placemark[0].address +
        ' at ' + latlng;
    map.clearOverlays();
    var marker = marker = new GMarker(
        latlng,
        {'title': marker_title}
    );
    map.addOverlay(marker);
  }
}
function geocode_address() {
  var address = document.getElementById('input-text').value;
  infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
  geocoder.getLocations(address, geocode_result_handler);
}
function initialize() {
  map = new GMap2(document.getElementById('map'));
  map.setCenter(new GLatLng(38, 15), 2);
  map.setUIToDefault();
  infoPanel = document.getElementById('info-panel');
}
       
      
        var geocoder = new google.maps.Geocoder();
var infoPanel;
var map;
var marker;
function geocode_result_handler(result, status) {
  if (status != google.maps.GeocoderStatus.OK) {
    alert('Geocoding failed. ' + status);
  } else {
    map.fitBounds(result[0].geometry.viewport);
    infoPanel.innerHTML += '<p>1st result for geocoding is <em>' +
        result[0].geometry.location_type.toLowerCase() +
        '</em> to <em>' +
        result[0].formatted_address + '</em> of types <em>' +
        result[0].types.join('</em>, <em>').replace(/_/, ' ') +
        '</em> at <tt>' + result[0].geometry.location +
        '</tt></p>';
    var marker_title = result[0].formatted_address +
        ' at ' + latlng;
    if (marker) {
      marker.setPosition(result[0].geometry.location);
      marker.setTitle(marker_title);
    } else {
      marker = new google.maps.Marker({
        position: result[0].geometry.location,
        title: marker_title,
        map: map
      });
    }
  }
}
function geocode_address() {
  var address = document.getElementById('input-text').value;
  infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
  geocoder.geocode({'address': address}, geocode_result_handler);
}
function initialize() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: new google.maps.LatLng(38, 15),
    zoom: 2,
    mapTypeId: google.maps.MapTypeId.HYBRID
  });
  infoPanel = document.getElementById('info-panel');
}
       
      
     
  
  
    Yol tarifi
    Maps JavaScript API v3, yol hesaplamak için v2'deki GDirections sınıfını DirectionsService sınıfıyla değiştirir.
    
    v3'teki route() yöntemi, v2 API'deki load() ve loadFromWaypoints() yöntemlerinin yerini alır. Bu yöntem, giriş terimlerini ve yanıtın alınmasının ardından çalıştırılacak bir geri çağırma yöntemini içeren tek bir DirectionsRequest nesne değişmezi alır. Bu nesne literalinde, v2'deki GDirectionsOptions nesne literaline benzer şekilde seçenekler verilebilir.
    
    
      Maps JavaScript API v3'te, yol tarifi isteği gönderme görevi, istekleri oluşturma görevinden ayrıldı. Bu görev artık DirectionsRenderer sınıfıyla ele alınıyor. DirectionsRenderer nesnelerini setMap() ve setDirections() yöntemleriyle herhangi bir haritaya veya DirectionsResult nesnesine bağlayabilirsiniz. Oluşturucu bir MVCObject olduğundan, özelliklerinde yapılan tüm değişiklikleri algılar ve ilişkili yol tarifleri değiştiğinde haritayı günceller.
    
    Aşağıdaki kodda, bir adresten yaya yollarını kullanarak belirli bir konuma nasıl yürüyüş talimatı isteneceği gösterilmektedir. Yalnızca v3'ün Dublin Hayvanat Bahçesi'ndeki yaya yolunda yürüyüş talimatları sağlayabileceğini unutmayın.
    
    
      
      var map;
var directions;
var directionsPanel;
function initialize() {
  var origin = new google.maps.LatLng(53.348172, -6.297285);
  var destination = new google.maps.LatLng(53.355502, -6.30557);
  directionsPanel = document.getElementById("route");
  map = new GMap2(document.getElementById('map'));
  map.setCenter(origin, 10);
  map.setUIToDefault();
  directions = new GDirections(map, directionsPanel);
  directions.loadFromWaypoints(
      [origin, destination], {
        travelMode: 'G_TRAVEL_MODE_WALKING',
  });
}
       
      
      var map;
var directionsRenderer;
var directionsService = new google.maps.DirectionsService();
function initialize() {
  var origin = new google.maps.LatLng(53.348172, -6.297285);
  var destination = new google.maps.LatLng(53.355502, -6.30557);
  directionsRenderer = new google.maps.DirectionsRenderer();
  map = new google.maps.Map(
      document.getElementById('map'), {
        center: origin,
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
  });
  directionsRenderer.setPanel(document.getElementById("route"));
  directionsRenderer.setMap(map);
  directionsService.route({
    origin: origin,
    destination: destination,
    travelMode: google.maps.DirectionsTravelMode.WALKING
  }, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);
    }
  });
}
       
      
     
  
  
    Street View
    Google Street View, kapsam alanındaki belirli konumlardan etkileşimli 360° görünümler sunar. Street View görüntülerini görüntülemek için Flash® eklentisinin gerekli olduğu v2 API'nin aksine, v3 API, Street View'u tarayıcıda yerel olarak destekler.
    
    Street View görüntüleri, sürüm 3'te StreetViewPanorama nesnesi veya sürüm 2'de GStreetviewPanorama nesnesi kullanılarak desteklenir. Bu sınıfların arayüzleri farklıdır ancak aynı rolü oynarlar: div kapsayıcısını Street View görüntülerine bağlama ve Street View panoramasının konumunu ve bakış açısını belirtmenize olanak tanıma.
    
    
      
        function initialize() {
  var fenwayPark = new GLatLng(42.345573, -71.098326);
  panoramaOptions = {
    latlng: fenwayPark,
    pov: {
      heading: 35,
      pitch: 5,
      zoom: 1
    }
  };
  var panorama = new GStreetviewPanorama(
      document.getElementById('pano'),
      panoramaOptions);
  GEvent.addListener(myPano, "error", handleNoFlash);
}
function handleNoFlash(errorCode) {
  if (errorCode == FLASH_UNAVAILABLE) {
    alert('Error: Your browser does not support Flash');
    return;
  }
}
       
      
      function initialize() {
  var fenway = new google.maps.LatLng(42.345573, -71.098326);
  var panoramaOptions = {
    position: fenway,
    pov: {
      heading: 35,
      pitch: 5,
      zoom: 1
    }
  };
  var panorama = new google.maps.StreetViewPanorama(
      document.getElementById('pano'),
      panoramaOptions);
}
       
      
     
    Street View verilerine doğrudan erişim, v3'teki StreetViewService nesnesi veya v2'deki benzer GStreetviewClient nesnesi aracılığıyla mümkündür. Her ikisi de Street View verilerini almak veya kullanılabilirliğini kontrol etmek için benzer arayüzler sunar ve konuma ya da panorama kimliğine göre arama yapmanıza olanak tanır.
    
    Street View, v3'te varsayılan olarak etkindir. Harita, Street View Pegman kontrolüyle birlikte görünür ve API, Street View panoramalarını görüntülemek için harita div'ini yeniden kullanır. Aşağıdaki kodda, Street View panoramalarını ayrı bir div'de ayırarak v2 davranışının nasıl taklit edileceği gösterilmektedir.
    
    
      
      var marker;
var panoClient = new GStreetviewClient();
function initialize() {
  if (GBrowserIsCompatible()) {
    var myPano = new GStreetviewPanorama(
        document.getElementById('pano'));
    GEvent.addListener(myPano, 'error', handleNoFlash);
    var map = new GMap2(document.getElementById('map'));
    map.setCenter(new GLatLng(42.345573, -71.098326), 16);
    map.setUIToDefault();
    GEvent.addListener(map, 'click', function(overlay, latlng) {
      if (marker) {
        marker.setLatLng(latlng);
      } else {
        marker = new GMarker(latlng);
        map.addOverlay(marker);
      }
      var nearestPano = panoClient.getNearestPanorama(
          latlng, processSVData);
    });
    function processSVData(panoData) {
      if (panoData.code != 200) {
        alert("Panorama data not found for this location.");
      }
      var latlng = marker.getLatLng();
      var dLat = latlng.latRadians()
          - panoData.location.latlng.latRadians();
      var dLon = latlng.lngRadians()
          - panoData.location.latlng.lngRadians();
      var y = Math.sin(dLon) * Math.cos(latlng.latRadians());
      var x = Math.cos(panoData.location.latlng.latRadians()) *
              Math.sin(latlng.latRadians()) -
              Math.sin(panoData.location.latlng.latRadians()) *
              Math.cos(latlng.latRadians()) * Math.cos(dLon);
      var bearing = Math.atan2(y, x) * 180 / Math.PI;
      myPano.setLocationAndPOV(panoData.location.latlng, {
        yaw: bearing
      });
    }
    function handleNoFlash(errorCode) {
      if (errorCode == FLASH_UNAVAILABLE) {
        alert('Error: Your browser does not support Flash');
        return;
      }
    }
  }
}
       
      
      // Load the API with libraries=geometry
var map;
var marker;
var panorama;
var sv = new google.maps.StreetViewService();
function radians(degrees) { return Math.PI * degrees / 180.0 };
function initialize() {
  panorama = new google.maps.StreetViewPanorama(
      document.getElementById("pano"));
  map = new google.maps.Map(
      document.getElementById('map'), {
    center: new google.maps.LatLng(42.345573, -71.098326),
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    zoom: 16
  });
  google.maps.event.addListener(map, 'click', function(event) {
    if (!marker) {
      marker = new google.maps.Marker({
          position: event.latLng,
          map: map
      });
    } else {
      marker.setPosition(event.latLng);
    }
    sv.getPanoramaByLocation(event.latLng, 50, processSVData);
  });
}
function processSVData(panoData, status) {
  if (status == google.maps.StreetViewStatus.OK) {
    alert("Panorama data not found for this location.");
  }
  var bearing = google.maps.geometry.spherical.computeHeading(
      panoData.location.latLng, marker.getPosition());
  panorama.setPano(panoData.location.pano);
  panorama.setPov({
    heading: bearing,
    pitch: 0,
    zoom: 1
  });
  panorama.setVisible(true);
  marker.setMap(panorama);
}