{"id":39487,"date":"2026-02-22T14:40:56","date_gmt":"2026-02-22T11:40:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39487"},"modified":"2026-02-22T14:40:56","modified_gmt":"2026-02-22T11:40:56","slug":"react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/","title":{"rendered":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber<\/h2>\n<h3>Giri\u015f: React ve Google Haritalar API Neden Birlikte Kullan\u0131lmal\u0131?<\/h3>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek ve ger\u00e7ek d\u00fcnya verileriyle etkile\u015fim kurmak i\u00e7in s\u0131k\u00e7a co\u011frafi konum tabanl\u0131 hizmetlere ihtiya\u00e7 duyar. Bu ba\u011flamda, Google Haritalar API&#8217;si, d\u00fcnya \u00fczerindeki herhangi bir konumu g\u00f6rselle\u015ftirmek, yol tarifleri sunmak, ilgi \u00e7ekici yerleri bulmak ve \u00e7ok daha fazlas\u0131n\u0131 yapmak i\u00e7in g\u00fc\u00e7l\u00fc ve kapsaml\u0131 bir ara\u00e7 seti sunar. React ise, bile\u015fen tabanl\u0131 yap\u0131s\u0131, sanal DOM&#8217;u ve deklaratif programlama yakla\u015f\u0131m\u0131 sayesinde dinamik ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in pop\u00fcler bir JavaScript k\u00fct\u00fcphanesidir. React&#8217;in mod\u00fcler yap\u0131s\u0131, Google Haritalar API&#8217;sinin karma\u015f\u0131k \u00f6zelliklerini y\u00f6netilebilir ve yeniden kullan\u0131labilir bile\u015fenlere ay\u0131rmay\u0131 kolayla\u015ft\u0131r\u0131r. Bu iki teknolojinin birle\u015fimi, geli\u015ftiricilere hem performansl\u0131 hem de zengin \u00f6zelliklere sahip harita tabanl\u0131 uygulamalar olu\u015fturma imkan\u0131 sunar.<\/p>\n<p>React uygulamalar\u0131na Google Haritalar entegrasyonu, harita bile\u015fenlerinin uygulaman\u0131n geri kalan\u0131yla sorunsuz bir \u015fekilde etkile\u015fim kurmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n konumunu g\u00f6steren bir harita, ayn\u0131 zamanda belirli bir b\u00f6lgedeki i\u015fletmeleri listeleyen bir yan panel ile senkronize edilebilir. Bu entegrasyon, emlak uygulamalar\u0131ndan seyahat planlay\u0131c\u0131lara, teslimat hizmetlerinden etkinlik buluculara kadar geni\u015f bir yelpazedeki uygulamalar i\u00e7in temel bir gerekliliktir. Bu makale, React projelerinize Google Haritalar API&#8217;sini nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, farkl\u0131 yakla\u015f\u0131mlar\u0131 inceleyecek ve en iyi uygulamalar\u0131 sunacakt\u0131r.<\/p>\n<h3>\u00d6n Haz\u0131rl\u0131klar: Google Cloud Platform ve API Anahtar\u0131 Olu\u015fturma<\/h3>\n<p>Google Haritalar API&#8217;sini kullanmaya ba\u015flamadan \u00f6nce, Google Cloud Platform (GCP) \u00fczerinde baz\u0131 temel ayarlamalar\u0131 yapman\u0131z gerekmektedir. Bu ad\u0131mlar, API&#8217;ye eri\u015fim izni almak ve kullan\u0131m\u0131n\u0131z\u0131 y\u00f6netmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Google Cloud Projesi Olu\u015fturma<\/h4>\n<p>\u0130lk olarak, Google Cloud Console&#8217;a (console.cloud.google.com) giri\u015f yapman\u0131z ve yeni bir proje olu\u015fturman\u0131z gerekmektedir. E\u011fer mevcut bir projeniz varsa onu da kullanabilirsiniz. Yeni proje olu\u015fturmak i\u00e7in:<br \/>\n1.  GCP konsolunda, sayfan\u0131n \u00fcst k\u0131sm\u0131ndaki proje se\u00e7icisinden &#8220;Yeni Proje&#8221; butonuna t\u0131klay\u0131n.<br \/>\n2.  Projenize anlaml\u0131 bir ad verin (\u00f6rne\u011fin, &#8220;React Harita Uygulamas\u0131&#8221;) ve bir kurulu\u015f se\u00e7in (iste\u011fe ba\u011fl\u0131).<br \/>\n3.  &#8220;Olu\u015ftur&#8221; butonuna t\u0131klay\u0131n. Projenizin olu\u015fturulmas\u0131 birka\u00e7 dakika s\u00fcrebilir.<\/p>\n<h4>Gerekli API&#8217;leri Etkinle\u015ftirme<\/h4>\n<p>Projenizi olu\u015fturduktan sonra, Google Haritalar API&#8217;sinin hangi hizmetlerini kullanaca\u011f\u0131n\u0131za karar vermeniz ve bu hizmetleri projeniz i\u00e7in etkinle\u015ftirmeniz gerekir. En yayg\u0131n kullan\u0131lan API&#8217;ler \u015funlard\u0131r:<br \/>\n*   <strong>Maps JavaScript API:<\/strong> Web taray\u0131c\u0131lar\u0131nda dinamik haritalar g\u00f6r\u00fcnt\u00fclemek ve harita \u00fczerinde etkile\u015fim kurmak i\u00e7in temel API&#8217;dir.<br \/>\n*   <strong>Geocoding API:<\/strong> Adresleri co\u011frafi koordinatlara (enlem\/boylam) ve tersini d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Places API:<\/strong> Belirli bir konumdaki ilgi \u00e7ekici yerleri (i\u015fletmeler, restoranlar vb.) aramak ve detayl\u0131 bilgi almak i\u00e7in kullan\u0131l\u0131r. Otomatik tamamlama (autocomplete) \u00f6zellikleri de bu API \u00fczerinden sa\u011flan\u0131r.<br \/>\n*   <strong>Directions API:<\/strong> \u0130ki veya daha fazla konum aras\u0131nda yol tarifleri olu\u015fturmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>API&#8217;leri etkinle\u015ftirmek i\u00e7in:<br \/>\n1.  GCP konsolunda, sol men\u00fcden &#8220;API&#8217;ler ve Hizmetler&#8221; > &#8220;Kitapl\u0131k&#8221; se\u00e7ene\u011fine gidin.<br \/>\n2.  Arama \u00e7ubu\u011funu kullanarak yukar\u0131da belirtilen API&#8217;leri aray\u0131n (\u00f6rne\u011fin, &#8220;Maps JavaScript API&#8221;).<br \/>\n3.  Her bir API&#8217;nin sayfas\u0131na giderek &#8220;Etkinle\u015ftir&#8221; butonuna t\u0131klay\u0131n.<\/p>\n<h4>API Anahtar\u0131 Olu\u015fturma ve K\u0131s\u0131tlama<\/h4>\n<p>API&#8217;leri etkinle\u015ftirdikten sonra, uygulaman\u0131z\u0131n bu API&#8217;lere eri\u015febilmesi i\u00e7in bir API anahtar\u0131 olu\u015fturman\u0131z gerekir. Bu anahtar, uygulaman\u0131z\u0131n kimli\u011fini do\u011frular ve API kullan\u0131m\u0131n\u0131z\u0131 takip etmenizi sa\u011flar.<\/p>\n<p>API anahtar\u0131 olu\u015fturmak i\u00e7in:<br \/>\n1.  GCP konsolunda, sol men\u00fcden &#8220;API&#8217;ler ve Hizmetler&#8221; > &#8220;Kimlik Bilgileri&#8221; se\u00e7ene\u011fine gidin.<br \/>\n2.  &#8220;Kimlik Bilgileri Olu\u015ftur&#8221; butonuna t\u0131klay\u0131n ve a\u00e7\u0131l\u0131r men\u00fcden &#8220;API anahtar\u0131&#8221;n\u0131 se\u00e7in.<br \/>\n3.  API anahtar\u0131n\u0131z olu\u015fturulacak ve size g\u00f6sterilecektir. Bu anahtar\u0131 kopyalay\u0131n.<\/p>\n<p><strong>G\u00fcvenlik Notu:<\/strong> API anahtar\u0131n\u0131z\u0131 herkesle payla\u015fmamal\u0131s\u0131n\u0131z. \u00d6zellikle client-side uygulamalarda kullan\u0131ld\u0131\u011f\u0131nda, API anahtar\u0131n\u0131z\u0131 k\u0131s\u0131tlamak, yetkisiz kullan\u0131m\u0131 \u00f6nlemek i\u00e7in hayati \u00f6nem ta\u015f\u0131r.<br \/>\nAPI anahtar\u0131n\u0131z\u0131 k\u0131s\u0131tlamak i\u00e7in:<br \/>\n1.  &#8220;Kimlik Bilgileri&#8221; sayfas\u0131nda, yeni olu\u015fturdu\u011funuz API anahtar\u0131n\u0131n yan\u0131ndaki d\u00fczenleme (kalem) simgesine t\u0131klay\u0131n.<br \/>\n2.  &#8220;Uygulama k\u0131s\u0131tlamalar\u0131&#8221; b\u00f6l\u00fcm\u00fcnde &#8220;HTTP y\u00f6nlendiriciler (web siteleri)&#8221; se\u00e7ene\u011fini i\u015faretleyin.<br \/>\n3.  &#8220;Web sitesi k\u0131s\u0131tlamalar\u0131&#8221; alt\u0131nda, uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 alan adlar\u0131n\u0131 ekleyin (\u00f6rne\u011fin, <code><em>.yourdomain.com\/<\/em><\/code> veya geli\u015ftirme ortam\u0131 i\u00e7in <code>http:\/\/localhost:3000\/*<\/code>).<br \/>\n4.  &#8220;API k\u0131s\u0131tlamalar\u0131&#8221; b\u00f6l\u00fcm\u00fcnde &#8220;Anahtar\u0131 k\u0131s\u0131tla&#8221; se\u00e7ene\u011fini i\u015faretleyin ve sadece uygulaman\u0131z\u0131n kullanaca\u011f\u0131 API&#8217;leri se\u00e7in (\u00f6rne\u011fin, Maps JavaScript API).<br \/>\n5.  De\u011fi\u015fiklikleri kaydetmek i\u00e7in &#8220;Kaydet&#8221; butonuna t\u0131klay\u0131n.<\/p>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, React uygulaman\u0131zda Google Haritalar API&#8217;sini kullanmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<h3>React Uygulamas\u0131nda Temel Kurulum<\/h3>\n<p>Google Haritalar API&#8217;sini React uygulaman\u0131za entegre etmek i\u00e7in \u00f6ncelikle temel bir React projesi olu\u015fturman\u0131z ve gerekli k\u00fct\u00fcphaneleri y\u00fcklemeniz gerekmektedir.<\/p>\n<h4>Yeni Bir React Projesi Olu\u015fturma<\/h4>\n<p>E\u011fer mevcut bir React projeniz yoksa, <code>Create React App<\/code> veya Vite gibi ara\u00e7larla h\u0131zl\u0131ca yeni bir proje olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">npx create-react-app my-map-app\ncd my-map-app\n<h2>Veya Vite ile:<\/h2>\n<h2>npm create vite@latest my-map-app -- --template react<\/h2>\n<h2>cd my-map-app<\/h2>\n<h2>npm install<\/code><\/pre>\n<\/h2>\n<h4>Gerekli Paketlerin Kurulumu<\/h4>\n<p>React uygulamalar\u0131nda Google Haritalar API&#8217;sini entegre etmek i\u00e7in birka\u00e7 farkl\u0131 k\u00fct\u00fcphane mevcuttur. Bu makalede en pop\u00fcler ve esnek k\u00fct\u00fcphanelerden ikisi olan <code>@react-google-maps\/api<\/code> ve <code>google-map-react<\/code> \u00fczerinde duraca\u011f\u0131z.<\/p>\n<p><strong>1. <code>@react-google-maps\/api<\/code> K\u00fct\u00fcphanesini Kurulumu:<\/strong><br \/>\nBu k\u00fct\u00fcphane, Google Maps JavaScript API&#8217;sinin React&#8217;e \u00f6zg\u00fc bir sarmalay\u0131c\u0131s\u0131d\u0131r (wrapper). Google&#8217;\u0131n kendi API&#8217;sini React bile\u015fenleri olarak kullanman\u0131z\u0131 sa\u011flar ve en g\u00fcncel \u00f6zelliklere eri\u015fim sunar.<\/p>\n<pre><code class=\"language-bash\">npm install @react-google-maps\/api\n<h2>veya<\/h2>\nyarn add @react-google-maps\/api<\/code><\/pre>\n<p><strong>2. <code>google-map-react<\/code> K\u00fct\u00fcphanesini Kurulumu (Alternatif):<\/strong><br \/>\nBu k\u00fct\u00fcphane, daha \u00e7ok \u00f6zel i\u015faret\u00e7iler ve harita \u00fczerinde tamamen \u00f6zelle\u015ftirilmi\u015f bile\u015fenler olu\u015fturmak istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r. Kendi DOM yap\u0131s\u0131n\u0131 kullanarak harita \u00fczerinde React bile\u015fenleri render etmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">npm install google-map-react\n<h2>veya<\/h2>\nyarn add google-map-react<\/code><\/pre>\n<p>Bu makalede \u00f6ncelikle <code>@react-google-maps\/api<\/code> k\u00fct\u00fcphanesini kullanarak entegrasyonu detayl\u0131 bir \u015fekilde inceleyece\u011fiz, \u00e7\u00fcnk\u00fc Google&#8217;\u0131n kendi API&#8217;siyle daha do\u011frudan bir etkile\u015fim sunar ve genellikle daha g\u00fcncel kal\u0131r. Ard\u0131ndan <code>google-map-react<\/code> k\u00fct\u00fcphanesine de k\u0131saca de\u011finece\u011fiz.<\/p>\n<h3><code>@react-google-maps\/api<\/code> K\u00fct\u00fcphanesini Kullanarak Entegrasyon<\/h3>\n<p><code>@react-google-maps\/api<\/code> k\u00fct\u00fcphanesi, Google Maps JavaScript API&#8217;sini React bile\u015fenleri olarak sarmalar. Bu, harita ve \u00fczerindeki \u00f6\u011feleri React&#8217;in deklaratif yap\u0131s\u0131yla y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4><code>LoadScript<\/code> Bile\u015feni ile API Y\u00fckleme<\/h4>\n<p>Google Haritalar API&#8217;si, harita bile\u015fenleri render edilmeden \u00f6nce y\u00fcklenmelidir. <code>LoadScript<\/code> bile\u015feni bu i\u015flemi sizin i\u00e7in y\u00f6netir. API anahtar\u0131n\u0131z\u0131 ve gerekli k\u00fct\u00fcphaneleri (\u00f6rne\u011fin <code>places<\/code>, <code>geometry<\/code>) bu bile\u015fene iletirsiniz.<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { GoogleMap, LoadScript } from '@react-google-maps\/api';\n\nconst containerStyle = {\n  width: '100%',\n  height: '400px'\n};\n\nconst center = {\n  lat: -3.745,\n  lng: -38.523\n};\n\nfunction MyMapComponent() {\n  const libraries = ['places']; \/\/ \u0130htiya\u00e7 duydu\u011funuz k\u00fct\u00fcphaneleri buraya ekleyin\n\n  return (\n    <LoadScript\n      googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\" \/\/ API anahtar\u0131n\u0131z\u0131 buraya girin\n      libraries={libraries}\n    >\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n      >\n        { \/<em> Harita \u00fczerindeki di\u011fer bile\u015fenler buraya gelecek <\/em>\/ }\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}\n\nexport default MyMapComponent;<\/code><\/pre>\n<p><code>LoadScript<\/code> bile\u015feni, API y\u00fcklendi\u011finde <code>isLoaded<\/code> durumunu g\u00fcnceller. Haritan\u0131z\u0131 bu durum <code>true<\/code> oldu\u011funda render etmek, hata olu\u015fmas\u0131n\u0131 engeller. Genellikle <code>GoogleMap<\/code> bile\u015feni <code>LoadScript<\/code>&#8216;in \u00e7ocuk bile\u015feni olarak kullan\u0131ld\u0131\u011f\u0131nda bu durum otomatik olarak y\u00f6netilir.<\/p>\n<h4><code>GoogleMap<\/code> Bile\u015feni ile Harita Olu\u015fturma<\/h4>\n<p><code>GoogleMap<\/code> bile\u015feni, haritan\u0131n kendisini render etmek i\u00e7in kullan\u0131l\u0131r. Temel olarak <code>mapContainerStyle<\/code> (haritan\u0131n boyutlar\u0131), <code>center<\/code> (haritan\u0131n ba\u015flang\u0131\u00e7 merkezi koordinatlar\u0131) ve <code>zoom<\/code> (ba\u015flang\u0131\u00e7 yak\u0131nla\u015ft\u0131rma seviyesi) gibi prop&#8217;lar al\u0131r.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Yukar\u0131daki \u00f6rnekteki gibi MyMapComponent i\u00e7inde\n<GoogleMap\n  mapContainerStyle={containerStyle}\n  center={center}\n  zoom={10}\n>\n  {\/<em> Di\u011fer bile\u015fenler <\/em>\/}\n<\/GoogleMap><\/code><\/pre>\n<h4>Harita \u00d6zelliklerini Yap\u0131land\u0131rma (Merkez, Yak\u0131nla\u015ft\u0131rma Seviyesi, Stiller)<\/h4>\n<p><code>GoogleMap<\/code> bile\u015feni, haritan\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in bir\u00e7ok prop sunar:<br \/>\n*   <code>options<\/code>: Harita kontrolleri (yak\u0131nla\u015ft\u0131rma, pan, sokak g\u00f6r\u00fcn\u00fcm\u00fc vb.), harita t\u00fcr\u00fc, stil gibi geli\u015fmi\u015f se\u00e7enekleri ayarlamak i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <code>mapTypeId<\/code>: Haritan\u0131n t\u00fcr\u00fcn\u00fc belirler (\u00f6rne\u011fin, <code>google.maps.MapTypeId.ROADMAP<\/code>, <code>SATELLITE<\/code>, <code>HYBRID<\/code>, <code>TERRAIN<\/code>).<br \/>\n*   <code>onLoad<\/code>: Harita y\u00fcklendi\u011finde tetiklenen bir callback fonksiyonu. Harita nesnesine eri\u015fmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <code>onUnmount<\/code>: Harita bile\u015feni DOM&#8217;dan kald\u0131r\u0131ld\u0131\u011f\u0131nda tetiklenen bir callback. Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in harita nesnesini temizlemek i\u00e7in kullan\u0131labilir.<\/p>\n<p>\u00d6rnek: Harita kontrollerini gizleme ve belirli bir harita t\u00fcr\u00fc ayarlama.<\/p>\n<pre><code class=\"language-jsx\">const mapOptions = {\n  zoomControl: false,\n  mapTypeControl: false,\n  scaleControl: false,\n  streetViewControl: false,\n  rotateControl: false,\n  fullscreenControl: false,\n  mapTypeId: 'satellite' \/\/ Uydu g\u00f6r\u00fcn\u00fcm\u00fc\n};\n\nfunction MyMapComponent() {\n  const [map, setMap] = React.useState(null);\n\n  const onLoad = React.useCallback(function callback(map) {\n    const bounds = new window.google.maps.LatLngBounds(center);\n    map.fitBounds(bounds); \/\/ Haritay\u0131 ba\u015flang\u0131\u00e7 merkezine g\u00f6re s\u0131\u011fd\u0131r\n    setMap(map);\n  }, []);\n\n  const onUnmount = React.useCallback(function callback(map) {\n    setMap(null);\n  }, []);\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n        options={mapOptions} \/\/ Harita se\u00e7eneklerini uygulay\u0131n\n        onLoad={onLoad}\n        onUnmount={onUnmount}\n      >\n        {\/<em> Di\u011fer bile\u015fenler <\/em>\/}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>\u0130\u015faret\u00e7iler (Markers) Ekleme<\/h4>\n<p>Harita \u00fczerinde belirli noktalar\u0131 i\u015faretlemek i\u00e7in <code>Marker<\/code> bile\u015feni kullan\u0131l\u0131r. <code>position<\/code> prop&#8217;u ile i\u015faret\u00e7inin koordinatlar\u0131n\u0131 belirtirsiniz.<\/p>\n<pre><code class=\"language-jsx\">import { GoogleMap, LoadScript, Marker } from '@react-google-maps\/api';\n\nconst markers = [\n  { lat: -3.745, lng: -38.523, title: 'Konum A' },\n  { lat: -3.750, lng: -38.530, title: 'Konum B' }\n];\n\nfunction MyMapComponent() {\n  \/\/ ... (\u00f6nceki kodlar)\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n      >\n        {markers.map((marker, index) => (\n          <Marker\n            key={index}\n            position={{ lat: marker.lat, lng: marker.lng }}\n            title={marker.title}\n            \/\/ icon={{\n            \/\/   url: 'https:\/\/example.com\/custom-marker.png',\n            \/\/   scaledSize: new window.google.maps.Size(30, 30)\n            \/\/ }}\n            onClick={() => console.log(<code>Marker ${marker.title} t\u0131kland\u0131!<\/code>)}\n          \/>\n        ))}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<p><code>Marker<\/code> bile\u015fenine <code>onClick<\/code> gibi olay dinleyicileri de ekleyebilirsiniz. Ayr\u0131ca <code>icon<\/code> prop&#8217;u ile \u00f6zel i\u015faret\u00e7i simgeleri de kullanabilirsiniz.<\/p>\n<h4>Bilgi Pencereleri (InfoWindows) Kullan\u0131m\u0131<\/h4>\n<p>\u0130\u015faret\u00e7ilere t\u0131kland\u0131\u011f\u0131nda veya fare \u00fczerine gelindi\u011finde detayl\u0131 bilgi g\u00f6stermek i\u00e7in <code>InfoWindow<\/code> bile\u015feni kullan\u0131l\u0131r. Genellikle bir i\u015faret\u00e7iye ba\u011fl\u0131 olarak a\u00e7\u0131l\u0131r ve kapan\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import { GoogleMap, LoadScript, Marker, InfoWindow } from '@react-google-maps\/api';\n\nfunction MyMapComponent() {\n  const [activeMarker, setActiveMarker] = React.useState(null);\n\n  const handleActiveMarker = (marker) => {\n    if (marker === activeMarker) {\n      return;\n    }\n    setActiveMarker(marker);\n  };\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n      >\n        {markers.map(({ lat, lng, title }, index) => (\n          <Marker\n            key={index}\n            position={{ lat, lng }}\n            onClick={() => handleActiveMarker(index)}\n          >\n            {activeMarker === index ? (\n              <InfoWindow onCloseClick={() => setActiveMarker(null)}>\n                <div>\n                  <h3>{title}<\/h3>\n                  <p>Bu bir bilgi penceresidir.<\/p>\n                <\/div>\n              <\/InfoWindow>\n            ) : null}\n          <\/Marker>\n        ))}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<p><code>InfoWindow<\/code> bile\u015feni, <code>Marker<\/code> bile\u015feninin \u00e7ocuk \u00f6\u011fesi olarak veya do\u011frudan <code>GoogleMap<\/code> bile\u015feninin \u00e7ocuk \u00f6\u011fesi olarak kullan\u0131labilir. <code>onCloseClick<\/code> prop&#8217;u ile pencerenin kapat\u0131ld\u0131\u011f\u0131nda yap\u0131lacak i\u015flemleri tan\u0131mlayabilirsiniz.<\/p>\n<h4>Harita Olaylar\u0131n\u0131 Dinleme (T\u0131klama, S\u00fcr\u00fckleme vb.)<\/h4>\n<p><code>GoogleMap<\/code> ve di\u011fer harita bile\u015fenleri, \u00e7e\u015fitli olay dinleyicilerini prop olarak kabul eder. Bu, kullan\u0131c\u0131 etkile\u015fimlerine tepki vermenizi sa\u011flar.<\/p>\n<p>*   <code>onClick<\/code>: Haritaya t\u0131kland\u0131\u011f\u0131nda.<br \/>\n*   <code>onDragEnd<\/code>: Harita s\u00fcr\u00fcklendikten sonra b\u0131rak\u0131ld\u0131\u011f\u0131nda.<br \/>\n*   <code>onZoomChanged<\/code>: Yak\u0131nla\u015ft\u0131rma seviyesi de\u011fi\u015fti\u011finde.<br \/>\n*   <code>onBoundsChanged<\/code>: Haritan\u0131n g\u00f6r\u00fcn\u00fcr alan\u0131 de\u011fi\u015fti\u011finde.<\/p>\n<pre><code class=\"language-jsx\">function MyMapComponent() {\n  const onMapClick = React.useCallback((event) => {\n    console.log('Haritaya t\u0131kland\u0131:', event.latLng.lat(), event.latLng.lng());\n  }, []);\n\n  const onMapDragEnd = React.useCallback(() => {\n    console.log('Harita s\u00fcr\u00fcklendi.');\n  }, []);\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n        onClick={onMapClick}\n        onDragEnd={onMapDragEnd}\n      >\n        {\/<em> ... <\/em>\/}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>\u00c7izimler ve Katmanlar (Polylines, Polygons, Circles)<\/h4>\n<p>Harita \u00fczerinde \u00e7izgiler, \u00e7okgenler veya daireler \u00e7izmek i\u00e7in <code>Polyline<\/code>, <code>Polygon<\/code> ve <code>Circle<\/code> bile\u015fenlerini kullanabilirsiniz. Bu bile\u015fenler, genellikle bir dizi koordinat (<code>path<\/code> prop&#8217;u) ve stil se\u00e7enekleri (<code>options<\/code> prop&#8217;u) al\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import { GoogleMap, LoadScript, Polyline, Polygon, Circle } from '@react-google-maps\/api';\n\nconst polylinePath = [\n  { lat: -3.745, lng: -38.523 },\n  { lat: -3.730, lng: -38.540 },\n  { lat: -3.720, lng: -38.500 }\n];\n\nconst polygonPath = [\n  { lat: -3.760, lng: -38.560 },\n  { lat: -3.770, lng: -38.570 },\n  { lat: -3.780, lng: -38.550 },\n  { lat: -3.760, lng: -38.560 }\n];\n\nconst circleOptions = {\n  strokeColor: '#FF0000',\n  strokeOpacity: 0.8,\n  strokeWeight: 2,\n  fillColor: '#FF0000',\n  fillOpacity: 0.35,\n  clickable: false,\n  draggable: false,\n  editable: false,\n  visible: true,\n  radius: 5000, \/\/ metre cinsinden\n  zIndex: 1\n};\n\nfunction MyMapComponent() {\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n      >\n        <Polyline\n          path={polylinePath}\n          options={{ strokeColor: '#FF0000', strokeWeight: 3 }}\n        \/>\n        <Polygon\n          path={polygonPath}\n          options={{\n            strokeColor: '#0000FF',\n            strokeOpacity: 0.8,\n            strokeWeight: 2,\n            fillColor: '#0000FF',\n            fillOpacity: 0.35\n          }}\n        \/>\n        <Circle\n          center={{ lat: -3.700, lng: -38.500 }}\n          options={circleOptions}\n        \/>\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>Farkl\u0131 Harita T\u00fcrleri (Uydu, Arazi)<\/h4>\n<p><code>GoogleMap<\/code> bile\u015feninin <code>mapTypeId<\/code> prop&#8217;unu kullanarak harita t\u00fcr\u00fcn\u00fc kolayca de\u011fi\u015ftirebilirsiniz.<br \/>\n*   <code>roadmap<\/code>: Varsay\u0131lan yol haritas\u0131 g\u00f6r\u00fcn\u00fcm\u00fc.<br \/>\n*   <code>satellite<\/code>: Uydu g\u00f6r\u00fcnt\u00fcleri.<br \/>\n*   <code>hybrid<\/code>: Uydu g\u00f6r\u00fcnt\u00fcleri ve yol haritas\u0131 etiketlerinin birle\u015fimi.<br \/>\n*   <code>terrain<\/code>: Arazi ve y\u00fckseklik bilgileri i\u00e7eren fiziksel harita.<\/p>\n<pre><code class=\"language-jsx\">\/\/ mapTypeId: 'satellite' veya 'terrain' olarak ayarlay\u0131n\n<GoogleMap\n  mapContainerStyle={containerStyle}\n  center={center}\n  zoom={10}\n  mapTypeId=\"satellite\" \/\/ Harita t\u00fcr\u00fcn\u00fc de\u011fi\u015ftirin\n>\n  {\/<em> ... <\/em>\/}\n<\/GoogleMap><\/code><\/pre>\n<h3><code>google-map-react<\/code> K\u00fct\u00fcphanesini Kullanarak Entegrasyon (Alternatif Yakla\u015f\u0131m)<\/h3>\n<p><code>google-map-react<\/code> k\u00fct\u00fcphanesi, <code>@react-google-maps\/api<\/code>&#8216;den farkl\u0131 bir yakla\u015f\u0131ma sahiptir. Harita \u00fczerinde \u00f6zel i\u015faret\u00e7iler veya di\u011fer React bile\u015fenlerini render etmek i\u00e7in daha esnek bir yol sunar. Google Maps API&#8217;sini do\u011frudan DOM&#8217;a g\u00f6mmek yerine, haritay\u0131 bir React bile\u015feni olarak sarar ve harita \u00fczerinde render edilecek \u00e7ocuk bile\u015fenleri i\u00e7in bir <code>Provider<\/code> g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h4>Kurulum ve Temel Kullan\u0131m<\/h4>\n<p>\u00d6ncelikle k\u00fct\u00fcphaneyi kurun:<\/p>\n<pre><code class=\"language-bash\">npm install google-map-react\n<h2>veya<\/h2>\nyarn add google-map-react<\/code><\/pre>\n<p>Ard\u0131ndan temel harita bile\u015feninizi olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport GoogleMapReact from 'google-map-react';\n\nconst AnyReactComponent = ({ text }) => <div>{text}<\/div>; \/\/ \u00d6zel i\u015faret\u00e7i bile\u015feni\n\nfunction MyGoogleMapReactComponent() {\n  const defaultProps = {\n    center: {\n      lat: 59.95,\n      lng: 30.33\n    },\n    zoom: 11\n  };\n\n  return (\n    <div style={{ height: '400px', width: '100%' }}>\n      <GoogleMapReact\n        bootstrapURLKeys={{ key: \"YOUR_GOOGLE_MAPS_API_KEY\" }} \/\/ API anahtar\u0131n\u0131z\u0131 buraya girin\n        defaultCenter={defaultProps.center}\n        defaultZoom={defaultProps.zoom}\n        yesIWantToUseGoogleMapApiInternals \/\/ Geli\u015fmi\u015f API \u00f6zelliklerine eri\u015fim i\u00e7in\n        \/\/ onGoogleApiLoaded={({ map, maps }) => console.log('Google Maps API y\u00fcklendi', map, maps)}\n      >\n        <AnyReactComponent\n          lat={59.955413}\n          lng={30.337844}\n          text=\"Marker 1\"\n        \/>\n        <AnyReactComponent\n          lat={59.965413}\n          lng={30.347844}\n          text=\"Marker 2\"\n        \/>\n      <\/GoogleMapReact>\n    <\/div>\n  );\n}\n\nexport default MyGoogleMapReactComponent;<\/code><\/pre>\n<p>Burada <code>AnyReactComponent<\/code> ad\u0131nda basit bir div olu\u015fturduk. <code>GoogleMapReact<\/code> bile\u015feninin \u00e7ocuklar\u0131 olarak yerle\u015ftirilen bu bile\u015fenler, <code>lat<\/code> ve <code>lng<\/code> prop&#8217;lar\u0131 sayesinde harita \u00fczerinde belirtilen koordinatlarda konumland\u0131r\u0131l\u0131r.<\/p>\n<h4>\u00d6zel \u0130\u015faret\u00e7iler Olu\u015fturma<\/h4>\n<p><code>google-map-react<\/code>&#8216;in en g\u00fc\u00e7l\u00fc yanlar\u0131ndan biri, harita \u00fczerindeki i\u015faret\u00e7ileri tamamen React bile\u015fenleri olarak tan\u0131mlayabilmenizdir. Bu, CSS ile tam kontrol ve React bile\u015fenlerinin t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fc \u00f6zelliklerinden faydalanma anlam\u0131na gelir.<\/p>\n<pre><code class=\"language-jsx\">const CustomMarker = ({ text, onClick }) => (\n  <div\n    style={{\n      color: 'white',\n      background: 'red',\n      padding: '10px 15px',\n      display: 'inline-flex',\n      textAlign: 'center',\n      alignItems: 'center',\n      justifyContent: 'center',\n      borderRadius: '50%',\n      transform: 'translate(-50%, -50%)', \/\/ \u0130\u015faret\u00e7iyi ortalamak i\u00e7in\n      cursor: 'pointer'\n    }}\n    onClick={onClick}\n  >\n    {text}\n  <\/div>\n);\n\n\/\/ ... MyGoogleMapReactComponent i\u00e7inde\n<GoogleMapReact\n  \/\/ ...\n>\n  <CustomMarker\n    lat={59.955413}\n    lng={30.337844}\n    text=\"Evim\"\n    onClick={() => alert('Evime ho\u015f geldiniz!')}\n  \/>\n<\/GoogleMapReact><\/code><\/pre>\n<h4><code>google-map-react<\/code> ve Performans<\/h4>\n<p><code>google-map-react<\/code>, harita \u00fczerindeki \u00f6zel bile\u015fenleri render ederken sanal DOM&#8217;u kullan\u0131r. Bu, \u00e7ok say\u0131da dinamik i\u015faret\u00e7iniz oldu\u011funda performans\u0131 art\u0131rabilir. Ancak, \u00e7ok say\u0131da karma\u015f\u0131k React bile\u015fenini i\u015faret\u00e7i olarak kullanmak yine de performans sorunlar\u0131na yol a\u00e7abilir. Bu gibi durumlarda, i\u015faret\u00e7i bile\u015fenlerinizi <code>React.memo<\/code> ile sarmalamak veya <code>shouldComponentUpdate<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc metodunu kullanmak faydal\u0131 olabilir.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve Optimizasyon<\/h3>\n<p>Google Haritalar API&#8217;si, sadece harita g\u00f6stermekten \u00e7ok daha fazlas\u0131n\u0131 sunar. Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re \u00e7e\u015fitli geli\u015fmi\u015f \u00f6zelliklerini entegre edebilirsiniz.<\/p>\n<h4>Geocoding ve Reverse Geocoding<\/h4>\n<p>*   <strong>Geocoding:<\/strong> Bir adres dizesini (\u00f6rne\u011fin, &#8220;1600 Amphitheatre Parkway, Mountain View, CA&#8221;) co\u011frafi koordinatlara (enlem ve boylam) d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir.<br \/>\n*   <strong>Reverse Geocoding:<\/strong> Co\u011frafi koordinatlar\u0131 (enlem ve boylam) okunabilir bir adrese d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir.<\/p>\n<p>Bu i\u015flemler i\u00e7in <code>Geocoding API<\/code> kullan\u0131l\u0131r. <code>@react-google-maps\/api<\/code> k\u00fct\u00fcphanesinde <code>useJsApiLoader<\/code> hook&#8217;u ve ard\u0131ndan <code>new window.google.maps.Geocoder()<\/code> kullanarak bu i\u015flemleri ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useCallback } from 'react';\nimport { GoogleMap, LoadScript } from '@react-google-maps\/api';\n\nfunction GeocodingExample() {\n  const [address, setAddress] = useState('');\n  const [coordinates, setCoordinates] = useState(null);\n  const [map, setMap] = useState(null);\n\n  const onMapLoad = useCallback((mapInstance) => {\n    setMap(mapInstance);\n  }, []);\n\n  const handleGeocode = () => {\n    if (!window.google || !map) return;\n\n    const geocoder = new window.google.maps.Geocoder();\n    geocoder.geocode({ address: address }, (results, status) => {\n      if (status === 'OK' && results[0]) {\n        const { lat, lng } = results[0].geometry.location;\n        setCoordinates({ lat: lat(), lng: lng() });\n        map.setCenter({ lat: lat(), lng: lng() });\n        map.setZoom(15);\n      } else {\n        alert('Geocoding ba\u015far\u0131s\u0131z: ' + status);\n      }\n    });\n  };\n\n  const handleReverseGeocode = () => {\n    if (!window.google || !map || !coordinates) return;\n\n    const geocoder = new window.google.maps.Geocoder();\n    geocoder.geocode({ location: coordinates }, (results, status) => {\n      if (status === 'OK' && results[0]) {\n        alert('Ters Geocoding Sonucu: ' + results[0].formatted_address);\n      } else {\n        alert('Ters Geocoding ba\u015far\u0131s\u0131z: ' + status);\n      }\n    });\n  };\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={{ width: '100%', height: '400px' }}\n        center={coordinates || { lat: 0, lng: 0 }}\n        zoom={coordinates ? 15 : 2}\n        onLoad={onMapLoad}\n      >\n        {coordinates && <window.google.maps.Marker position={coordinates} \/>}\n      <\/GoogleMap>\n      <input\n        type=\"text\"\n        value={address}\n        onChange={(e) => setAddress(e.target.value)}\n        placeholder=\"Adres girin\"\n      \/>\n      <button onClick={handleGeocode}>Adresi Haritada G\u00f6ster<\/button>\n      {coordinates && <button onClick={handleReverseGeocode}>Koordinatlardan Adres Bul<\/button>}\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>Places API ve Otomatik Tamamlama (Autocomplete)<\/h4>\n<p>Places API, belirli bir konumdaki ilgi \u00e7ekici yerleri (i\u015fletmeler, restoranlar, turistik yerler vb.) araman\u0131z\u0131 ve detayl\u0131 bilgi alman\u0131z\u0131 sa\u011flar. En pop\u00fcler \u00f6zelliklerinden biri, kullan\u0131c\u0131 bir arama kutusuna yazarken yer isimlerini otomatik olarak tamamlamakt\u0131r.<\/p>\n<p><code>@react-google-maps\/api<\/code> k\u00fct\u00fcphanesi, <code>StandaloneSearchBox<\/code> veya <code>Autocomplete<\/code> gibi bile\u015fenleri do\u011frudan sa\u011flamaz, ancak Google Maps JavaScript API&#8217;sinin <code>google.maps.places.Autocomplete<\/code> s\u0131n\u0131f\u0131n\u0131 kullanabilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">import React, { useRef, useEffect, useState } from 'react';\nimport { LoadScript } from '@react-google-maps\/api';\n\nconst libraries = ['places'];\n\nfunction PlacesAutocomplete() {\n  const [place, setPlace] = useState(null);\n  const inputRef = useRef(null);\n\n  useEffect(() => {\n    if (!window.google || !inputRef.current) return;\n\n    const autocomplete = new window.google.maps.places.Autocomplete(\n      inputRef.current,\n      { types: ['geocode', 'establishment'] } \/\/ Arama t\u00fcrlerini k\u0131s\u0131tla\n    );\n\n    autocomplete.addListener('place_changed', () => {\n      const selectedPlace = autocomplete.getPlace();\n      setPlace(selectedPlace);\n      console.log('Se\u00e7ilen Yer:', selectedPlace);\n    });\n\n    return () => {\n      \/\/ Bile\u015fen kald\u0131r\u0131ld\u0131\u011f\u0131nda dinleyiciyi temizle\n      window.google.maps.event.clearInstanceListeners(autocomplete);\n    };\n  }, []);\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\" libraries={libraries}>\n      <div>\n        <input\n          ref={inputRef}\n          type=\"text\"\n          placeholder=\"Yer aray\u0131n...\"\n          style={{ width: '300px', padding: '10px' }}\n        \/>\n        {place && (\n          <div>\n            <h3>Se\u00e7ilen Yer Bilgileri:<\/h3>\n            <p>Ad\u0131: {place.name}<\/p>\n            <p>Adres: {place.formatted_address}<\/p>\n            <p>Lat: {place.geometry.location.lat()}, Lng: {place.geometry.location.lng()}<\/p>\n          <\/div>\n        )}\n      <\/div>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>Yol Tarifi Hizmetleri (Directions Service)<\/h4>\n<p>\u0130ki veya daha fazla konum aras\u0131nda yol tarifleri olu\u015fturmak i\u00e7in <code>Directions Service<\/code> ve <code>Directions Renderer<\/code> kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useEffect } from 'react';\nimport { GoogleMap, LoadScript, DirectionsRenderer } from '@react-google-maps\/api';\n\nconst center = { lat: 41.0082, lng: 28.9784 }; \/\/ \u0130stanbul\n\nfunction DirectionsExample() {\n  const [directionsResponse, setDirectionsResponse] = useState(null);\n  const origin = 'Sultanahmet, Istanbul';\n  const destination = 'Taksim Square, Istanbul';\n\n  useEffect(() => {\n    if (!window.google) return;\n\n    const directionsService = new window.google.maps.DirectionsService();\n    directionsService.route(\n      {\n        origin: origin,\n        destination: destination,\n        travelMode: window.google.maps.TravelMode.DRIVING, \/\/ S\u00fcr\u00fc\u015f, Y\u00fcr\u00fcme, Bisiklet, Toplu Ta\u015f\u0131ma\n      },\n      (result, status) => {\n        if (status === 'OK') {\n          setDirectionsResponse(result);\n        } else {\n          console.error(<code>Directions request failed due to ${status}<\/code>);\n        }\n      }\n    );\n  }, []);\n\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={{ width: '100%', height: '400px' }}\n        center={center}\n        zoom={12}\n      >\n        {directionsResponse && (\n          <DirectionsRenderer\n            directions={directionsResponse}\n            options={{\n              polylineOptions: {\n                strokeColor: '#FF0000',\n                strokeWeight: 5,\n                strokeOpacity: 0.8\n              }\n            }}\n          \/>\n        )}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<h4>Harita Stilleri ve Temalar\u0131<\/h4>\n<p>Google Haritalar, haritan\u0131n g\u00f6rsel g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc tamamen \u00f6zelle\u015ftirmenize olanak tan\u0131r. JSON tabanl\u0131 stil nesneleri kullanarak yollar\u0131n rengini, ilgi \u00e7ekici yerlerin g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc, su alanlar\u0131n\u0131n stilini ve daha fazlas\u0131n\u0131 de\u011fi\u015ftirebilirsiniz. Stil nesnelerini <code>GoogleMap<\/code> bile\u015feninin <code>options<\/code> prop&#8217;u i\u00e7indeki <code>styles<\/code> \u00f6zelli\u011fine iletirsiniz.<\/p>\n<pre><code class=\"language-jsx\">const customMapStyles = [\n  {\n    featureType: 'poi', \/\/ \u0130lgi \u00e7ekici yerleri hedefle\n    stylers: [{ visibility: 'off' }] \/\/ Gizle\n  },\n  {\n    featureType: 'road', \/\/ Yollar\u0131 hedefle\n    elementType: 'geometry',\n    stylers: [{ color: '#aaaaaa' }] \/\/ Gri yap\n  },\n  {\n    featureType: 'water', \/\/ Su alanlar\u0131n\u0131 hedefle\n    stylers: [{ color: '#c9e0ed' }] \/\/ A\u00e7\u0131k mavi yap\n  }\n  \/\/ Daha fazla stil kural\u0131 eklenebilir\n];\n\nfunction StyledMapComponent() {\n  return (\n    <LoadScript googleMapsApiKey=\"YOUR_GOOGLE_MAPS_API_KEY\">\n      <GoogleMap\n        mapContainerStyle={containerStyle}\n        center={center}\n        zoom={10}\n        options={{ styles: customMapStyles }} \/\/ \u00d6zel stilleri uygula\n      >\n        {\/<em> ... <\/em>\/}\n      <\/GoogleMap>\n    <\/LoadScript>\n  );\n}<\/code><\/pre>\n<p>Harita stilleri olu\u015fturmak i\u00e7in Google&#8217;\u0131n &#8220;Styled Maps&#8221; sihirbaz\u0131n\u0131 kullanabilirsiniz: [https:\/\/mapstyle.withgoogle.com\/](https:\/\/mapstyle.withgoogle.com\/)<\/p>\n<h4>Performans \u0130pu\u00e7lar\u0131 (Lazy Loading, Memoization)<\/h4>\n<p>B\u00fcy\u00fck React uygulamalar\u0131nda harita entegrasyonu performans\u0131 etkileyebilir.<br \/>\n*   <strong>Lazy Loading (Tembel Y\u00fckleme):<\/strong> Harita bile\u015fenini sadece ihtiya\u00e7 duyuldu\u011funda y\u00fcklemek i\u00e7in <code>React.lazy<\/code> ve <code>Suspense<\/code> kullan\u0131n. Bu, ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcresini azalt\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { Suspense, lazy } from 'react';\n\n    const LazyMap = lazy(() => import('.\/MyMapComponent')); \/\/ Harita bile\u015feninizin yolu\n\n    function App() {\n      return (\n        <div className=\"App\">\n          \n          <Suspense fallback={<div>Harita y\u00fckleniyor...<\/div>}>\n            <LazyMap \/>\n          <\/Suspense>\n        <\/div>\n      );\n    }<\/code><\/pre>\n<p>*   <strong>Memoization:<\/strong> <code>React.memo<\/code>, <code>useCallback<\/code> ve <code>useMemo<\/code> hook&#8217;lar\u0131n\u0131 kullanarak bile\u015fenlerin ve callback fonksiyonlar\u0131n\u0131n gereksiz yere yeniden render edilmesini veya olu\u015fturulmas\u0131n\u0131 engelleyin. \u00d6zellikle harita se\u00e7enekleri, merkez koordinatlar\u0131 veya marker listeleri gibi de\u011fi\u015fmeyen veriler i\u00e7in bu \u00f6nemlidir.<\/p>\n<pre><code class=\"language-jsx\">\/\/ center ve options gibi nesneleri React.useMemo ile sarmalay\u0131n\n    const center = React.useMemo(() => ({ lat: -3.745, lng: -38.523 }), []);\n    const mapOptions = React.useMemo(() => ({\n      zoomControl: true,\n      mapTypeControl: false,\n      \/\/ ... di\u011fer se\u00e7enekler\n    }), []);\n\n    \/\/ Callback fonksiyonlar\u0131n\u0131 React.useCallback ile sarmalay\u0131n\n    const onMapClick = React.useCallback((event) => {\n      console.log('Haritaya t\u0131kland\u0131:', event.latLng.lat(), event.latLng.lng());\n    }, []);\n\n    \/\/ E\u011fer kendi \u00f6zel marker bile\u015fenlerinizi kullan\u0131yorsan\u0131z, onlar\u0131 React.memo ile sarmalay\u0131n.\n    const MemoizedMarker = React.memo(CustomMarker);<\/code><\/pre>\n<h4>G\u00fcvenlik \u0130pu\u00e7lar\u0131 (API Anahtar\u0131 K\u0131s\u0131tlamalar\u0131)<\/h4>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, API anahtar\u0131n\u0131z\u0131 k\u0131s\u0131tlamak \u00e7ok \u00f6nemlidir.<br \/>\n*   <strong>HTTP Y\u00f6nlendirici K\u0131s\u0131tlamalar\u0131:<\/strong> API anahtar\u0131n\u0131z\u0131 sadece uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 alan adlar\u0131na (domain) k\u0131s\u0131tlay\u0131n. Geli\u015ftirme ortam\u0131 i\u00e7in <code>localhost<\/code> adreslerini eklemeyi unutmay\u0131n.<br \/>\n*   <strong>API K\u0131s\u0131tlamalar\u0131:<\/strong> Anahtar\u0131 sadece kullanaca\u011f\u0131n\u0131z Google Haritalar API&#8217;leri ile k\u0131s\u0131tlay\u0131n. Bu, bir anahtar\u0131n \u00e7al\u0131nmas\u0131 durumunda potansiyel zarar\u0131 en aza indirir.<br \/>\n*   <strong>Sunucu Taraf\u0131 Anahtarlar:<\/strong> E\u011fer sunucu taraf\u0131nda (\u00f6rne\u011fin Node.js ile) Google Haritalar API&#8217;lerini kullan\u0131yorsan\u0131z (\u00f6rne\u011fin sunucu taraf\u0131nda Geocoding yapmak), bu anahtarlar\u0131 ortam de\u011fi\u015fkenlerinde saklay\u0131n ve asla client-side kodunuzda a\u00e7\u0131k\u00e7a g\u00f6stermeyin. Bu anahtarlar i\u00e7in IP adresi k\u0131s\u0131tlamalar\u0131 kullan\u0131n.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular ve Hata Ay\u0131klama<\/h3>\n<p>*   <strong>Harita g\u00f6r\u00fcnm\u00fcyor, bo\u015f bir div var:<\/strong><br \/>\n    *   API anahtar\u0131n\u0131z\u0131n do\u011fru oldu\u011fundan ve k\u0131s\u0131tlamalar\u0131n\u0131n (alan ad\u0131, API&#8217;ler) do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n    *   <code>mapContainerStyle<\/code> prop&#8217;unda haritan\u0131n geni\u015flik ve y\u00fcksekli\u011finin ayarland\u0131\u011f\u0131ndan emin olun.<br \/>\n    *   Taray\u0131c\u0131n\u0131z\u0131n konsolunu kontrol edin. Genellikle Google Maps API&#8217;sinden gelen hatalar burada g\u00f6r\u00fcn\u00fcr (\u00f6rne\u011fin, &#8220;Google Maps API error: ApiNotActivatedMapError&#8221;).<br \/>\n*   <strong>\u0130\u015faret\u00e7iler veya di\u011fer \u00f6\u011feler g\u00f6r\u00fcnm\u00fcyor:<\/strong><br \/>\n    *   Koordinatlar\u0131n do\u011fru oldu\u011fundan ve haritan\u0131n yak\u0131nla\u015ft\u0131rma seviyesinin (zoom) bu koordinatlar\u0131 kapsayacak kadar uygun oldu\u011fundan emin olun.<br \/>\n    *   <code>LoadScript<\/code> bile\u015fenine gerekli <code>libraries<\/code>&#8216;in (\u00f6rne\u011fin <code>places<\/code>) eklendi\u011finden emin olun.<br \/>\n*   <strong>Performans sorunlar\u0131 ya\u015f\u0131yorum:<\/strong><br \/>\n    *   <code>React.lazy<\/code> ve <code>Suspense<\/code> kullanarak harita bile\u015fenini tembel y\u00fckleyin.<br \/>\n    *   <code>React.memo<\/code>, <code>useCallback<\/code>, <code>useMemo<\/code> kullanarak gereksiz yeniden renderlar\u0131 ve obje olu\u015fturmalar\u0131n\u0131 \u00f6nleyin.<br \/>\n    *   \u00c7ok fazla i\u015faret\u00e7i varsa, k\u00fcmeleme (marker clustering) k\u00fct\u00fcphanelerini (\u00f6rne\u011fin <code>@react-google-maps\/api<\/code> i\u00e7in <code>@googlemaps\/markerclustererplus<\/code>) kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n*   <strong>API anahtar\u0131m\u0131 nas\u0131l g\u00fcvende tutar\u0131m?<\/strong><br \/>\n    *   API anahtar\u0131n\u0131z\u0131 her zaman k\u0131s\u0131tlay\u0131n (alan ad\u0131 ve API k\u0131s\u0131tlamalar\u0131).<br \/>\n    *   Asla Git gibi s\u00fcr\u00fcm kontrol sistemlerine a\u00e7\u0131k\u00e7a g\u00f6ndermeyin. <code>.env<\/code> dosyalar\u0131 kullanarak ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React uygulamalar\u0131n\u0131za Google Haritalar API&#8217;sini entegre etmek, kullan\u0131c\u0131lar\u0131n\u0131za zengin ve etkile\u015fimli co\u011frafi konum tabanl\u0131 deneyimler sunman\u0131n g\u00fc\u00e7l\u00fc bir yoludur. Bu makalede, Google Cloud Platform&#8217;da \u00f6n haz\u0131rl\u0131klardan ba\u015flayarak, <code>@react-google-maps\/api<\/code> ve <code>google-map-react<\/code> gibi pop\u00fcler k\u00fct\u00fcphaneler arac\u0131l\u0131\u011f\u0131yla temel harita olu\u015fturma, i\u015faret\u00e7iler, bilgi pencereleri ekleme ve \u00e7e\u015fitli geli\u015fmi\u015f API hizmetlerini kullanma ad\u0131mlar\u0131n\u0131 ayr\u0131nt\u0131l\u0131 olarak inceledik. Ayr\u0131ca, harita stilini \u00f6zelle\u015ftirme, performans optimizasyonu ve g\u00fcvenlik ipu\u00e7lar\u0131 gibi \u00f6nemli konulara da de\u011findik.<\/p>\n<p>Do\u011fru k\u00fct\u00fcphaneyi se\u00e7mek ve en iyi uygulamalar\u0131 takip etmek, uygulaman\u0131z\u0131n hem i\u015flevsel hem de performansl\u0131 olmas\u0131n\u0131 sa\u011flayacakt\u0131r. Google Haritalar API&#8217;sinin geni\u015f \u00f6zellik setini React&#8217;in deklaratif g\u00fcc\u00fcyle birle\u015ftirerek, kullan\u0131c\u0131lar\u0131n\u0131z\u0131n sevece\u011fi etkileyici harita tabanl\u0131 uygulamalar geli\u015ftirebilirsiniz. Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na en uygun entegrasyon y\u00f6ntemini se\u00e7erek ve sundu\u011fumuz \u00f6rnek kodlar\u0131 temel alarak kendi harita bile\u015fenlerinizi olu\u015fturmaya ba\u015flayabilirsiniz. Unutmay\u0131n, Google Haritalar API&#8217;sinin belgelemeleri (developers.google.com\/maps) ve se\u00e7ti\u011finiz React k\u00fct\u00fcphanesinin belgeleri, daha derinlemesine bilgi ve geli\u015fmi\u015f kullan\u0131m senaryolar\u0131 i\u00e7in en iyi kaynaklard\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber\nGiri\u015f: React ve Google Haritalar API Neden Birlikte Kullan\u0131lmal\u0131?","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[128],"tags":[],"class_list":{"0":"post-39487","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-react","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber Giri\u015f: React ve Google Haritalar API Neden Birlikte Kullan\u0131lmal\u0131?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-22T11:40:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-02-22T11:40:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\"},\"wordCount\":2833,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"React\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\",\"name\":\"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-22T11:40:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber","og_description":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber Giri\u015f: React ve Google Haritalar API Neden Birlikte Kullan\u0131lmal\u0131?","og_url":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-22T11:40:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber","datePublished":"2026-02-22T11:40:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/"},"wordCount":2833,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["React"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/","name":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-22T11:40:56+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-uygulamalarinda-google-haritalar-api-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React Uygulamalar\u0131nda Google Haritalar API Entegrasyonu: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39487"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39487\/revisions"}],"predecessor-version":[{"id":39488,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39487\/revisions\/39488"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}