Maps JavaScript API, web sayfalarında ve mobil cihazlarda görüntülenmek üzere kendi içeriğinizle ve görüntülerinizle haritaları özelleştirmenize olanak tanır. Maps JavaScript API, katmanları ve stilleri, kontrolleri, etkinlikleri, çeşitli hizmetleri ve kütüphaneleri kullanarak değiştirebileceğiniz dört temel harita türü (yol haritası, uydu, karma ve arazi) içerir.
Kitle
Bu doküman, JavaScript programlama ve nesne odaklı programlama kavramlarına aşina olan kişiler için tasarlanmıştır. Ayrıca kullanıcı bakış açısından Haritalar hakkında bilgi sahibi olmanız gerekir. Web'de birçok JavaScript eğiticisi bulunmaktadır.
Bu kavramsal belge, Maps JavaScript API ile uygulamaları keşfetmeye ve geliştirmeye hızla başlamanızı sağlamak için tasarlanmıştır. Ayrıca Haritalar JavaScript API Referansı'nı da yayınlıyoruz.
Merhaba Dünya
Maps JavaScript API hakkında bilgi edinmeye başlamanın en kolay yolu, basit bir örneğe göz atmaktır. Aşağıdaki örnekte Sidney, Yeni Güney Galler, Avustralya merkezli bir harita gösterilmektedir.TypeScript
let map: google.maps.Map; async function initMap(): Promise<void> { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
JavaScript
let map; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html> <head> <title>Simple Map</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- prettier-ignore --> <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))}) ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script> </body> </html>
Örneği Deneyin
Bu basit örnekte bile, dikkat edilmesi gereken birkaç nokta var:
<!DOCTYPE html>
bildirimini kullanarak uygulamanın HTML5 olduğunu beyan ederiz.- Haritayı barındırmak için "map" adlı bir
div
öğesi oluştururuz. div
içinde harita oluşturan bir JavaScript işlevi tanımlarız.- Maps JavaScript API'yi önyükleme yükleyicisini kullanarak yüklüyoruz.
Bu adımlar aşağıda açıklanmıştır.
Maps JavaScript API'yi yükleme
Maps JavaScript API'yi yüklemek için önyükleme yükleyicisi önerilir. Alternatif olarak JS API yükleyicisi de sağlanır. Her iki yaklaşımı da incelemenizi ve projenizdeki kodun yapılandırma şekline en uygun olanı seçmenizi öneririz.
Daha fazla bilgi için Haritalar JavaScript API'sini yükleme bölümünü inceleyin.
Önyükleme Yükleyici
Aşağıdaki snippet'te gösterildiği gibi, uygulama kodunuza bir satır içi önyükleme yükleyicisi ekleyerek Maps JavaScript API'yi yükleyin:
<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
Kitaplıkları çalışma zamanında yüklemek için await
operatörünü kullanarak aşağıda gösterildiği gibi, eşzamansız bir işlevden importLibrary()
yöntemini çağırın:
TypeScript
let map: google.maps.Map; async function initMap(): Promise<void> { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
JavaScript
let map; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
NPM js-api-loader paketi
Maps JavaScript API'yi yüklemek amacıyla NPM'yi kullanmak için @googlemaps/js-api-loader kodunu kullanın. Aşağıdaki komutu kullanarak NPM üzerinden yükleyin:
npm install @googlemaps/js-api-loader
Bu paket, aşağıdakilerle uygulamaya aktarılabilir:
import { Loader } from "@googlemaps/js-api-loader"
Yükleyici, Promise ve geri çağırma arayüzünü gösteriyor. Aşağıda varsayılan Promise yönteminin (load()
) kullanımı gösterilmektedir.
TypeScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
JavaScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
Uygulamanızı HTML5 olarak bildirin
Web uygulamanızda gerçek bir DOCTYPE
belirtmenizi öneririz. Buradaki örneklerde, uygulamalarımızı basit HTML5 DOCTYPE
ile aşağıda gösterildiği gibi HTML5 olarak açıkladık:
<!DOCTYPE html>
Mevcut tarayıcıların çoğu, bu DOCTYPE
ile tanımlanan içeriği "standartlar modunda" oluşturur. Bu, uygulamanızın tarayıcılar arası daha uyumlu olması gerektiği anlamına gelir. DOCTYPE
, sorunsuz bir şekilde indirilecek şekilde tasarlanmıştır. Bunu anlamayan tarayıcılar bunu yok sayar ve içeriklerini görüntülemek için "süslemeler modunu" kullanır.
Tuhaflıklar modunda çalışan bazı CSS'lerin standartlar modunda geçerli olmadığını unutmayın. Özellikle, yüzdeye dayalı tüm boyutlar üst blok öğelerinden devralmalıdır ve bu üst öğelerden herhangi biri boyut belirtemezse boyutlarının 0 x 0 piksel olduğu varsayılır. Bu nedenle aşağıdaki <style>
beyanını ekleriz:
<style> #map { height: 100%; } html, body { height: 100%; margin: 0; padding: 0; } </style>
Bu CSS bildirimi, <div>
harita kapsayıcısının (map
kimliğine sahip) HTML gövdesinin yüksekliğinin% 100'ünü kaplaması gerektiğini belirtir. Bu yüzdeleri de <body>
ve <html>
için de belirtmemiz gerektiğini unutmayın.
Maps JavaScript API yükleniyor
Maps JavaScript API, birscript
etiketi kullanılarak yüklenir. Bu etiket, HTML dosyanıza satır içi olarak veya ayrı bir JavaScript dosyası kullanılarak dinamik bir şekilde eklenebilir. Her iki yaklaşımı da incelemenizi ve projenizdeki kodun yapılandırılma şekli için en uygun olanı seçmenizi öneririz.
Satır İçi Yükleme
Maps JavaScript API'yi bir HTML dosyasında satır içi olarak yüklemek için aşağıda gösterildiği gibi bir script
etiketi ekleyin.
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
Dinamik Yükleme
Maps JavaScript API'yi ayrı bir JavaScript dosyası kullanarak satır içi dinamik olarak yüklemek için aşağıdaki örneği inceleyin. Bu yaklaşım, API ile çalışmak için tüm kodunuzu ayrı bir .js
dosyasından çalıştırmanıza olanak tanır ve komut dosyası etiketini satır içine eklemeye eşdeğerdir.
// Create the script tag, set the appropriate attributes var script = document.createElement('script'); script.src = 'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap'; script.async = true; // Attach your callback function to the `window` object window.initMap = function() { // JS API is loaded and available }; // Append the 'script' element to 'head' document.head.appendChild(script);
Dinamik Yükleme
Daha sorunsuz bir dinamik yükleme deneyimi sağlamak için @googlemaps/js-api-loader paketi kullanılabilir. Aşağıdakilerle AİOY üzerinden yüklenebilir:
npm install @googlemaps/js-api-loader
Bu paket, aşağıdakilerle uygulamaya aktarılabilir:
import { Loader } from "@googlemaps/js-api-loader"
Yükleyici, Promise ve geri çağırma arayüzünü gösteriyor. Aşağıda varsayılan Promise yönteminin (load()
) kullanımı gösterilmektedir.
TypeScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
JavaScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
Komut Dosyası Etiket Özellikleri
Yukarıdaki örneklerde, önerilen birkaç özelliğin script
etiketinde ayarlandığına dikkat edin. Aşağıda her bir özelliğin
açıklaması verilmiştir.
src
: Maps JavaScript API'yi kullanmak için ihtiyacınız olan tüm semboller ve tanımlar dahil olmak üzere, Maps JavaScript API'nin yüklendiği URL. Bu örnekteki URL'nin iki parametresi vardır: API anahtarınızı sağladığınızkey
ve Maps JavaScript API tamamen yüklendikten sonra çağrılacak global işlevin adını belirttiğinizcallback
. URL parametreleri hakkında daha fazla bilgi edinin.async
: Tarayıcıdan komut dosyasını eşzamansız olarak indirmesini ve çalıştırmasını ister. Komut dosyası çalıştırıldığında,callback
parametresini kullanarak belirtilen işlevi çağırır.
Kütüphaneler
Maps JavaScript API'yi URL aracılığıyla yüklerken, isteğe bağlı olarak eşzamansız bir işlevden importLibrary()
çağrısı yapmak için await
operatörünü kullanarak ek kitaplıklar yükleyebilirsiniz. Kitaplıklar, ana Maps JavaScript API'ye ek işlevler sağlayan, ancak siz özellikle istemedikçe yüklenmeyen kod modülleridir. Daha fazla bilgi için
Haritalar JavaScript API'deki kitaplıklar konusuna bakın.
Harita DOM Öğeleri
<div id="map"></div>
Haritanın web sayfasında gösterilebilmesi için ona yer ayırtmamız gerekir.
Genellikle bunu, adlandırılmış bir div
öğesi oluşturarak ve tarayıcının belge nesne modelinde (DOM) bu öğeye referans alarak yaparız.
Yukarıdaki örnekte, harita div öğesinin yüksekliğini "%100" olarak ayarlamak için CSS kullandık. Bu öğe, mobil cihazların boyutuna sığacak şekilde genişleyecektir. Genişlik ve yükseklik değerlerini, tarayıcının ekran boyutuna ve dolgusuna göre ayarlamanız gerekebilir. Div'lerin genellikle genişliklerini kapsayıcı öğelerinden aldıklarını ve boş div'lerin genellikle 0 yüksekliğe sahip olduğunu unutmayın. Bu nedenle, <div>
öğesinde her zaman açıkça bir yükseklik ayarlamanız gerekir.
Harita Seçenekleri
Her harita için iki zorunlu seçenek vardır: center
ve zoom
.
map = new Map(document.getElementById('map'), { center: {lat: -34.397, lng: 150.644}, zoom: 8 });
Yakınlaştırma Düzeyleri
Haritanın görüntüleneceği ilk çözünürlük zoom
özelliği tarafından belirlenir. Burada yakınlaştırma 0
, Dünya haritasına tamamen uzaklaştırılmış, daha yüksek yakınlaştırma düzeyleri ise daha yüksek çözünürlükteki yakınlaştırmaya karşılık gelir.
zoom: 8
Tüm Dünya haritasını tek bir görüntü olarak sunmak çok büyük bir harita veya çok düşük çözünürlüğe sahip küçük bir harita gerektirir. Bunun sonucunda, Google Haritalar ve Maps JavaScript API'deki harita resimleri, harita "parçaları" ve "zum seviyeleri"ne bölünür. Düşük yakınlaştırma düzeylerinde, küçük bir dizi harita karosu geniş bir alanı kaplar; daha yüksek yakınlaştırma düzeylerinde ise karolar daha yüksek çözünürlüğe sahiptir ve daha küçük bir alanı kaplar. Aşağıdaki listede, her bir yakınlaştırma düzeyinde görmeyi bekleyebileceğiniz yaklaşık ayrıntı düzeyi gösterilmektedir:
- 1: Dünya
- 5: Karalar/kıta
- 10: Şehir
- 15: Sokaklar
- 20: Binalar
Aşağıdaki üç resim, Tokyo ile aynı konumu 0, 7 ve 18 yakınlaştırma düzeylerinde yansıtmaktadır.
Maps JavaScript API'nin mevcut yakınlaştırma düzeyine göre karoları nasıl yüklediği hakkında bilgi edinmek için harita ve parça koordinatları kılavuzunu inceleyin.
Harita Nesnesi
map = new Map(document.getElementById("map"), {...});
Bir haritayı temsil eden JavaScript sınıfı Map
sınıfıdır.
Bu sınıfın nesneleri, bir sayfada tek bir harita tanımlar. (Bu sınıfın birden fazla örneğini oluşturabilirsiniz. Her nesne sayfada ayrı bir harita tanımlar.) JavaScript new
operatörünü kullanarak bu sınıfın yeni bir örneğini oluştururuz.
Yeni bir harita örneği oluşturduğunuzda, sayfada harita için kapsayıcı olarak bir <div>
HTML öğesi belirtirsiniz. HTML düğümleri, JavaScript document
nesnesinin alt öğeleridir ve document.getElementById()
yöntemi aracılığıyla bu öğeye bir referans elde ederiz.
Bu kod map
adlı bir değişken tanımlar ve bu değişkeni yeni bir Map
nesnesine atar. Map()
işlevi, oluşturucu olarak bilinir ve tanımı aşağıda gösterilmiştir:
Marka | Açıklama |
---|---|
Map(mapDiv:Node, opts?:MapOptions
) |
İletilen herhangi bir (isteğe bağlı) parametreyi kullanarak, belirli bir HTML kapsayıcısı içinde (genellikle bir DIV öğesidir) yeni bir harita oluşturur. |
Sorun giderme
API Anahtarı ve Faturalandırma Hataları
Belirli durumlarda, karartılmış bir harita veya "yalnızca geliştirme amaçlı" metnini içeren "negatif" bir Street View resmi görüntülenebilir. Bu davranış genellikle bir API anahtarı veya faturalandırma ile ilgili sorunları gösterir. Google Haritalar Platformu ürünlerini kullanmak için hesabınızda faturalandırmanın etkinleştirilmiş olması ve tüm isteklerin geçerli bir API anahtarı içermesi gerekir. Aşağıdaki akış, bu sorunu gidermenize yardımcı olacaktır:
Kodunuz çalışmıyorsa:
Bu videoda, harita kodunuzu hazırlayıp çalıştırmanıza yardımcı olmak için Brendan Kenny ve Mano Marks, bazı yaygın hatalardan ve bunların nasıl düzeltileceğini ele alıyor.
- Yazım hatası olup olmadığına bakın. JavaScript'in büyük/küçük harfe duyarlı bir dil olduğunu unutmayın.
- Temel bilgileri kontrol edin. En yaygın sorunlardan bazıları ilk harita oluşturma sırasında ortaya çıkar. Örneğin:
- Harita seçeneklerinizde
zoom
vecenter
özelliklerini belirttiğinizi onaylayın. - Haritanın ekranda görüneceği bir div öğesi bildirdiğinizden emin olun.
- Haritaya ait div öğesinin bir yüksekliğe sahip olduğundan emin olun. Varsayılan olarak, div öğeleri 0 yüksekliğinde oluşturulur ve bu nedenle görünmez.
- Harita seçeneklerinizde
- Sorunların tanımlanmasına yardımcı olması için Chrome Geliştirici Araçları'nda bulunan gibi bir JavaScript hata ayıklayıcısı kullanın. İlk olarak JavaScript konsolunda hatalar olup olmadığını kontrol edin.
- Sorularınızı Stack Overflow'da yayınlayın. Doğru soruları nasıl yayınlayacağınızla ilgili yönergeleri Destek sayfasında bulabilirsiniz.