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 yol gösterecektir.
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 artık anahtarları yönetmek için 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, GMap2
yerine google.maps.Map
yüklenir.
- Kullanımdan kaldırılmış yöntemlere yapılan tüm referansları kaldırın.
GDownloadURL
ve GLog
gibi 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ı anlamak için zaman ayırmanız gerekir. 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 ya da 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 tüm cihazlarda 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ı (
GLog
veya
GDownloadUrl
). 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.
- Temel haritadaki öğelerin görüntülenmesini benzersiz görsel stilinize uyacak şekilde değiştirmenize olanak tanıyan stilize haritalar özelleştirmeleri.
- ElevationService ve Distance Matrix gibi çeşitli yeni hizmetler için destek
- İyileştirilmiş yol tarifi hizmetleri, alternatif rotalar, rota optimizasyonu (
satıcı seyahati problemine 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
accuracy
değ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.
İş için Google Haritalar API'leri müşterisiyseniz key
parametresi yerine client
parametresini kullanan bir istemci 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 yükleniyor
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/js
adresinden yükleme
file
parametresini kaldırın.
key
parametresini yeni v3 anahtarınızla güncelleyin. Work için Google Haritalar API'si müşterileri client
parametresi kullanmalıdır.
- (Yalnızca Google Haritalar Platformu Premium Planı)
client
parametresinin,
Google Haritalar Platformu Premium Planı Geliştirici Kılavuzu'nda açıklandığı şekilde sağlandığından emin olun.
- En son yayınlanan sürümü istemek için
v
parametresini kaldırın veya değerini v3 sürümlendirme şemasına göre değiştirin.
- (İsteğe bağlı)
hl
parametresini language
ile değiştirin ve değerini koruyun.
- (İsteğe bağlı) İsteğe bağlı kitaplıkları yüklemek için
libraries
parametresi 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ını kullanıma sunuyoruz
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, 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" aramak ve "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ı 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
v2 ve v3 API'leri ile yazılmış oldukça basit iki uygulamayı karşılaştıralım.
<!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.
GMap2
nesnesi, API'deki merkezi nesne olarak google.maps.Map
ile değiştirilir.
- Mülkler artık Seçenekler sınıfları aracılığıyla yüklenir. Yukarıdaki örnekte, harita yüklemek için gereken üç özelliği (
center
, zoom
ve mapTypeId
) bir satır içi MapOptions
nesnesi aracılığıyla belirledik.
- Varsayılan kullanıcı arayüzü, v3'te varsayılan olarak açıktır. Bunu,
MapOptions
nesnesinde disableDefaultUI
özelliğini true olarak ayarlayarak devre dışı bırakabilirsiniz.
Ö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 makaleyle ilgili sorun veya sorularınız olursa lütfen 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 okumamanızı, bunun yerine taşıma işleminize yardımcı olması için bu materyali duruma göre 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 arka planda ç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_changed
kuralı 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 etkinlik işleyicileri 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'de GEvent.removeListener()
veya v3'te google.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 Argümanları 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ı temel haritayı tıkladığında gerçekleşir. Tıklanabilir yer paylaşımlarına ek geri çağırma işlevleri kaydedebilirsiniz. Bu tıklamalara tepki vermeniz gerekiyorsa bu işlevleri kullanabilirsiniz.
// 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
control
türlerinde v3 API ile birlikte 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.
GHierarchicalMapTypeControl
adlı v2 hiyerarşik kontrolü artık kullanılamıyor.
google.maps.MapTypeControlStyle.HORIZONTAL_BAR
denetimini kullanarak benzer bir etki elde edebilirsiniz.
GMapTypeControl
tarafından 2. sürümde sağlanan yatay düzen, 3. sürümde kullanılamaz.
Haritaya Denetimler 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
- bir 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 Konumlandırma 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ırılması mutlak değildir. Bunun yerine API, denetimleri belirli sınırlamalar (harita boyutu gibi) dahilinde mevcut harita öğelerinin etrafında "akıtarak" akıllıca düzenler.
Bu sayede varsayılan kontroller, kontrollerinizle uyumlu olur.
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
Maps JavaScript API, özel gezinme kontrolleri oluşturmanıza olanak tanır.
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 Denetimler dokümanlarına bakın), aşağıdaki kod örnekleri bir haritaya özel denetimin nasıl ekleneceğini 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.
Bindirmeleri 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ü aracılığıyla bir haritayı yer paylaşımına atarsınız.
Ayrıca, yer paylaşımı nesnesinin setMap()
yöntemini çağırarak ve istenen haritayı belirterek doğrudan yer paylaşımı ekleyebilir veya kaldırabilirsiniz. Harita özelliği null
olarak ayarlanırsa yer paylaşımı kaldırılır.
3. sürümde clearOverlays()
yöntemi yoktur.
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
özellikleri Icon
türündeki bir nesneye ayarlanmalıdır.
İş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
Poli ç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 kullanmaya 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 birbirine 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
GInfoWindow
desteklerken v3 API her haritada birden fazla eşzamanlı InfoWindow
destekler.
- Haritayı tıkladığınızda v3
InfoWindow
açık kalır. Haritayı tıkladığınızda v2 GInfoWindow
otomatik olarak kapanır. Map
nesnesine bir click
dinleyici ekleyerek v2 davranışını taklit edebilirsiniz.
- v3 API, sekmeli
InfoWindow
için yerel destek sağlamaz.
Zemin yer paylaşımları
Bir resmi haritaya yerleştirmek için GroundOverlay
nesnesi kullanmanız gerekir. GroundOverlay
için oluşturucu, temel olarak v2 ve v3'te 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_MAP
yerine)
yol haritası görünümünü gösterir.
MapTypeId.SATELLITE
(G_SATELLITE_MAP
yerine)
Google Earth uydu görüntülerini gösterir.
MapTypeId.HYBRID
(G_HYBRID_MAP
yerine)
normal ve uydu görünümlerinin bir karışımını gösterir.
MapTypeId.TERRAIN
(G_PHYSICAL_MAP
yerine)
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 bu örnekte gösterildiği gibi özel harita türleri olarak erişilebilir.
G_SATELLITE_3D_MAP
tü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ülemelerin şu anda kullanılabildiği şehirleri bu haritada takip edebilirsiniz. 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 değiştirilebilirler 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:
-
KmlLayer
nesnesi, KML ve GeoRSS öğelerini v3 yer paylaşımlarına dönüştürerek v2 GeoXml
katmanına eşdeğer bir katman sağlar.
TrafficLayer
nesnesi, v2 GTrafficOverlay
yer 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 herkes erişebilmelidir. 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 dokümanlarına 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ı
v3, TrafficLayer
nesnesini kullanarak haritalara gerçek zamanlı trafik bilgileri (desteklendiği yerlerde) eklemenize olanak tanır. 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 kurucusu için seçenek yoktur. Olaylar, v3'te kullanılamaz.
Hizmetler
Coğrafi Kodlama
Maps JavaScript API, kullanıcı girişinden dinamik olarak adresleri 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 ş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
address
eklemek, getLatLng()
yönteminin çağrılmasına eşdeğer olan ileri coğrafi kodlamayı tetikler.
latLng
nesnesi 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ğlar ve Street View panoramasının konumunu ve bakış açısını belirtmenize olanak tanır.
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 yapılmasına 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);
}