Güvenlik uyarısı: Belirli üçüncü taraf kitaplıkları (polyfill.io dahil) kullanan web sitelerini etkileyebilecek bir güvenlik sorununun olduğunu tespit ettik. Bu sorun bazen, web sitesi sahibinin bilgisi veya izni olmadan ziyaretçileri istenen web sitesinden başka yere yönlendirebilir. JavaScript örneklerimizin çoğu önceden bir polyfill.io
komut dosyası beyanı içeriyordu. Bunu örneklerimizden kaldırdık. Bu bildirimi içeren JavaScript örneklerimizi kullandıysanız beyanı kaldırmanızı öneririz.
Maps JavaScript API v2, 26 Mayıs 2021 tarihinden itibaren kullanılamamaktadır. Bunun sonucunda, sitenizin v2 haritaları çalışmayı durduracak ve JavaScript hataları döndürecektir. Sitenizde haritaları kullanmaya devam etmek için Maps JavaScript API v3'e geçiş yapın. Bu kılavuz, süreç boyunca size
yardımcı olacaktır.
Genel bakış
Her uygulamanın taşıma süreci biraz farklı bir süreç olsa da 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â v2 anahtarı kullanıyorsanız taşıma işlemine başlamadan önce yeni API anahtarınızı aldığınızdan emin olun.
- API Önyükleyicinizi 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>
- Kodunuzu güncelleyin. Gereken değişiklik miktarı büyük ölçüde uygulamanıza bağlıdır. Sık yapılan değişiklikler şunlardır:
- Her zaman google.maps ad alanına başvurun. v3'te, tüm Maps JavaScript API kodları, genel ad alanı yerine
google.maps.*
ad alanında depolanır. Çoğu nesne de bu süreç kapsamında yeniden adlandırılmıştır. Örneğin, GMap2
yerine artık google.maps.Map
yükleyeceksiniz.
- Eski yöntemlere yapılan tüm referansları kaldırın.
GDownloadURL
ve GLog
gibi çeşitli 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 yardımcı program kitaplıklarına harici hale getirilmiştir. Böylece her uygulama, API'nin yalnızca kullanılacak parçalarını yüklemek zorunda kalır.
- (İsteğe bağlı) Projenizi v3 externs kullanacak şekilde yapılandırın.
v3 externs, kodunuzu Closure Derleyici ile doğrulamaya yardımcı olmak veya IDE'nizde otomatik tamamlamayı tetiklemek için kullanılabilir.
Gelişmiş Derleme ve Harici Kaynaklar hakkında daha fazla bilgi edinin.
- Test edin ve tekrarlayın. Bu noktada hâlâ yapmanız gereken bazı şeyler olacak. Ancak v3 harita uygulamanıza doğru yolda ilerliyorsunuz.
Maps JavaScript API V3'teki değişiklikler
Taşıma işleminizi planlamadan önce, Maps JavaScript API v2 ile Maps JavaScript API v3 arasındaki farkları anlamalısınız. Maps JavaScript API'nin en yeni sürümü, modern JavaScript programlama tekniklerine, kitaplık kullanımını artırmaya ve basitleştirilmiş bir API'ye odaklanarak sıfırdan yazılmıştır.
API'ye birçok yeni özellik eklendi ve bilindik bazı özellikler değiştirildi, hatta kaldırıldı. Bu bölümde, iki sürüm arasındaki bazı önemli farklar vurgulanmaktadır.
v3 API'sindeki değişikliklerden bazıları şunlardır:
- Sadeleştirilmiş bir temel kitaplık. Haritanızın tüm cihazlarda hızlı bir şekilde yüklenmesini sağlayan Core API'nin yükleme ve ayrıştırma sürelerini azaltmaya yardımcı olan yardımcı işlevlerin birçoğu kitaplıklara taşındı.
- Poligon oluşturma ve işaretçi yerleşimi gibi birçok özelliğin performansı iyileştirildi.
- Mobil proxy'ler ve kurumsal güvenlik duvarları tarafından kullanılan paylaşılan adreslerin daha iyi barındırılması için istemci tarafı kullanım sınırlarına yeni bir yaklaşım.
- Bazı modern tarayıcı ve mobil tarayıcılar için destek eklendi. Internet Explorer 6 desteği kaldırılmıştır.
- Genel amaçlı yardımcı sınıfların (
GLog
veya
GDownloadUrl
) çoğu kaldırıldı. Günümüzde Closure veya jQuery gibi benzer işlevler sunan birçok mükemmel JavaScript kitaplığı mevcuttur.
- Tüm mobil cihazlara yüklenen bir HTML5 Street View uygulaması.
- Kendi fotoğraflarınızla oluşturulan özel Street View panoramaları sayesinde kayak pistlerinin, satılık evlerin veya diğer ilgi çekici yerlerin panoramalarını paylaşabilirsiniz.
- Temel haritadaki öğelerin görünümünü benzersiz görsel stilinize uyacak şekilde değiştirmenize olanak tanıyan Stilli Haritalar özelleştirmeleri.
- ElevationService ve Mesafe Matrisi gibi çeşitli yeni hizmetler için destek.
- İyileştirilmiş yol tarifi hizmetleri; alternatif rotalar, rota optimizasyonu (
seyahat eden satış görevlisi sorunu için yaklaşık çözümler), bisiklet için yol tarifleri (
bisiklet katmanı ile), toplu taşıma yol tarifleri ve
sürüklenebilir yol tarifleri sağlar.
- 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 çok Bilgi Penceresi desteği
Uygulamanızı Yeni Sürüme Geçirme
Yeni Anahtarınız
Maps JavaScript API v3, v2'den yeni bir anahtar sistemi kullanıyor. Uygulamanızda zaten bir v3 anahtarı kullanıyor olabilirsiniz. Bu durumda değişiklik yapmanız gerekmez. Doğrulamak amacıyla, Maps JavaScript API'yi yüklediğiniz URL'de key
parametresi olup olmadığını kontrol edin. Anahtar değeri "ABQIAA" ile başlıyorsa v2 anahtarı kullanıyorsunuzdur. v2 anahtarınız varsa taşıma işleminin parçası olarak bir v3 anahtarına yükseltme yapmanız gerekir. Bu sayede:
Anahtar, Maps JavaScript API v3 yüklenirken iletilir.
API anahtarları oluşturma hakkında daha fazla bilgi edinin.
Google Maps API for Work müşterisiyseniz key
parametresi yerine client
parametresiyle birlikte bir istemci kimliği kullanıyor olabilirsiniz. İstemci kimlikleri, Maps JavaScript API v3'te desteklenmeye devam etmektedir ve anahtarın yeni sürüme geçirilmesi gerekmez.
API yükleniyor
Kodunuzda yapmanız gereken ilk değişiklik, API'yi nasıl yüklediğinizle ilgilidir. v2'de, Maps JavaScript API'yi http://maps.google.com/maps
isteği üzerinden yüklersiniz. Maps JavaScript API v3'ü yüklüyorsanız aşağıdaki değişiklikleri yapmanız gerekir:
//maps.googleapis.com/maps/api/js
ürününden API'yi yükleyin
file
parametresini kaldırın.
key
parametresini yeni v3 anahtarınızla güncelleyin. Google Maps API for Work müşterileri bir
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ığı gibi sağlandığından emin olun.
- Yayınlanan en son sürümü istemek için
v
parametresini kaldırın veya değerini v3 sürüm oluşturma şemasına uygun olarak 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 bir
libraries
parametresi ekleyin.
En basit şekilde, 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 Almanca en son sürümü istenmektedir:
<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 üzerindeki muhtemelen en dikkat çekici değişiklik, google.maps
ad alanının kullanıma sunulmasıdır. v2 API, tüm nesneleri varsayılan olarak Küresel ad alanına yerleştirir. Bu durum, adlandırma çakışmalarına neden olabilir. v3 içindeki tüm nesneler google.maps
ad alanında bulunur.
Uygulamanızı v3'e taşırken yeni ad alanından yararlanmak için kodunuzu değiştirmeniz gerekir. Maalesef "G" harfinin aranması ve "google.maps" ile değiştirilmesi tam olarak işe yaramayacaktır. Ancak, kodunuzu incelerken bu yararlı bir genel kuraldır. Aşağıda v2 ve v3'teki eş değer sınıflarla ilgili 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 Kodu Kaldırma
Maps JavaScript API v3'te, v2'deki işlevlerin çoğu için benzerlikler vardır ancak artık desteklenmeyen bazı sınıflar da mevcuttur. Taşıma işleminizin bir parçası olarak, bu sınıfları üçüncü taraf yardımcı program kitaplıklarıyla değiştirmeli veya bu referansları kodunuzdan kaldırmalısınız. Closure veya jQuery gibi birçok mükemmel JavaScript kitaplığı benzer işlevler sağlar.
Aşağıdaki sınıflar Maps JavaScript API v3'te paralel değildir:
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 |
|
Kod Karşılaştırma
v2 ve v3 API'leriyle 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 vardır. Önemli değişiklikler şunlardır:
- API'nın 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ükleniyor. Yukarıdaki örnekte, bir haritayı satır içi
MapOptions
nesnesi aracılığıyla yüklemek için gereken üç özelliği (center
, zoom
ve mapTypeId
) ayarladık.
- v3'te varsayılan kullanıcı arayüzü varsayılan olarak açıktır.
MapOptions
nesnesinde disableDefaultUI
özelliğini true olarak ayarlayarak bunu devre dışı bırakabilirsiniz.
Özet
Bu aşamada, Maps JavaScript API'nin v2'den v3'e geçişiyle ilgili bazı önemli noktalara dair fikir edinmiş olacaksınız.
Bilmeniz gereken başka bilgiler de mevcuttur, ancak bunlar uygulamanıza bağlı olarak değişir. Karşılaşabileceğiniz belirli durumlara özel taşıma talimatlarını aşağıdaki bölümlerde bulabilirsiniz. Ayrıca, yükseltme işlemi sırasında faydalı bulabileceğiniz çeşitli kaynaklar da mevcuttur.
Bu makaleyle ilgili sorunlarınız 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 v2 ve v3
için en popüler özelliklerinin ayrıntılı bir karşılaştırması yer almaktadır. Referansın her bölümü ayrı ayrı okunacak şekilde tasarlanmıştır. Bu referansı bütünüyle okumamanızı öneririz. Bunun yerine, durum bazında taşıma işleminize yardımcı olması için bu materyali kullanın.
- Etkinlikler: Etkinlikleri kaydetme ve işleme.
- Kontroller - Haritada görünen gezinme denetimlerini değiştirme.
- Katmanlar - Haritaya nesne ekleme ve haritadaki nesneleri düzenleme.
- Harita Türleri - temel haritayı oluşturan bloklar.
- Katmanlar - KML veya Trafik katmanları gibi içeriği grup olarak ekleme ve düzenleme.
- Hizmetler: Google'ın coğrafi kodlaması, yol tarifleri veya Street View hizmetleriyle çalışma.
Etkinlikler
Maps JavaScript API v3'ün etkinlik modeli, v2'de kullanılana benzer ancak ayrıntılarında çok fazla değişiklik olmuştur.
MVC Desteği İçin Yeni Etkinlik
v3 API'si, 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 Maps JavaScript API'ye aktarılır. Bu etkinlikler, standart DOM etkinliklerinden ayrıdır.
- MVC durum değişikliği bildirimleri, Maps API nesnelerindeki değişiklikleri yansıtır ve bir
property_changed
kuralı kullanılarak adlandırılır.
Her Haritalar API'si nesnesi, bir dizi adlandırılmış etkinliği dışa aktarır. Belirli etkinliklerle ilgilenen uygulamalar, bu etkinlikler için etkinlik işleyicileri kaydetmeli ve bu etkinlikler alındığında kod yürütmelidir. Bu etkinliğe dayalı mekanizma, Maps JavaScript API v2 ve v3'te aynıdır. Tek fark, GEvent
olan ad alanının google.maps.event
olarak değiştirilmesidir:
GEvent.addListener(map, 'click', function() {
alert('You clicked the map.');
});
google.maps.event.addListener(map, 'click', function() {
alert('You clicked the map.');
});
Etkinlik İşleyicileri Kaldırma
Performansı korumak açısından, artık gerekli olmayan bir etkinlik işleyiciyi kaldırmak en iyisidir. Etkinlik işleyiciyi kaldırma işlemi v2 ve v3'te aynı şekilde yapılı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()
) ileterek etkinlik işleyiciyi kaldırın.
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 Başarılı Bağımsız Değişkenleri Kullanma
Kullanıcı arayüzü etkinlikleri genellikle bir etkinlik bağımsız değişkeni iletir. Daha sonra etkinlik işleyici tarafından erişilebilir. v3'teki etkinlik bağımsız değişkenlerinin çoğu, API'deki nesneler üzerinde daha tutarlı olacak şekilde basitleştirilmiştir. (Ayrıntılar için v3 Referansı'na bakın.)
v3 etkinlik işleyicilerde overlay
bağımsız değişkeni yok. Bir v3 eşlemesinde click
etkinliği kaydederseniz geri çağırma, yalnızca kullanıcı temel haritayı tıkladığında gerçekleşir. Bu tıklamalara tepki vermeniz gerekirse tıklanabilir yer paylaşımlarına ek geri çağırmalar kaydedebilirsiniz.
// 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örüntüler. API'yi kullanarak bu kontrollerin görünümünü özelleştirebilirsiniz.
Denetim 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 gibi ek harita türlerini destekler.
- v2 hiyerarşik denetimi olan
GHierarchicalMapTypeControl
artık kullanılamıyor.
google.maps.MapTypeControlStyle.HORIZONTAL_BAR
denetimini kullanarak da benzer bir efekt elde edebilirsiniz.
GMapTypeControl
tarafından v2'de sağlanan yatay düzen, v3'te kullanılamaz.
Denetimleri Haritaya Ekleme
Maps JavaScript API v2'de, harita nesnenizin addControl()
yöntemini kullanarak haritanıza denetimler ekleyebilirsiniz. v3'te, kontrollere doğrudan erişmek veya üzerinde değişiklik yapmak yerine ilişkili MapOptions
nesnesini değiştirirsiniz. Aşağıdaki örnekte, aşağıdaki denetimleri eklemek için haritayı nasıl özelleştireceğiniz gösterilmektedir:
- kullanıcının mevcut harita türleri arasında geçiş yapmasını sağlayan 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);
Denetimleri Harita Üzerinde Konumlandırma
v3'te konumlandırma kontrolleri önemli ölçüde değişti. addControl()
yöntemi, v2'de isteğe bağlı olarak ikinci bir parametre kullanır. Bu parametre, kontrolün haritanın köşelerine göre konumunu belirtmenize olanak tanır.
v3'te kontrolün konumunu, kontrol seçeneklerinin position
özelliği aracılığıyla ayarlarsınız. Bu kontrollerin konumlandırılması mutlak değildir. Bunun yerine API, kontrolleri mevcut kısıtlamalar (harita boyutu gibi) dahilinde mevcut harita öğeleri etrafında "aktararak" akıllı bir şekilde düzenler.
Böylece, varsayılan kontroller kontrollerinizle uyumlu olur.
Daha fazla bilgi için v3'te Konumlandırmayı Kontrol Etme konusuna bakın.
Aşağıdaki kod, yukarıdaki örneklere göre denetimleri 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 denetimleri oluşturmanıza olanak tanır.
v2 API ile kontrolleri özelleştirmek isterseniz GControl
sınıfını alt sınıflara ekleyip initialize()
ve getDefaultPosition()
yöntemleri için işleyici tanımlarsınız.
v3'teki GControl
sınıfının eşdeğeri yoktur. Bunun yerine kontroller, DOM öğeleri olarak gösterilir. v3 API ile özel denetim eklemek için oluşturucuda Node
alt öğesi (ör. <div>
öğesi) olarak kontrol için DOM yapısı oluşturun ve tüm DOM etkinliklerini işlemek için etkinlik işleyiciler ekleyin. Haritanıza özel kontrolün bir örneğini eklemek için Node
öğesini haritaların controls[position]
dizisine aktarın.
Yukarıda belirtilen arayüz gereksinimlerine uyan bir HomeControl
sınıfı uygulaması göz önünde bulundurulduğunda (ayrıntılar için Özel Denetimler dokümanlarına bakın), aşağıdaki kod örnekleri bir haritaya nasıl özel kontrol 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);
Yer paylaşımları
Katmanlar; 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ı ile temsil edilen nesne türleri v2 ve v3 arasında aynıdır ancak farklı şekilde ele alınırlar.
v2 API'sindeki bindirmeler, GMap2
nesnesinin addOverlay()
ve removeOverlay()
yöntemleri kullanılarak haritaya eklendi ve haritadan kaldırıldı. v3'te, bir Yer Paylaşımına, ilişkili yer paylaşımı seçenekleri sınıfının map
özelliği aracılığıyla bir harita atarsınız.
Ayrıca, bindirme nesnesinin setMap()
yöntemini çağırıp istediğiniz haritayı belirterek bir bindirmeyi doğrudan ekleyebilir veya kaldırabilirsiniz. Harita özelliğinin null
olarak ayarlanması, yer paylaşımını kaldırır.
v3'te clearOverlays()
yöntemi yoktur.
Bir yer paylaşımı grubunu yönetmek isterseniz yer paylaşımlarını barındıracak bir dizi oluşturmanız gerekir. Bu diziyi kullanarak, dizideki her bir yer paylaşımında setMap()
yöntemini çağırabilirsiniz (kaldırmanız gerekiyorsa null
geçirilecektir).
Sürüklenebilir İşaretçiler
Varsayılan olarak, işaretçiler tıklanabilir ancak sürüklenemez. Aşağıdaki iki örnekte sürüklenebilir bir işaretçi eklenir:
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çinin yerine gösterilecek özel bir simge tanımlayabilirsiniz.
v2'de özel görüntü kullanmak için G_DEFAULT_ICON type
bölümünden GIcon
örneği oluşturup bu görüntüyü değiştirebilirsiniz. Resminiz varsayılan simgeden daha büyük veya küçükse bunu bir GSize
örneğiyle belirtmeniz gerekir.
v3 API'sı bu işlemi biraz basitleştirir.
Bunun için işaretçinin icon
özelliğini özel görüntünüzün URL'sine ayarlamanız yeterlidir. API, simgeyi otomatik olarak boyutlandırır.
Maps JavaScript API, karmaşık simgeleri de destekler.
Karmaşık bir simge birden çok karo, karmaşık şekiller içerebilir veya resimlerin diğer yer paylaşımlarına göre nasıl görüneceğinin "yığın sırasını" belirtebilir. v2'de bir işaretçiye şekil eklemek için her bir GIcon
örneğinde ek özelliği belirtmeniz ve bunu bir GMarker
oluşturucuya seçenek olarak iletmeniz gerekir. v3'te bu şekilde belirtilen simgeler, icon
özelliklerini Icon
türünde bir nesneye ayarlamalı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ıklanabilir değildir:
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
Çoklu çizgi, bir LatLng
dizisi ve bu konumları sıralı bir sırada bağlayan bir dizi çizgi segmentinden oluşur.
v3'te bir Polyline
nesnesi oluşturup görüntülemek, v2'de GPolyline
nesnesi kullanmaya benzer. Aşağıdaki örnekler, Zürih'ten Sidney'e, Singapur üzerinden başlayıp 3 piksel genişliğinde, yarı şeffaf bir jeodezik çoklu çizgi çizmektedir:
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
v3'te, doğrudan kodlanmış çoklu çizgilerden Polyline
nesneleri oluşturma desteği yoktur. Bunun yerine, Geometri Kitaplığı, çoklu çizgileri kodlama ve kodunu çözme yöntemleri sağlar. Bu kitaplığın nasıl yükleneceği hakkında daha fazla bilgi için v3 Maps API'deki Kitaplıklar bölümüne bakın.
Aşağıdaki örneklerde aynı kodlanmış çoklu çizgiyi çizerken v3 kodu, google.maps.geometry.encoding
ad alanından decodePath()
yöntemini kullanı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
Bir Poligon, kapalı döngü içindeki bir bölgeyi tanımlar. Polyline
nesnesine çok benzer şekilde, Polygon
nesneleri de sıralı bir dizi noktadan oluşur. v3
Polygon
sınıfı, v2
GPolygon
sınıfıyla büyük ölçüde aynıdır ancak döngüyü kapatmak için artık yolun sonunda başlangıç tepe noktasını tekrarlamanıza gerek kalmaz. v3 API, son koordinatı tekrar 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 yapılabilir. 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ındaki Çizim Kitaplığı bölümüne bakın.
Bilgi Pencereleri
Haritanın üst kısmındaki kayan bir pencerede InfoWindow
simgesi, içeriği görüntüler. v2 ve v3 bilgi pencereleri arasında birkaç önemli fark vardır:
- v2 API, harita başına yalnızca
GInfoWindow
değerini, v3 API ise her haritada birden fazla eşzamanlı InfoWindow
destekler.
- Haritayı tıkladığınızda
InfoWindow
v3 açık kalır. v2 GInfoWindow
, haritayı tıkladığınızda otomatik olarak kapanır. Map
nesnesine bir click
işleyici ekleyerek v2 davranışını emüle edebilirsiniz.
- v3 API, sekmeli
InfoWindow
için yerel destek sağlamaz.
Zemin Bindirmeleri
Haritaya resim yerleştirmek için
GroundOverlay
nesnesi kullanmanız gerekir. GroundOverlay
oluşturucu, 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, New York'un antika bir haritası bindirme 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 bulunan harita türleri biraz farklı olsa da tüm temel harita türleri API'nin her iki sürümünde de kullanılabilir. Varsayılan olarak v2, standart "boyalı" yol haritası desenlerini kullanır. Ancak v3, google.maps.Map
nesnesi oluşturulurken belirli bir harita türünün sağlanmasını gerektirir.
Yaygın Harita Türleri
Hem v2 hem de v3 dört temel harita türü kullanılabilir:
MapTypeId.ROADMAP
(G_NORMAL_MAP
yerine geçer)
yol haritası görünümünü gösterir.
MapTypeId.SATELLITE
(G_SATELLITE_MAP
yerine geçer)
Google Earth uydu görüntülerini görüntüler.
MapTypeId.HYBRID
(G_HYBRID_MAP
yerine geçer) normal görünüm ile uydu görünümünün karışımını gösterir.
MapTypeId.TERRAIN
(G_PHYSICAL_MAP
yerine geçer), arazi bilgilerine dayalı bir fiziksel harita görüntüler.
Aşağıda, v2 ve v3'te haritayı arazi görünümüne ayarlama örneği verilmiştir:
map.setMapType(G_PHYSICAL_MAP);
map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
Maps JavaScript API v3, daha seyrek kullanılan harita türlerinde de birkaç değişiklik
yapmıştır:
- Earth dışındaki gök cisimleri için harita desenleri, v3 API'de harita türü olarak kullanılamaz ancak bu örnekte gösterildiği gibi özel harita türleri olarak erişilebilir.
- v3'te, v2'deki
G_SATELLITE_3D_MAP
türünün yerini alan özel bir harita türü yoktur. Bunun yerine, bu kitaplığı kullanarak Google Earth eklentisini v3 haritalarınıza entegre edebilirsiniz.
Maksimum Yakınlaştırma Görüntüleri
Yüksek yakınlaştırma düzeylerinde uydu görüntüleri her zaman kullanılamayabilir. Yakınlaştırma düzeyini ayarlamadan önce kullanılabilen en yüksek yakınlaştırma düzeyini öğrenmek istiyorsanız 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üler etkinleştirildiğinde, kontroller v2 GLargeZoomControl3D
kontrolüne benzer ve desteklenen yönler arasında geçiş yapmak için ek bir geçiş reklamı Döndürme kontrolü içerir.
Şu anda 45° görüntülerin bulunduğu ş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, harita üzerinde 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, birkaç farklı katmana erişim sağlar. Bu katmanlar aşağıdaki alanlarda v2 GLayer
sınıfıyla çakışıyor:
-
KmlLayer
nesnesi, KML ve GeoRSS öğelerini v3 yer paylaşımları halinde oluşturur ve v2 GeoXml
katmanı için eşdeğer işlev 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. setMap()
yöntemini çağırarak ve katmanın görüntüleneceği Map
nesnesini ileterek haritaya eklenebilirler.
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. Haritaya eklemek istediğiniz KML veya GeoRSS dosyaları herkesin erişimine açık olmalıdır. v3'te bu veri biçimleri, v2'deki GGeoXml
nesnesinin yerini alan KmlLayer
örneği kullanılarak gösterilir.
v3 API, KML oluştururken daha esnektir. Böylece InfoWindows'u engellemenize ve tıklama yanıtını değiştirmenize olanak tanır. Daha fazla ayrıntı için v3 KML ve GeoRSS Katmanları dokümanlarına bakın.
KmlLayer
oluştururken boyut ve karmaşıklık kısıtlamaları uygulanır. 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ılmaktadı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 haritalarınıza gerçek zamanlı trafik bilgileri (destekleniyorsa) eklemenize olanak tanır. İsteğin yapıldığı zamandaki trafik bilgileri sağlanır. Bu örneklerde Los Angeles için 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);
v2'den farklı olarak v3'te TrafficLayer
oluşturucu için herhangi bir seçenek yoktur. Olaylar v3'te mevcut değildir.
Hizmetler
Coğrafi Kodlama
Maps JavaScript API, kullanıcı girişinden adreslerin coğrafi kodlamasını yapmak için bir geocoder
nesnesi sağlar. Statik, bilinen adreslerin coğrafi kodlamasını yapmak istiyorsanız Geocoding API belgelerine bakın.
Yeni özellikler eklenerek verilerin temsil edilme şeklini değiştiren Geocoding API, önemli ölçüde yükseltilip geliştirildi.
v2 API'sinde GClientGeocoder
, ileri ve ters coğrafi kodlama için iki farklı yöntemin yanı sıra coğrafi kodlamanın nasıl yapıldığını etkileyecek ek yöntemler sağlıyordu. Buna karşılık v3 Geocoder
nesnesi, yalnızca giriş terimlerini (Coğrafi Kodlama İstekleri nesnesi biçiminde) ve bir geri çağırma yöntemini içeren nesne değişmez değerini alan yalnızca bir geocode()
yöntemi sağlar. Geocoding API, isteğin metinsel bir address
özelliği veya LatLng
nesnesi içerip içermediğine bağlı olarak ileriye veya ters coğrafi kodlama yanıtı döndürür. Coğrafi kodlama isteğine ek alanlar geçirerek coğrafi kodlamanın nasıl yapıldığını etkileyebilirsiniz:
- Metin biçiminde bir
address
eklenmesi, getLatLng()
yöntemini çağırmaya eşdeğer şekilde ileri coğrafi kodlamayı tetikler.
- Bir
latLng
nesnesi eklenmesi, getLocations()
yöntemini çağırmaya eş değer bir şekilde ters coğrafi kodlamayı tetikler.
bounds
özelliğinin eklenmesi, setViewport()
yöntemini çağırmaya eşdeğer olan Görünüme Ağırlık Verme özelliğini etkinleştirir.
region
özelliği eklendiğinde, setBaseCountryCode()
yöntemini çağırmaya eşdeğer olan Bölge Koduna Ağırlık Verme etkinleştirilir.
v3'teki Coğrafi Kodlama Yanıtları, v2 yanıtlarından çok farklıdır. v3 API, v2'nin kullandığı iç içe geçmiş yapıyı, ayrıştırılması daha kolay olan daha düz bir yapıyla değiştirir. Ayrıca, v3 yanıtları daha ayrıntılıdır: Her sonuçta, her sonucun çözünürlüğü hakkında daha iyi bir fikir veren birkaç adres bileşeni bulunur.
Aşağıdaki kod metin biçiminde bir adres alır ve coğrafi kodlamadan gelen 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 tariflerini hesaplamak için v2'nin GDirections
sınıfını DirectionsService
sınıfıyla değiştirir.
v3'teki route()
yöntemi, v2 API'sindeki hem load()
hem de loadFromWaypoints()
yöntemlerinin yerini alır. Bu yöntem, giriş terimlerini içeren tek bir DirectionsRequest
nesne değişmez değerini ve yanıt alındığında yürütülecek bir geri çağırma yöntemi alır. v2'deki GDirectionsOptions
nesne değişmez değerine benzer şekilde bu nesne değişmez değerinde seçenekler sunulabilir.
Maps JavaScript API v3'te yol tarifi isteği gönderme görevi, artık DirectionsRenderer
sınıfıyla işlenen istek oluşturma görevinden ayrıdır. Bir DirectionsRenderer
nesnesini, setMap()
ve setDirections()
yöntemlerini kullanarak herhangi bir haritaya veya DirectionsResult
nesnesine bağlayabilirsiniz. Oluşturucu bir MVCObject
olduğundan, özelliklerinde yapılan değişiklikleri algılar ve ilişkili yol tarifleri değiştiğinde haritayı günceller.
Aşağıdaki kod, bir adresten yaya yollarını kullanarak belirli bir konum için yaya yol tarifinin nasıl isteneceğini göstermektedir. Dublin Hayvanat Bahçesi'ndeki yaya yolunda yaya yol tarifi verebilmek için yalnızca v3 sürümünün kullanılabileceğ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, kapsama alanı içindeki belirlenen konumlardan etkileşimli, 360° görünümler sağlar. Street View görüntülerini görüntülemek için Flash® eklentisi gerektiren v2'nin aksine, v3 API'si tarayıcı içinde Street View'ı yerel olarak destekler.
Street View görüntüleri, v3'te StreetViewPanorama
nesnesinin veya v2'de GStreetviewPanorama
nesnesinin kullanılmasıyla desteklenir. Bu sınıfların arayüzleri farklı olsa da aynı rolleri oynarlar: div
kapsayıcısını Street View görüntülerine bağlamak ve Street View panoramasının konumunu ve bakış açısını (bakış açısı) belirtmenizi sağlamak.
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 üzerinden 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 veya panorama kimliğine göre aramaya olanak tanır.
v3'te Street View 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
öğesini yeniden kullanır. Aşağıdaki kodda, Street View panoramalarını ayrı bir div öğesine ayırarak v2 davranışının nasıl emüle 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);
}