Coğrafi Kodlama Sırasında Kota Kullanımını Optimize Etme

Coğrafi kodlama, adresleri ("1600 Amphitheatre Parkway, Mountain View, CA") coğrafi koordinatlara (37.423021, -122.083739) dönüştürme işlemidir. Bu koordinatları işaretçi yerleştirmek veya haritayı konumlandırmak için kullanabilirsiniz. Google Haritalar Platformu API'leri, coğrafi kodlama için iki yaklaşım sunar:

  • Tarayıcıda, genellikle kullanıcı işlemine yanıt olarak yürütülen istemci tarafı coğrafi kodlama. Maps JavaScript API, istekleri sizin adınıza gönderen sınıflar sağlar. Bu yaklaşım, Maps JavaScript API belgelerinde açıklanmıştır.
  • HTTP sunucu tarafı coğrafi kodlama: Sunucunuzun, coğrafi kodlar için doğrudan Google'ın sunucularını sorgulamasına olanak tanır. Geocoding API, bu işlevi sağlayan web hizmetidir. Genellikle bu hizmeti, sunucu tarafında çalışan diğer kodlarla entegre edersiniz. Sunucu tarafı coğrafi kodlama, Geocoding API belgelerinde açıklanmıştır.

İstemci tarafı ve sunucu tarafı coğrafi kodlama örnekleri

Aşağıda, bir adresi alıp coğrafi kodlayan, haritanın merkezini bu konuma taşıyan ve buraya bir harita işaretçisi ekleyen istemci tarafı coğrafi kodlama örneği verilmiştir:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

Daha fazla örnek için Maps JavaScript API belgelerine bakın.

Geocoding API v4'te sunucu tarafı coğrafi kodlama isteği yapmak için Python'un kullanıldığı bir örneği aşağıda bulabilirsiniz:

import json
import urllib.request

address = "1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key = "my-key-here"
url = f"https://geocode.googleapis.com/v4/geocode/address/{address}"
headers = {"X-Goog-Api-Key": key}

req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req) as response:
    result = json.loads(response.read().decode("utf-8"))

Bu işlem, aşağıdaki içeriğe sahip bir JSON nesnesi oluşturur:

{
  "results": [
    {
      "place": "places/ChIJiSSC8QK6j4AR98Thup8mqTc",
      "placeId": "ChIJiSSC8QK6j4AR98Thup8mqTc",
      "location": {
        "latitude": 37.4224864,
        "longitude": -122.0855962
      },
      "granularity": "ROOFTOP",
      "viewport": {
        "low": {
          "latitude": 37.4211700197085,
          "longitude": -122.08691558029149
        },
        "high": {
          "latitude": 37.4238679802915,
          "longitude": -122.08421761970851
        }
      },
      "bounds": {
        "low": {
          "latitude": 37.4221145,
          "longitude": -122.0860002
        },
        "high": {
          "latitude": 37.4228775,
          "longitude": -122.085133
        }
      },
      "formattedAddress": "Google Building 41, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "postalAddress": {
        "regionCode": "US",
        "languageCode": "en",
        "postalCode": "94043-1351",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1600 Amphitheatre Pkwy"
        ]
      },
      "addressComponents": [
        {
          "longText": "Google Building 41",
          "shortText": "Google Building 41",
          "types": [
            "premise"
          ],
          "languageCode": "en"
        },
        {
          "longText": "1600",
          "shortText": "1600",
          "types": [
            "street_number"
          ]
        },
        {
          "longText": "Amphitheatre Parkway",
          "shortText": "Amphitheatre Pkwy",
          "types": [
            "route"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Mountain View",
          "shortText": "Mountain View",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Santa Clara County",
          "shortText": "Santa Clara County",
          "types": [
            "administrative_area_level_2",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "California",
          "shortText": "CA",
          "types": [
            "administrative_area_level_1",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "United States",
          "shortText": "US",
          "types": [
            "country",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "94043",
          "shortText": "94043",
          "types": [
            "postal_code"
          ]
        },
        {
          "longText": "1351",
          "shortText": "1351",
          "types": [
            "postal_code_suffix"
          ]
        }
      ],
      "types": [
        "premise",
        "street_address"
      ]
    }
  ]
}

Daha fazla örnek için Geocoding API v4'e genel bakış ve Adresleri coğrafi kodlama kılavuzu başlıklı makaleleri inceleyin.

Kota ve maliyetle ilgili dikkat edilmesi gereken noktalar

Coğrafi kodlama maliyetleri, kotalar ve sıklık sınırları, bu belgede açıklanan stratejileri belirler.

Maliyet

Coğrafi kodlama istekleri için günlük kota (QPD) sınırları kullanılmaz. Bunun yerine, tarayıcı üzerinden istemci tarafında veya Geocoding API web hizmeti üzerinden sunucu tarafında yapılan her coğrafi kodlama isteği, istek başına fiyat üzerinden faturalandırılır. Kullanım maliyetinizi yönetmek için kullanım sınırlarınızı ve kotalarınızı yönetmeyi deneyin.

Hız sınırları

Coğrafi kodlama hizmeti, istemci taraflı ve sunucu tarafı sorgularının toplamı olarak hesaplanan 3.000 QPM (dakika başına sorgu) ile sıklık sınırlamasına sahiptir.

Mobil uygulama gibi istemci tarafı coğrafi kodlama isteklerini düzenli aralıklarla çalıştırırken tüm kullanıcılarınız aynı anda istekte bulunuyorsa (örneğin, her dakikanın aynı saniyesinde) istekleriniz hata döndürebilir. Bunu önlemek için aşağıdakilerden birini yapabilirsiniz:

  • İsteklerinize rastgele aralıklar (jitter) ekleyin. İsteklerin tüm kullanıcı tabanınızda rastgele olduğundan emin olun.
  • Android için geliştirme yapıyorsanız tam olmayan yinelenen alarm kullanın.
  • Android için geliştirme yapıyorsanız uygun bir konum stratejisi seçin.

Önbelleğe alma

Önbelleğe alma hakkında bilgi edinmek için Geocoding API Politikaları'nı inceleyin.

4. sürümde sunucu tarafı ve istemci tarafı mimarisi

Geocoding API v4 (SearchDestinations, GeocodeAddress, GeocodeLocation ve GeocodePlace dahil), sunucudan sunucuya API olarak tasarlanmıştır. Arka uç sunucunuzdan v4 uç noktalarını çağırmanın önemli avantajları vardır:

  • Yakın çevreye özel varış bilgileri: SearchDestinations yöntemi (POST /v4/geocode/destinations) yalnızca sunucu tarafı REST veya gRPC istekleri kullanılarak kullanılabilir. Bu yöntem, istemci tarafı tarayıcı coğrafi kodlayıcılarında bulunmayan bina girişlerini, rota çizilebilir navigasyon noktalarını, bina ana hatlarını ve yakındaki önemli noktaları döndürür.
  • Gelişmiş API güvenliği: Sunucu tarafı çağrılar, API anahtarlarınızı ve OAuth jetonlarınızı istemci tarayıcılarında görünmeye karşı korur. API güvenliği bölümüne bakın.
  • Yanıt alanı maskeleri: Sunucu tarafı v4 uç noktaları, alan maskelerini destekler. Bu sayede, yük boyutunu ve gecikmeyi en aza indirmek için yalnızca uygulamanızın ihtiyaç duyduğu alanları isteyebilirsiniz.

İstemci tarafı tarayıcı arama ne zaman kullanılır?

Canlı tuş vuruşlarına yanıt veren etkileşimli tarayıcı uygulamaları için istemci tarafı Yer Adı Otomatik Tamamlama'yı (kullanıcı girişindeki belirsizliği gidermek ve yer kimliği almak için) SearchDestinations veya GeocodePlace'ya yapılan bir arka uç çağrısıyla birleştirerek yakın çevreye özel ayrıntıları veya koordinatları güvenli bir şekilde alabilirsiniz.