Google, Maps Platform'unu yıllardır sıkılaştırıyor; fakat Mayıs 2026'daki kullanımdan kaldırma dalgası şimdiye kadarki en kritik değişiklik. Maps JavaScript API'den dört yaygın özellik kaldırılıyor: Heatmap Layer, Drawing Library, DirectionsService ve DistanceMatrixService. Uygulamanız bunlardan herhangi birine bağımlıysa, kodunuz çalışmayı durdurmadan önce migrate etmek için sadece birkaç haftanız var.
Bu, eski endpoint'lerin yıllarca ayakta kaldığı yumuşak bir kullanımdan kaldırma değil. Google kesin kaldırma tarihleri belirledi ve geliştirici konsolu zaten uyarılar gösteriyor. Bu rehber tam olarak neyin değiştiğini, Google'ın neden bu değişiklikleri yaptığını ve her servisi çalışan kod örnekleriyle nasıl migrate edeceğinizi ele alıyor. Hazır bir alternatif arıyorsanız, MapAtlas API'lerinin her kullanımdan kaldırılan Google servisine nasıl karşılık geldiğini de gösteriyoruz.
Ne Zaman Ne Kullanımdan Kaldırılıyor
Etkilenen servislerin tam zaman çizelgesi:
| Servis | Kullanımdan Kaldırıldı | Kaldırılma Tarihi | Yedek (Google) |
|---|---|---|---|
| Heatmap Layer (Maps JS API) | Ağustos 2025 | Mayıs 2026 | Maps Datasets API + deck.gl |
| Drawing Library (Maps JS API) | Mayıs 2025 | Mayıs 2026 | Extended Component Library |
| DirectionsService (Maps JS API) | 25 Şubat 2026 | Mayıs 2026 | Routes API (REST) |
| DistanceMatrixService (Maps JS API) | 25 Şubat 2026 | Mayıs 2026 | Routes API (REST) |
Kritik detay: Google, yönlendirme ve mesafe hesaplamalarını tamamen kaldırmıyor. Geliştiricilerin on yılı aşkın süredir kullandığı istemci taraflı JavaScript sınıflarını kaldırıyor ve daha yeni Routes API'ye, yani sunucu taraflı bir REST endpoint'ine geçişi zorluyor. Bu basit bir versiyon güncellemesi değil; yönlendirme mantığını tarayıcıdan backend'inize taşıyan mimari bir değişiklik.
Ne Bozulacak
Kod tabanınız aşağıdakilerden herhangi birini içeriyorsa, kaldırılma tarihinden sonra çalışmayı durduracak:
// All of these will stop working in May 2026
const directionsService = new google.maps.DirectionsService();
const distanceMatrixService = new google.maps.DistanceMatrixService();
const heatmap = new google.maps.visualization.HeatmapLayer({ data: points });
const drawingManager = new google.maps.drawing.DrawingManager();
Kaldırılmanın ardından bu constructor'lar hata fırlatacak. Fallback davranışı yok, zarif bozulma yok. Harita yüklenecek ama bu sınıflara bağımlı her özellik tamamen çalışmayacak.
Google Bu Değişiklikleri Neden Zorluyor
Google'ın resmi gerekçesi performans ve modernleşme. DirectionsService ve DistanceMatrixService'in yerini alan Routes API, eski JavaScript sınıflarının karşılayamadığı daha yeni özellikleri destekliyor: çevre dostu yönlendirme, iki tekerlekli araç yönlendirmesi ve geçiş ücreti tahmini.
Asıl itici güç fiyat kontrolü. Yönlendirmeyi sunucu taraflı REST API'ye taşıyarak Google, daha ayrıntılı faturalandırma ve kullanım takibi elde ediyor. JavaScript DirectionsService, Google'ın doğru ölçmesini zorlaştıran istemci taraflı toplu işleme kalıplarına izin veriyordu. Routes API, her isteğin ölçülen bir endpoint üzerinden geçmesini sağlıyor.
Heatmap Layer ve Drawing Library için ise Google, geliştiricileri Extended Component Library'ye ve deck.gl gibi üçüncü taraf görselleştirme araçlarına yönlendiriyor. Bu, daha geniş bir örüntünün parçası: Google, temel harita tile renderlamasını bünyesinde tutuyor, geri kalanı ise ekosisteme bırakıyor.
Geliştiriciler açısından pratik etki şu anlama geliyor: daha fazla backend altyapısı, yönetilecek daha fazla API anahtarı ve çoğu durumda yeni fiyatlandırma katmanlarında istek başına daha yüksek maliyetler.
Migrasyon Kontrol Listesi
Herhangi bir migrasyon kodu yazmadan önce şu kontrol listesini tamamlayın:
1. Kod Tabanını Denetleyin
Kod tabanınızda kullanımdan kaldırılan sınıflara yapılan referansları arayın:
# Find all files using deprecated Google Maps services
grep -rn "DirectionsService\|DistanceMatrixService\|HeatmapLayer\|visualization.HeatmapLayer\|drawing.DrawingManager\|DrawingManager" \
--include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" src/
Bu servisleri kullanan her dosya ve bileşeni belgeleyin. Çağrıların istemci taraflı (tarayıcı) mı yoksa sunucu taraflı bir bağlamda mı gerçekleştiğini not edin; örneğin Next.js API route'ları gibi.
2. Kullanım Kalıplarınızı Belirleyin
Her kullanım için şunları belgeleyin:
- Kullanılan seyahat modları (driving, walking, cycling, transit)
- Waypoint desteği (basit A'dan B'ye veya çok duraklı rotalar)
- Tüketilen yanıt alanları (mesafe, süre, polyline, adımlar, ücret)
- Hacim (maliyet tahmini için günlük/aylık istek sayısı)
- Gecikme gereksinimleri (kullanıcıya dönük gerçek zamanlı veya toplu işleme)
3. Migrasyon Hedefinizi Seçin
İki seçeneğiniz var:
Seçenek A: Google'da kalmak. Kullanımdan kaldırılan JavaScript sınıflarından yeni Google Routes API'ye (REST) geçmek. Bu, backend değişiklikleri, yeni API anahtarı izinleri ve güncellenmiş faturalandırma gerektiriyor.
Seçenek B: Sağlayıcı değiştirmek. Üçüncü taraf bir yönlendirme API'sine geçmek. Entegrasyon kodunu zaten yeniden yazacağınız için, alternatifleri değerlendirmek için doğru zamandır.
4. Paralel Bir Ortam Kurun
Hiçbir zaman yerinde migrate etmeyin. Eski ve yeni uygulamaları geçiş yapmadan önce en az iki hafta boyunca paralel çalıştırın ve doğruluk ile gecikme açısından sonuçları karşılaştırın.
5. Hata İşlemeyi Güncelleyin
Kullanımdan kaldırılan servisler hataları callback fonksiyonları aracılığıyla döndürüyordu. REST API alternatifleri HTTP durum kodları döndürüyor. Hata işleme mantığınızın buna göre değişmesi gerekiyor.
API'den API'ye Değiştirme Kılavuzu
DirectionsService'ten MapAtlas Directions API'ye
Önce (Google, kullanımdan kaldırıldı):
const directionsService = new google.maps.DirectionsService();
directionsService.route(
{
origin: { lat: 52.52, lng: 13.405 },
destination: { lat: 48.8566, lng: 2.3522 },
travelMode: google.maps.TravelMode.DRIVING,
waypoints: [
{ location: { lat: 50.9375, lng: 6.9603 }, stopover: true }
],
},
(result, status) => {
if (status === "OK") {
const route = result.routes[0];
console.log("Distance:", route.legs[0].distance.text);
console.log("Duration:", route.legs[0].duration.text);
}
}
);
Sonra (MapAtlas Directions API):
const response = await fetch(
"https://api.mapatlas.com/v1/directions?" +
new URLSearchParams({
origin: "52.52,13.405",
destination: "48.8566,2.3522",
waypoints: "50.9375,6.9603",
mode: "driving",
key: process.env.MAPATLAS_API_KEY!,
})
);
const data = await response.json();
if (data.status === "OK") {
const leg = data.routes[0].legs[0];
console.log("Distance:", leg.distance.text);
console.log("Duration:", leg.duration.text);
// Polyline for map rendering
const polyline = data.routes[0].overview_polyline;
}
Temel farklar:
- JavaScript sınıfı yerine REST endpoint. Çağrılar tarayıcıdan değil, backend'inizden yapılıyor.
- Daha basit kimlik doğrulama. Query string veya header'da tek bir API anahtarı.
- Aynı yanıt yapısı. Routes, legs, distance, duration ve polyline hepsi mevcut.
DistanceMatrixService'ten MapAtlas Matrix API'ye
Önce (Google, kullanımdan kaldırıldı):
const service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [
{ lat: 52.52, lng: 13.405 },
{ lat: 48.1351, lng: 11.582 },
],
destinations: [
{ lat: 48.8566, lng: 2.3522 },
{ lat: 51.5074, lng: -0.1278 },
],
travelMode: google.maps.TravelMode.DRIVING,
},
(response, status) => {
if (status === "OK") {
response.rows.forEach((row, i) => {
row.elements.forEach((element, j) => {
console.log(`Origin ${i} -> Dest ${j}:`,
element.distance.text, element.duration.text);
});
});
}
}
);
Sonra (MapAtlas Matrix API):
const response = await fetch("https://api.mapatlas.com/v1/matrix", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.MAPATLAS_API_KEY}`,
},
body: JSON.stringify({
origins: [
{ lat: 52.52, lng: 13.405 },
{ lat: 48.1351, lng: 11.582 },
],
destinations: [
{ lat: 48.8566, lng: 2.3522 },
{ lat: 51.5074, lng: -0.1278 },
],
mode: "driving",
}),
});
const data = await response.json();
data.rows.forEach((row: any, i: number) => {
row.elements.forEach((element: any, j: number) => {
console.log(`Origin ${i} -> Dest ${j}:`,
element.distance.text, element.duration.text);
});
});
Yanıt yapısı neredeyse aynı. Temel değişiklik, callback tabanlı tarayıcı API'sinden promise tabanlı sunucu API'sine geçmek.
Heatmap Layer Değiştirme
Heatmap görselleştirmesi için migrasyon yolu gereksinimlerinize bağlı:
Seçenek 1: MapLibre GL JS ile heatmap layer (open source)
import maplibregl from "maplibre-gl";
const map = new maplibregl.Map({
container: "map",
style: "https://api.mapatlas.com/v1/styles/streets?key=YOUR_KEY",
center: [13.405, 52.52],
zoom: 10,
});
map.on("load", () => {
map.addSource("heat-data", {
type: "geojson",
data: {
type: "FeatureCollection",
features: heatmapPoints.map((point) => ({
type: "Feature",
geometry: { type: "Point", coordinates: [point.lng, point.lat] },
properties: { weight: point.weight },
})),
},
});
map.addLayer({
id: "heatmap-layer",
type: "heatmap",
source: "heat-data",
paint: {
"heatmap-weight": ["get", "weight"],
"heatmap-intensity": 1,
"heatmap-radius": 20,
"heatmap-opacity": 0.7,
},
});
});
Bu, heatmap renderlaması üzerinde tam kontrol sağlar ve Google'ın tile sunucularına bağımlı değildir.
Seçenek 2: deck.gl HeatmapLayer (Google'ın kendi tavsiyesi)
import { Deck } from "@deck.gl/core";
import { HeatmapLayer } from "@deck.gl/aggregation-layers";
const heatmapLayer = new HeatmapLayer({
data: heatmapPoints,
getPosition: (d) => [d.lng, d.lat],
getWeight: (d) => d.weight,
radiusPixels: 30,
});
Her iki seçenek de çalışıyor. MapLibre GL JS, MapAtlas tile stilleriyle temiz entegrasyon sağlarken, deck.gl herhangi bir temel haritanın üzerine yerleştirilebilir.
Maliyet Karşılaştırması: Google Routes API ve MapAtlas
Google'ın Routes API'sine geçmek sadece bir kod değişikliği değil. Beraberinde yeni fiyatlandırma getiriyor:
| Servis | Google (legacy, 1.000 başına) | Google Routes API (1.000 başına) | MapAtlas (1.000 başına) |
|---|---|---|---|
| Directions (temel) | $5,00 | $5,00 | $1,50 |
| Directions (gelişmiş, waypoints/trafik) | $10,00 | $10,00 | $2,50 |
| Distance Matrix (element başına) | $5,00 | $5,00 | $1,00 |
| Distance Matrix (gelişmiş) | $10,00 | $10,00 | $2,00 |
| Geocoding | $5,00 | $5,00 | $1,50 |
Ayda 100.000 yönlendirme isteği için:
- Google Routes API: yaklaşık $500-$1.000 (kullanılan özelliklere bağlı)
- MapAtlas Directions API: yaklaşık $150-$250
Yönlendirmeyi geocoding ve mesafe hesaplamalarıyla birleştiren uygulamalarda tasarruf hızla birikir. Ayda 500.000 matrix elementi işleyen bir lojistik platform Google'da yaklaşık $2.500 öderken MapAtlas'ta $500 ödeyecek.
Tam fiyatlandırma detayları için MapAtlas fiyatlandırma sayfasına bakabilirsiniz.
Kod Migrasyon Örnekleri: Tam Önce/Sonra
Bir haritada sürüş yönlerini gösteren React bileşeni için tam migrasyon örneği.
Önce: React'te Google Maps DirectionsService
import { useEffect, useRef } from "react";
function DirectionsMap({ origin, destination }: {
origin: google.maps.LatLngLiteral;
destination: google.maps.LatLngLiteral;
}) {
const mapRef = useRef<HTMLDivElement>(null);
useEffect(() => {
const map = new google.maps.Map(mapRef.current!, {
center: origin,
zoom: 7,
});
const directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
const directionsService = new google.maps.DirectionsService();
directionsService.route(
{
origin,
destination,
travelMode: google.maps.TravelMode.DRIVING,
},
(result, status) => {
if (status === "OK" && result) {
directionsRenderer.setDirections(result);
}
}
);
}, [origin, destination]);
return <div ref={mapRef} style={{ width: "100%", height: "400px" }} />;
}
Sonra: MapLibre GL JS ile MapAtlas Directions API
import { useEffect, useRef } from "react";
import maplibregl from "maplibre-gl";
function DirectionsMap({ origin, destination }: {
origin: { lat: number; lng: number };
destination: { lat: number; lng: number };
}) {
const mapRef = useRef<HTMLDivElement>(null);
useEffect(() => {
const map = new maplibregl.Map({
container: mapRef.current!,
style: "https://api.mapatlas.com/v1/styles/streets?key=YOUR_KEY",
center: [origin.lng, origin.lat],
zoom: 7,
});
map.on("load", async () => {
// Fetch directions from your backend (or directly if CORS allows)
const res = await fetch(
`/api/directions?` +
new URLSearchParams({
origin: `${origin.lat},${origin.lng}`,
destination: `${destination.lat},${destination.lng}`,
mode: "driving",
})
);
const data = await res.json();
if (data.routes?.[0]) {
const coordinates = data.routes[0].geometry.coordinates;
map.addSource("route", {
type: "geojson",
data: {
type: "Feature",
geometry: { type: "LineString", coordinates },
properties: {},
},
});
map.addLayer({
id: "route-line",
type: "line",
source: "route",
paint: {
"line-color": "#4A90D9",
"line-width": 5,
},
});
// Fit map to route bounds
const bounds = coordinates.reduce(
(b: maplibregl.LngLatBounds, coord: [number, number]) =>
b.extend(coord),
new maplibregl.LngLatBounds(coordinates[0], coordinates[0])
);
map.fitBounds(bounds, { padding: 50 });
}
});
return () => map.remove();
}, [origin, destination]);
return <div ref={mapRef} style={{ width: "100%", height: "400px" }} />;
}
Backend API Route (Next.js)
// app/api/directions/route.ts
import { NextRequest, NextResponse } from "next/server";
export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url);
const origin = searchParams.get("origin");
const destination = searchParams.get("destination");
const mode = searchParams.get("mode") || "driving";
const response = await fetch(
`https://api.mapatlas.com/v1/directions?` +
new URLSearchParams({
origin: origin!,
destination: destination!,
mode,
key: process.env.MAPATLAS_API_KEY!,
})
);
const data = await response.json();
return NextResponse.json(data);
}
Bu kalıp, API anahtarınızı sunucuda tutar ve istemciye yalnızca rota geometrisini açıklar.
Son Tarihten Önce Migrasyonunuzu Test Etme
Adım 1: Her İki API'yi Paralel Çalıştırın
Geçiş yapmadan iki hafta önce, her istek için hem eski Google servisini hem de yeni alternatifi çağırın. Her iki yanıtı kaydedin ve karşılaştırın:
async function getDirectionsWithComparison(
origin: string,
destination: string
) {
const [googleResult, mapatResult] = await Promise.all([
fetchGoogleDirections(origin, destination),
fetchMapAtlasDirections(origin, destination),
]);
// Compare key metrics
const distanceDelta = Math.abs(
googleResult.distance - mapatResult.distance
);
const durationDelta = Math.abs(
googleResult.duration - mapatResult.duration
);
console.log({
route: `${origin} -> ${destination}`,
googleDistance: googleResult.distance,
mapatDistance: mapatResult.distance,
distanceDeltaPercent: ((distanceDelta / googleResult.distance) * 100).toFixed(1),
googleDuration: googleResult.duration,
mapatDuration: mapatResult.duration,
durationDeltaPercent: ((durationDelta / googleResult.duration) * 100).toFixed(1),
});
// Use MapAtlas result in production, Google as validation
return mapatResult;
}
Adım 2: Feature Flag'leri Kurun
Uygulamanızın hangi API'yi çağırdığını kontrol etmek için feature flag kullanın. Bu, sorunlarla karşılaşırsanız anında geri dönmenizi sağlar:
const useMapAtlasDirections = process.env.FEATURE_MAPATLAS_DIRECTIONS === "true";
const directions = useMapAtlasDirections
? await fetchMapAtlasDirections(origin, destination)
: await fetchGoogleDirections(origin, destination);
Adım 3: Hata Oranlarını İzleyin
Geçişin ardından şunları izleyin:
- Yeni API'den gelen HTTP 4xx/5xx hata oranları
- Gecikme artışları (yeni sağlayıcının farklı yanıt süreleri olabilir)
- UI'ınızın bağımlı olduğu yanıtlardaki eksik alanlar
- Uç vakalar için rota doğruluğu (feribot rotaları, ücretli yollar, kısıtlı bölgeler)
Adım 4: Yayına Almadan Önce Yük Testi Yapın
Uygulamanız zirve yüklerle başa çıkıyorsa, örneğin sabah dağıtımı sırasındaki lojistik platform gibi, yeni API'yi zirve hacimlerin 2 katıyla yük testine tabi tutun. MapAtlas, üretim faturalandırması olmadan yük testi için sandbox ortamı sunuyor.
Zaman Çizelgesi: Bu Hafta Yapılacaklar
Henüz migrate etmeye başlamadıysanız, öncelik sırası şöyle:
- Bu hafta: Kod tabanını denetleyin. Dört kullanımdan kaldırılan servisin her kullanımını belirleyin.
- 2. Hafta: MapAtlas hesabı açın ve API anahtarları alın. Ücretsiz katman test için 10.000 istek kapsıyor.
- 3. Hafta: En kritik servisiniz için değiştirmeyi uygulayın; genellikle DirectionsService.
- 4. Hafta: Kalan servisleri migrate edin ve paralel testler çalıştırın.
- Mayıs son tarihinden önce: Geçiş yapın, Google API bağımlılıklarını kaldırın, faturalandırmayı güncelleyin.
Migrasyon isteğe bağlı değil. Mayıs 2026'dan sonra kullanımdan kaldırılan sınıflar Maps JavaScript API'den kaldırılacak ve onlara başvuran tüm kodlar çalışma zamanı hatası fırlatacak. Şimdi başlarsanız düzgün test etmek için zamanınız olacak. Son haftaya bırakırsanız baskı altında production'ı yamalarken kendinizi bulacaksınız.
Migrasyon desteği için MapAtlas doğrudan geliştirici yardımı sunuyor. İletişim sayfası üzerinden ulaşabilir ya da gereksinimlere göre yedek API'leri değerlendirmek için API belgelerine bakabilirsiniz.
Sıkça Sorulan Sorular
Google Maps API kullanımdan kaldırmaları tam olarak ne zaman yürürlüğe giriyor?
Heatmap Layer ve Drawing Library sırasıyla Ağustos ve Mayıs 2025'te kullanımdan kaldırıldı; kaldırılma tarihi Mayıs 2026 olarak planlandı. DirectionsService ve DistanceMatrixService 25 Şubat 2026'da kullanımdan kaldırıldı, bunların da hedef kaldırılma tarihi Mayıs 2026. Kaldırma işleminin ardından bu servislere yapılan API çağrıları hata döndürecek.
Mevcut Google Maps JavaScript API anahtarım Mayıs 2026'dan sonra çalışmaya devam eder mi?
API anahtarınız kullanımdan kaldırılmayan servisler için çalışmaya devam edecek. Ancak Maps JavaScript API üzerinden DirectionsService, DistanceMatrixService, Heatmap Layer veya Drawing Library'yi çağıran tüm kodlar çalışmayı durduracak. Bu çağrıları son tarihten önce yedek API'lere migrate etmeniz gerekiyor.
Google Maps Directions API'nin en ucuz alternatifi nedir?
MapAtlas, Google'ın eşdeğerine kıyasla yaklaşık %70 daha ucuza Directions API sunuyor. Ücretsiz katman, migrasyonu geliştirmek ve test etmek için yeterli olan aylık 10.000 istek içeriyor. Diğer alternatifler arasında Mapbox, HERE ve OpenRouteService var; ancak MapAtlas, Google'ınkine en yakın istek/yanıt formatını sunduğundan migrasyon çabasını azaltıyor.
Kademeli olarak migrate edebilir miyim, yoksa her şeyi aynı anda mı değiştirmem gerekiyor?
Kademeli migrasyon mümkün. Her kullanımdan kaldırılan servis bağımsızdır; önce DirectionsService'i, sonra DistanceMatrixService'i, ardından görselleştirme kütüphanelerini değiştirebilirsiniz. Bu yaklaşım önerilen yöntemdir çünkü bir sonrakine geçmeden önce her yedek servisi izole şekilde test etmenize olanak tanır.
MapAtlas, Google DirectionsService ile aynı waypoint ve seyahat modlarını destekliyor mu?
Evet. MapAtlas Directions API, driving, walking ve cycling seyahat modlarını ve ara waypoint'leri destekliyor. İstek formatı biraz farklı (RESTful endpoint vs. JavaScript sınıfı), ancak temel işlevsellik olan seyahat modu seçimiyle çok duraklı yönlendirme eşdeğerdir.

