Takip et

React Uygulamalarında Google Haritalar API Entegrasyonu: Kapsamlı Bir Rehber

React Uygulamalarında Google Haritalar API Entegrasyonu: Kapsamlı Bir Rehber Giriş: React ve Google Haritalar API Neden Birlikte Kullanılmalı?

React Uygulamalarında Google Haritalar API Entegrasyonu: Kapsamlı Bir Rehber

Giriş: React ve Google Haritalar API Neden Birlikte Kullanılmalı?

Modern web uygulamaları, kullanıcı deneyimini zenginleştirmek ve gerçek dünya verileriyle etkileşim kurmak için sıkça coğrafi konum tabanlı hizmetlere ihtiyaç duyar. Bu bağlamda, Google Haritalar API’si, dünya üzerindeki herhangi bir konumu görselleştirmek, yol tarifleri sunmak, ilgi çekici yerleri bulmak ve çok daha fazlasını yapmak için güçlü ve kapsamlı bir araç seti sunar. React ise, bileşen tabanlı yapısı, sanal DOM’u ve deklaratif programlama yaklaşımı sayesinde dinamik ve etkileşimli kullanıcı arayüzleri oluşturmak için popüler bir JavaScript kütüphanesidir. React’in modüler yapısı, Google Haritalar API’sinin karmaşık özelliklerini yönetilebilir ve yeniden kullanılabilir bileşenlere ayırmayı kolaylaştırır. Bu iki teknolojinin birleşimi, geliştiricilere hem performanslı hem de zengin özelliklere sahip harita tabanlı uygulamalar oluşturma imkanı sunar.

React uygulamalarına Google Haritalar entegrasyonu, harita bileşenlerinin uygulamanın geri kalanıyla sorunsuz bir şekilde etkileşim kurmasını sağlar. Örneğin, bir kullanıcının konumunu gösteren bir harita, aynı zamanda belirli bir bölgedeki işletmeleri listeleyen bir yan panel ile senkronize edilebilir. Bu entegrasyon, emlak uygulamalarından seyahat planlayıcılara, teslimat hizmetlerinden etkinlik buluculara kadar geniş bir yelpazedeki uygulamalar için temel bir gerekliliktir. Bu makale, React projelerinize Google Haritalar API’sini nasıl entegre edeceğinizi adım adım açıklayacak, farklı yaklaşımları inceleyecek ve en iyi uygulamaları sunacaktır.

Ön Hazırlıklar: Google Cloud Platform ve API Anahtarı Oluşturma

Google Haritalar API’sini kullanmaya başlamadan önce, Google Cloud Platform (GCP) üzerinde bazı temel ayarlamaları yapmanız gerekmektedir. Bu adımlar, API’ye erişim izni almak ve kullanımınızı yönetmek için kritik öneme sahiptir.

Google Cloud Projesi Oluşturma

İlk olarak, Google Cloud Console’a (console.cloud.google.com) giriş yapmanız ve yeni bir proje oluşturmanız gerekmektedir. Eğer mevcut bir projeniz varsa onu da kullanabilirsiniz. Yeni proje oluşturmak için:
1. GCP konsolunda, sayfanın üst kısmındaki proje seçicisinden “Yeni Proje” butonuna tıklayın.
2. Projenize anlamlı bir ad verin (örneğin, “React Harita Uygulaması”) ve bir kuruluş seçin (isteğe bağlı).
3. “Oluştur” butonuna tıklayın. Projenizin oluşturulması birkaç dakika sürebilir.

Gerekli API’leri Etkinleştirme

Projenizi oluşturduktan sonra, Google Haritalar API’sinin hangi hizmetlerini kullanacağınıza karar vermeniz ve bu hizmetleri projeniz için etkinleştirmeniz gerekir. En yaygın kullanılan API’ler şunlardır:
* Maps JavaScript API: Web tarayıcılarında dinamik haritalar görüntülemek ve harita üzerinde etkileşim kurmak için temel API’dir.
* Geocoding API: Adresleri coğrafi koordinatlara (enlem/boylam) ve tersini dönüştürmek için kullanılır.
* Places API: Belirli bir konumdaki ilgi çekici yerleri (işletmeler, restoranlar vb.) aramak ve detaylı bilgi almak için kullanılır. Otomatik tamamlama (autocomplete) özellikleri de bu API üzerinden sağlanır.
* Directions API: İki veya daha fazla konum arasında yol tarifleri oluşturmak için kullanılır.

API’leri etkinleştirmek için:
1. GCP konsolunda, sol menüden “API’ler ve Hizmetler” > “Kitaplık” seçeneğine gidin.
2. Arama çubuğunu kullanarak yukarıda belirtilen API’leri arayın (örneğin, “Maps JavaScript API”).
3. Her bir API’nin sayfasına giderek “Etkinleştir” butonuna tıklayın.

API Anahtarı Oluşturma ve Kısıtlama

API’leri etkinleştirdikten sonra, uygulamanızın bu API’lere erişebilmesi için bir API anahtarı oluşturmanız gerekir. Bu anahtar, uygulamanızın kimliğini doğrular ve API kullanımınızı takip etmenizi sağlar.

API anahtarı oluşturmak için:
1. GCP konsolunda, sol menüden “API’ler ve Hizmetler” > “Kimlik Bilgileri” seçeneğine gidin.
2. “Kimlik Bilgileri Oluştur” butonuna tıklayın ve açılır menüden “API anahtarı”nı seçin.
3. API anahtarınız oluşturulacak ve size gösterilecektir. Bu anahtarı kopyalayın.

Güvenlik Notu: API anahtarınızı herkesle paylaşmamalısınız. Özellikle client-side uygulamalarda kullanıldığında, API anahtarınızı kısıtlamak, yetkisiz kullanımı önlemek için hayati önem taşır.
API anahtarınızı kısıtlamak için:
1. “Kimlik Bilgileri” sayfasında, yeni oluşturduğunuz API anahtarının yanındaki düzenleme (kalem) simgesine tıklayın.
2. “Uygulama kısıtlamaları” bölümünde “HTTP yönlendiriciler (web siteleri)” seçeneğini işaretleyin.
3. “Web sitesi kısıtlamaları” altında, uygulamanızın çalıştığı alan adlarını ekleyin (örneğin, .yourdomain.com/ veya geliştirme ortamı için http://localhost:3000/*).
4. “API kısıtlamaları” bölümünde “Anahtarı kısıtla” seçeneğini işaretleyin ve sadece uygulamanızın kullanacağı API’leri seçin (örneğin, Maps JavaScript API).
5. Değişiklikleri kaydetmek için “Kaydet” butonuna tıklayın.

Bu adımları tamamladıktan sonra, React uygulamanızda Google Haritalar API’sini kullanmaya hazırsınız.

React Uygulamasında Temel Kurulum

Google Haritalar API’sini React uygulamanıza entegre etmek için öncelikle temel bir React projesi oluşturmanız ve gerekli kütüphaneleri yüklemeniz gerekmektedir.

Yeni Bir React Projesi Oluşturma

Eğer mevcut bir React projeniz yoksa, Create React App veya Vite gibi araçlarla hızlıca yeni bir proje oluşturabilirsiniz:

npx create-react-app my-map-app
cd my-map-app

Veya Vite ile:

npm create vite@latest my-map-app -- --template react

cd my-map-app

npm install

Gerekli Paketlerin Kurulumu

React uygulamalarında Google Haritalar API’sini entegre etmek için birkaç farklı kütüphane mevcuttur. Bu makalede en popüler ve esnek kütüphanelerden ikisi olan @react-google-maps/api ve google-map-react üzerinde duracağız.

1. @react-google-maps/api Kütüphanesini Kurulumu:
Bu kütüphane, Google Maps JavaScript API’sinin React’e özgü bir sarmalayıcısıdır (wrapper). Google’ın kendi API’sini React bileşenleri olarak kullanmanızı sağlar ve en güncel özelliklere erişim sunar.

npm install @react-google-maps/api

veya

yarn add @react-google-maps/api

2. google-map-react Kütüphanesini Kurulumu (Alternatif):
Bu kütüphane, daha çok özel işaretçiler ve harita üzerinde tamamen özelleştirilmiş bileşenler oluşturmak istediğinizde kullanışlıdır. Kendi DOM yapısını kullanarak harita üzerinde React bileşenleri render etmenizi sağlar.

npm install google-map-react

veya

yarn add google-map-react

Bu makalede öncelikle @react-google-maps/api kütüphanesini kullanarak entegrasyonu detaylı bir şekilde inceleyeceğiz, çünkü Google’ın kendi API’siyle daha doğrudan bir etkileşim sunar ve genellikle daha güncel kalır. Ardından google-map-react kütüphanesine de kısaca değineceğiz.

@react-google-maps/api Kütüphanesini Kullanarak Entegrasyon

@react-google-maps/api kütüphanesi, Google Maps JavaScript API’sini React bileşenleri olarak sarmalar. Bu, harita ve üzerindeki öğeleri React’in deklaratif yapısıyla yönetmeyi kolaylaştırır.

LoadScript Bileşeni ile API Yükleme

Google Haritalar API’si, harita bileşenleri render edilmeden önce yüklenmelidir. LoadScript bileşeni bu işlemi sizin için yönetir. API anahtarınızı ve gerekli kütüphaneleri (örneğin places, geometry) bu bileşene iletirsiniz.

import React from 'react';
import { GoogleMap, LoadScript } from '@react-google-maps/api';

const containerStyle = {
  width: '100%',
  height: '400px'
};

const center = {
  lat: -3.745,
  lng: -38.523
};

function MyMapComponent() {
  const libraries = ['places']; // İhtiyaç duyduğunuz kütüphaneleri buraya ekleyin

  return (
    
      
        { / Harita üzerindeki diğer bileşenler buraya gelecek / }
      
    
  );
}

export default MyMapComponent;

LoadScript bileşeni, API yüklendiğinde isLoaded durumunu günceller. Haritanızı bu durum true olduğunda render etmek, hata oluşmasını engeller. Genellikle GoogleMap bileşeni LoadScript‘in çocuk bileşeni olarak kullanıldığında bu durum otomatik olarak yönetilir.

GoogleMap Bileşeni ile Harita Oluşturma

GoogleMap bileşeni, haritanın kendisini render etmek için kullanılır. Temel olarak mapContainerStyle (haritanın boyutları), center (haritanın başlangıç merkezi koordinatları) ve zoom (başlangıç yakınlaştırma seviyesi) gibi prop’lar alır.

// Yukarıdaki örnekteki gibi MyMapComponent içinde

  {/ Diğer bileşenler /}

Harita Özelliklerini Yapılandırma (Merkez, Yakınlaştırma Seviyesi, Stiller)

GoogleMap bileşeni, haritanın görünümünü ve davranışını özelleştirmek için birçok prop sunar:
* options: Harita kontrolleri (yakınlaştırma, pan, sokak görünümü vb.), harita türü, stil gibi gelişmiş seçenekleri ayarlamak için kullanılır.
* mapTypeId: Haritanın türünü belirler (örneğin, google.maps.MapTypeId.ROADMAP, SATELLITE, HYBRID, TERRAIN).
* onLoad: Harita yüklendiğinde tetiklenen bir callback fonksiyonu. Harita nesnesine erişmek için kullanışlıdır.
* onUnmount: Harita bileşeni DOM’dan kaldırıldığında tetiklenen bir callback. Bellek sızıntılarını önlemek için harita nesnesini temizlemek için kullanılabilir.

Örnek: Harita kontrollerini gizleme ve belirli bir harita türü ayarlama.

const mapOptions = {
  zoomControl: false,
  mapTypeControl: false,
  scaleControl: false,
  streetViewControl: false,
  rotateControl: false,
  fullscreenControl: false,
  mapTypeId: 'satellite' // Uydu görünümü
};

function MyMapComponent() {
  const [map, setMap] = React.useState(null);

  const onLoad = React.useCallback(function callback(map) {
    const bounds = new window.google.maps.LatLngBounds(center);
    map.fitBounds(bounds); // Haritayı başlangıç merkezine göre sığdır
    setMap(map);
  }, []);

  const onUnmount = React.useCallback(function callback(map) {
    setMap(null);
  }, []);

  return (
    
      
        {/ Diğer bileşenler /}
      
    
  );
}

İşaretçiler (Markers) Ekleme

Harita üzerinde belirli noktaları işaretlemek için Marker bileşeni kullanılır. position prop’u ile işaretçinin koordinatlarını belirtirsiniz.

import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';

const markers = [
  { lat: -3.745, lng: -38.523, title: 'Konum A' },
  { lat: -3.750, lng: -38.530, title: 'Konum B' }
];

function MyMapComponent() {
  // ... (önceki kodlar)

  return (
    
      
        {markers.map((marker, index) => (
          
    
  );
}

Marker bileşenine onClick gibi olay dinleyicileri de ekleyebilirsiniz. Ayrıca icon prop’u ile özel işaretçi simgeleri de kullanabilirsiniz.

Bilgi Pencereleri (InfoWindows) Kullanımı

İşaretçilere tıklandığında veya fare üzerine gelindiğinde detaylı bilgi göstermek için InfoWindow bileşeni kullanılır. Genellikle bir işaretçiye bağlı olarak açılır ve kapanır.

import { GoogleMap, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';

function MyMapComponent() {
  const [activeMarker, setActiveMarker] = React.useState(null);

  const handleActiveMarker = (marker) => {
    if (marker === activeMarker) {
      return;
    }
    setActiveMarker(marker);
  };

  return (
    
      
        {markers.map(({ lat, lng, title }, index) => (
          
        ))}
      
    
  );
}

InfoWindow bileşeni, Marker bileşeninin çocuk öğesi olarak veya doğrudan GoogleMap bileşeninin çocuk öğesi olarak kullanılabilir. onCloseClick prop’u ile pencerenin kapatıldığında yapılacak işlemleri tanımlayabilirsiniz.

Harita Olaylarını Dinleme (Tıklama, Sürükleme vb.)

GoogleMap ve diğer harita bileşenleri, çeşitli olay dinleyicilerini prop olarak kabul eder. Bu, kullanıcı etkileşimlerine tepki vermenizi sağlar.

* onClick: Haritaya tıklandığında.
* onDragEnd: Harita sürüklendikten sonra bırakıldığında.
* onZoomChanged: Yakınlaştırma seviyesi değiştiğinde.
* onBoundsChanged: Haritanın görünür alanı değiştiğinde.

function MyMapComponent() {
  const onMapClick = React.useCallback((event) => {
    console.log('Haritaya tıklandı:', event.latLng.lat(), event.latLng.lng());
  }, []);

  const onMapDragEnd = React.useCallback(() => {
    console.log('Harita sürüklendi.');
  }, []);

  return (
    
      
        {/ ... /}
      
    
  );
}

Çizimler ve Katmanlar (Polylines, Polygons, Circles)

Harita üzerinde çizgiler, çokgenler veya daireler çizmek için Polyline, Polygon ve Circle bileşenlerini kullanabilirsiniz. Bu bileşenler, genellikle bir dizi koordinat (path prop’u) ve stil seçenekleri (options prop’u) alır.

import { GoogleMap, LoadScript, Polyline, Polygon, Circle } from '@react-google-maps/api';

const polylinePath = [
  { lat: -3.745, lng: -38.523 },
  { lat: -3.730, lng: -38.540 },
  { lat: -3.720, lng: -38.500 }
];

const polygonPath = [
  { lat: -3.760, lng: -38.560 },
  { lat: -3.770, lng: -38.570 },
  { lat: -3.780, lng: -38.550 },
  { lat: -3.760, lng: -38.560 }
];

const circleOptions = {
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000',
  fillOpacity: 0.35,
  clickable: false,
  draggable: false,
  editable: false,
  visible: true,
  radius: 5000, // metre cinsinden
  zIndex: 1
};

function MyMapComponent() {
  return (
    
      
        
        
        
      
    
  );
}

Farklı Harita Türleri (Uydu, Arazi)

GoogleMap bileşeninin mapTypeId prop’unu kullanarak harita türünü kolayca değiştirebilirsiniz.
* roadmap: Varsayılan yol haritası görünümü.
* satellite: Uydu görüntüleri.
* hybrid: Uydu görüntüleri ve yol haritası etiketlerinin birleşimi.
* terrain: Arazi ve yükseklik bilgileri içeren fiziksel harita.

// mapTypeId: 'satellite' veya 'terrain' olarak ayarlayın

  {/ ... /}

google-map-react Kütüphanesini Kullanarak Entegrasyon (Alternatif Yaklaşım)

google-map-react kütüphanesi, @react-google-maps/api‘den farklı bir yaklaşıma sahiptir. Harita üzerinde özel işaretçiler veya diğer React bileşenlerini render etmek için daha esnek bir yol sunar. Google Maps API’sini doğrudan DOM’a gömmek yerine, haritayı bir React bileşeni olarak sarar ve harita üzerinde render edilecek çocuk bileşenleri için bir Provider görevi görür.

Kurulum ve Temel Kullanım

Öncelikle kütüphaneyi kurun:

npm install google-map-react

veya

yarn add google-map-react

Ardından temel harita bileşeninizi oluşturabilirsiniz:

import React from 'react';
import GoogleMapReact from 'google-map-react';

const AnyReactComponent = ({ text }) => 
{text}
; // Özel işaretçi bileşeni function MyGoogleMapReactComponent() { const defaultProps = { center: { lat: 59.95, lng: 30.33 }, zoom: 11 }; return (
console.log('Google Maps API yüklendi', map, maps)} >
); } export default MyGoogleMapReactComponent;

Burada AnyReactComponent adında basit bir div oluşturduk. GoogleMapReact bileşeninin çocukları olarak yerleştirilen bu bileşenler, lat ve lng prop’ları sayesinde harita üzerinde belirtilen koordinatlarda konumlandırılır.

Özel İşaretçiler Oluşturma

google-map-react‘in en güçlü yanlarından biri, harita üzerindeki işaretçileri tamamen React bileşenleri olarak tanımlayabilmenizdir. Bu, CSS ile tam kontrol ve React bileşenlerinin tüm yaşam döngüsü özelliklerinden faydalanma anlamına gelir.

const CustomMarker = ({ text, onClick }) => (
  
{text}
); // ... MyGoogleMapReactComponent içinde alert('Evime hoş geldiniz!')} />

google-map-react ve Performans

google-map-react, harita üzerindeki özel bileşenleri render ederken sanal DOM’u kullanır. Bu, çok sayıda dinamik işaretçiniz olduğunda performansı artırabilir. Ancak, çok sayıda karmaşık React bileşenini işaretçi olarak kullanmak yine de performans sorunlarına yol açabilir. Bu gibi durumlarda, işaretçi bileşenlerinizi React.memo ile sarmalamak veya shouldComponentUpdate yaşam döngüsü metodunu kullanmak faydalı olabilir.

Gelişmiş Konular ve Optimizasyon

Google Haritalar API’si, sadece harita göstermekten çok daha fazlasını sunar. Uygulamanızın ihtiyaçlarına göre çeşitli gelişmiş özelliklerini entegre edebilirsiniz.

Geocoding ve Reverse Geocoding

* Geocoding: Bir adres dizesini (örneğin, “1600 Amphitheatre Parkway, Mountain View, CA”) coğrafi koordinatlara (enlem ve boylam) dönüştürme işlemidir.
* Reverse Geocoding: Coğrafi koordinatları (enlem ve boylam) okunabilir bir adrese dönüştürme işlemidir.

Bu işlemler için Geocoding API kullanılır. @react-google-maps/api kütüphanesinde useJsApiLoader hook’u ve ardından new window.google.maps.Geocoder() kullanarak bu işlemleri gerçekleştirebilirsiniz.

import React, { useState, useCallback } from 'react';
import { GoogleMap, LoadScript } from '@react-google-maps/api';

function GeocodingExample() {
  const [address, setAddress] = useState('');
  const [coordinates, setCoordinates] = useState(null);
  const [map, setMap] = useState(null);

  const onMapLoad = useCallback((mapInstance) => {
    setMap(mapInstance);
  }, []);

  const handleGeocode = () => {
    if (!window.google || !map) return;

    const geocoder = new window.google.maps.Geocoder();
    geocoder.geocode({ address: address }, (results, status) => {
      if (status === 'OK' && results[0]) {
        const { lat, lng } = results[0].geometry.location;
        setCoordinates({ lat: lat(), lng: lng() });
        map.setCenter({ lat: lat(), lng: lng() });
        map.setZoom(15);
      } else {
        alert('Geocoding başarısız: ' + status);
      }
    });
  };

  const handleReverseGeocode = () => {
    if (!window.google || !map || !coordinates) return;

    const geocoder = new window.google.maps.Geocoder();
    geocoder.geocode({ location: coordinates }, (results, status) => {
      if (status === 'OK' && results[0]) {
        alert('Ters Geocoding Sonucu: ' + results[0].formatted_address);
      } else {
        alert('Ters Geocoding başarısız: ' + status);
      }
    });
  };

  return (
    
      
        {coordinates && }
      
       setAddress(e.target.value)}
        placeholder="Adres girin"
      />
      
      {coordinates && }
    
  );
}

Places API ve Otomatik Tamamlama (Autocomplete)

Places API, belirli bir konumdaki ilgi çekici yerleri (işletmeler, restoranlar, turistik yerler vb.) aramanızı ve detaylı bilgi almanızı sağlar. En popüler özelliklerinden biri, kullanıcı bir arama kutusuna yazarken yer isimlerini otomatik olarak tamamlamaktır.

@react-google-maps/api kütüphanesi, StandaloneSearchBox veya Autocomplete gibi bileşenleri doğrudan sağlamaz, ancak Google Maps JavaScript API’sinin google.maps.places.Autocomplete sınıfını kullanabilirsiniz.

import React, { useRef, useEffect, useState } from 'react';
import { LoadScript } from '@react-google-maps/api';

const libraries = ['places'];

function PlacesAutocomplete() {
  const [place, setPlace] = useState(null);
  const inputRef = useRef(null);

  useEffect(() => {
    if (!window.google || !inputRef.current) return;

    const autocomplete = new window.google.maps.places.Autocomplete(
      inputRef.current,
      { types: ['geocode', 'establishment'] } // Arama türlerini kısıtla
    );

    autocomplete.addListener('place_changed', () => {
      const selectedPlace = autocomplete.getPlace();
      setPlace(selectedPlace);
      console.log('Seçilen Yer:', selectedPlace);
    });

    return () => {
      // Bileşen kaldırıldığında dinleyiciyi temizle
      window.google.maps.event.clearInstanceListeners(autocomplete);
    };
  }, []);

  return (
    
      
{place && (

Seçilen Yer Bilgileri:

Adı: {place.name}

Adres: {place.formatted_address}

Lat: {place.geometry.location.lat()}, Lng: {place.geometry.location.lng()}

)}
); }

Yol Tarifi Hizmetleri (Directions Service)

İki veya daha fazla konum arasında yol tarifleri oluşturmak için Directions Service ve Directions Renderer kullanılır.

import React, { useState, useEffect } from 'react';
import { GoogleMap, LoadScript, DirectionsRenderer } from '@react-google-maps/api';

const center = { lat: 41.0082, lng: 28.9784 }; // İstanbul

function DirectionsExample() {
  const [directionsResponse, setDirectionsResponse] = useState(null);
  const origin = 'Sultanahmet, Istanbul';
  const destination = 'Taksim Square, Istanbul';

  useEffect(() => {
    if (!window.google) return;

    const directionsService = new window.google.maps.DirectionsService();
    directionsService.route(
      {
        origin: origin,
        destination: destination,
        travelMode: window.google.maps.TravelMode.DRIVING, // Sürüş, Yürüme, Bisiklet, Toplu Taşıma
      },
      (result, status) => {
        if (status === 'OK') {
          setDirectionsResponse(result);
        } else {
          console.error(Directions request failed due to ${status});
        }
      }
    );
  }, []);

  return (
    
      
        {directionsResponse && (
          
        )}
      
    
  );
}

Harita Stilleri ve Temaları

Google Haritalar, haritanın görsel görünümünü tamamen özelleştirmenize olanak tanır. JSON tabanlı stil nesneleri kullanarak yolların rengini, ilgi çekici yerlerin görünürlüğünü, su alanlarının stilini ve daha fazlasını değiştirebilirsiniz. Stil nesnelerini GoogleMap bileşeninin options prop’u içindeki styles özelliğine iletirsiniz.

const customMapStyles = [
  {
    featureType: 'poi', // İlgi çekici yerleri hedefle
    stylers: [{ visibility: 'off' }] // Gizle
  },
  {
    featureType: 'road', // Yolları hedefle
    elementType: 'geometry',
    stylers: [{ color: '#aaaaaa' }] // Gri yap
  },
  {
    featureType: 'water', // Su alanlarını hedefle
    stylers: [{ color: '#c9e0ed' }] // Açık mavi yap
  }
  // Daha fazla stil kuralı eklenebilir
];

function StyledMapComponent() {
  return (
    
      
        {/ ... /}
      
    
  );
}

Harita stilleri oluşturmak için Google’ın “Styled Maps” sihirbazını kullanabilirsiniz: [https://mapstyle.withgoogle.com/](https://mapstyle.withgoogle.com/)

Performans İpuçları (Lazy Loading, Memoization)

Büyük React uygulamalarında harita entegrasyonu performansı etkileyebilir.
* Lazy Loading (Tembel Yükleme): Harita bileşenini sadece ihtiyaç duyulduğunda yüklemek için React.lazy ve Suspense kullanın. Bu, başlangıç yükleme süresini azaltır.

import React, { Suspense, lazy } from 'react';

    const LazyMap = lazy(() => import('./MyMapComponent')); // Harita bileşeninizin yolu

    function App() {
      return (
        
Harita yükleniyor...
}>
); }

* Memoization: React.memo, useCallback ve useMemo hook’larını kullanarak bileşenlerin ve callback fonksiyonlarının gereksiz yere yeniden render edilmesini veya oluşturulmasını engelleyin. Özellikle harita seçenekleri, merkez koordinatları veya marker listeleri gibi değişmeyen veriler için bu önemlidir.

// center ve options gibi nesneleri React.useMemo ile sarmalayın
    const center = React.useMemo(() => ({ lat: -3.745, lng: -38.523 }), []);
    const mapOptions = React.useMemo(() => ({
      zoomControl: true,
      mapTypeControl: false,
      // ... diğer seçenekler
    }), []);

    // Callback fonksiyonlarını React.useCallback ile sarmalayın
    const onMapClick = React.useCallback((event) => {
      console.log('Haritaya tıklandı:', event.latLng.lat(), event.latLng.lng());
    }, []);

    // Eğer kendi özel marker bileşenlerinizi kullanıyorsanız, onları React.memo ile sarmalayın.
    const MemoizedMarker = React.memo(CustomMarker);

Güvenlik İpuçları (API Anahtarı Kısıtlamaları)

Daha önce de belirtildiği gibi, API anahtarınızı kısıtlamak çok önemlidir.
* HTTP Yönlendirici Kısıtlamaları: API anahtarınızı sadece uygulamanızın çalıştığı alan adlarına (domain) kısıtlayın. Geliştirme ortamı için localhost adreslerini eklemeyi unutmayın.
* API Kısıtlamaları: Anahtarı sadece kullanacağınız Google Haritalar API’leri ile kısıtlayın. Bu, bir anahtarın çalınması durumunda potansiyel zararı en aza indirir.
* Sunucu Tarafı Anahtarlar: Eğer sunucu tarafında (örneğin Node.js ile) Google Haritalar API’lerini kullanıyorsanız (örneğin sunucu tarafında Geocoding yapmak), bu anahtarları ortam değişkenlerinde saklayın ve asla client-side kodunuzda açıkça göstermeyin. Bu anahtarlar için IP adresi kısıtlamaları kullanın.

Sıkça Sorulan Sorular ve Hata Ayıklama

* Harita görünmüyor, boş bir div var:
* API anahtarınızın doğru olduğundan ve kısıtlamalarının (alan adı, API’ler) doğru yapılandırıldığından emin olun.
* mapContainerStyle prop’unda haritanın genişlik ve yüksekliğinin ayarlandığından emin olun.
* Tarayıcınızın konsolunu kontrol edin. Genellikle Google Maps API’sinden gelen hatalar burada görünür (örneğin, “Google Maps API error: ApiNotActivatedMapError”).
* İşaretçiler veya diğer öğeler görünmüyor:
* Koordinatların doğru olduğundan ve haritanın yakınlaştırma seviyesinin (zoom) bu koordinatları kapsayacak kadar uygun olduğundan emin olun.
* LoadScript bileşenine gerekli libraries‘in (örneğin places) eklendiğinden emin olun.
* Performans sorunları yaşıyorum:
* React.lazy ve Suspense kullanarak harita bileşenini tembel yükleyin.
* React.memo, useCallback, useMemo kullanarak gereksiz yeniden renderları ve obje oluşturmalarını önleyin.
* Çok fazla işaretçi varsa, kümeleme (marker clustering) kütüphanelerini (örneğin @react-google-maps/api için @googlemaps/markerclustererplus) kullanmayı düşünün.
* API anahtarımı nasıl güvende tutarım?
* API anahtarınızı her zaman kısıtlayın (alan adı ve API kısıtlamaları).
* Asla Git gibi sürüm kontrol sistemlerine açıkça göndermeyin. .env dosyaları kullanarak ortam değişkenleri aracılığıyla yönetin.

Sonuç

React uygulamalarınıza Google Haritalar API’sini entegre etmek, kullanıcılarınıza zengin ve etkileşimli coğrafi konum tabanlı deneyimler sunmanın güçlü bir yoludur. Bu makalede, Google Cloud Platform’da ön hazırlıklardan başlayarak, @react-google-maps/api ve google-map-react gibi popüler kütüphaneler aracılığıyla temel harita oluşturma, işaretçiler, bilgi pencereleri ekleme ve çeşitli gelişmiş API hizmetlerini kullanma adımlarını ayrıntılı olarak inceledik. Ayrıca, harita stilini özelleştirme, performans optimizasyonu ve güvenlik ipuçları gibi önemli konulara da değindik.

Doğru kütüphaneyi seçmek ve en iyi uygulamaları takip etmek, uygulamanızın hem işlevsel hem de performanslı olmasını sağlayacaktır. Google Haritalar API’sinin geniş özellik setini React’in deklaratif gücüyle birleştirerek, kullanıcılarınızın seveceği etkileyici harita tabanlı uygulamalar geliştirebilirsiniz. Uygulamanızın ihtiyaçlarına en uygun entegrasyon yöntemini seçerek ve sunduğumuz örnek kodları temel alarak kendi harita bileşenlerinizi oluşturmaya başlayabilirsiniz. Unutmayın, Google Haritalar API’sinin belgelemeleri (developers.google.com/maps) ve seçtiğiniz React kütüphanesinin belgeleri, daha derinlemesine bilgi ve gelişmiş kullanım senaryoları için en iyi kaynaklardır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık