Ters coğrafi kodlama (adres arama) isteği ve yanıtı

Coğrafi kodlama terimi genellikle kullanıcılar tarafından okunabilir bir adresin harita üzerindeki bir konuma çevrilmesini ifade eder. Bunun tersini yapma sürecine, haritadaki bir konumu kullanıcıların okuyabileceği bir adrese çevirme işlemine ters coğrafi kodlama denir.

Ters coğrafi kodlama istekleri

Gerekli parametreler

  • latlng — Kullanıcıların okuyabileceği en yakın adresi istediğiniz konumu belirten enlem ve boylam koordinatları.
  • key — Uygulamanızın API anahtarı. Bu anahtar, kota yönetimi amacıyla uygulamanızı tanımlar. Nasıl anahtar alacağınızı öğrenin.

İsteğe bağlı parametreler

Ters coğrafi kodlama isteğine ekleyebileceğiniz isteğe bağlı parametreler şunlardır:

  • language: Sonuçların döndürüleceği dil.
    • Desteklenen dillerin listesini inceleyin. Google, desteklenen dilleri sıklıkla güncellediğinden bu liste tam olmayabilir.
    • language belirtilmezse coğrafi kodlayıcı, Accept-Language üst bilgisinde belirtilen tercih edilen dili veya isteğin gönderildiği alanın yerel dilini kullanmaya çalışır.
    • Coğrafi kodlayıcı, hem kullanıcı hem de bölge sakinleri tarafından okunabilen bir açık adres sağlamak için elinden geleni yapar. Bu hedefe ulaşmak için, yerel dildeki açık adresleri, gerektiğinde kullanıcı tarafından okunabilecek bir alfabeye çevrilmiş şekilde, tercih edilen dilde döndürür. Diğer tüm adresler tercih edilen dilde döndürülür. Adres bileşenlerinin tümü, ilk bileşenden seçilen aynı dilde döndürülür.
    • Bir ad, tercih edilen dilde sunulmuyorsa coğrafi kodlayıcı en yakın eşleşmeyi kullanır.
  • region — ccTLD ("üst düzey alan") iki karakterli değer olarak belirtilen bölge kodu. Parametre, geçerli yasalara göre sonuçları da etkileyebilir.
  • result_type: Dikey çizgi (|) ile ayrılmış bir veya daha fazla adres türü içeren bir filtredir. Parametre birden fazla adres türü içeriyorsa API, türlerden herhangi biriyle eşleşen tüm adresleri döndürür. İşleme hakkında bir not: result_type parametresi, aramayı belirtilen adres türleriyle restrict. Bunun yerine, result_type arama sonrası filtre gibi çalışır: API, belirtilen latlng için tüm sonuçları getirir ve ardından belirtilen adres türleriyle eşleşmeyen sonuçları atar. Aşağıdaki değerler desteklenir:
    • street_address, tam açık adresi belirtir.
    • route, adlandırılmış bir rotayı gösterir (ör. "US 101").
    • intersection, genellikle iki ana yolun yer aldığı ana kavşağı gösterir.
    • political, siyasi bir tüzel kişiyi belirtir. Bu tür, genellikle bir sivil yönetim poligonu anlamına gelir.
    • country, ulusal siyasi varlığı belirtir ve genellikle Coğrafi Kodlayıcı tarafından döndürülen en yüksek sipariş türüdür.
    • administrative_area_level_1, ülke düzeyinin altında birinci dereceden sivil tüzel kişiyi belirtir. Amerika Birleşik Devletleri'nde bu idari düzeyler eyaletlerdir. Tüm uluslar bu idari seviyeleri göstermez. Çoğu durumda idari_area_seviye_1 kısa adları, ISO 3166-2 alt bölümleri ve geniş çapta dağıtılan diğer listelerle yakından eşleşir. Ancak coğrafi kodlama sonuçlarımız çeşitli sinyallere ve konum verilerine dayandığından bu garanti edilmez.
    • administrative_area_level_2, ülke düzeyinin altında ikinci dereceden bir sivil tüzel kişiyi belirtir. ABD'de bu idari düzeyler ilçedir. Tüm uluslar bu idari seviyeleri göstermez.
    • administrative_area_level_3, ülke düzeyinin altında üçüncü dereceden bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil çatışma olduğunu gösterir. Tüm uluslar bu idari seviyeleri göstermez.
    • administrative_area_level_4, ülke düzeyinin altında dördüncü dereceden bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil çatışma olduğunu gösterir. Tüm uluslar bu idari seviyeleri göstermez.
    • administrative_area_level_5, ülke düzeyinin altında beşinci dereceden bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil çatışma olduğunu gösterir. Tüm uluslar bu idari seviyeleri göstermez.
    • administrative_area_level_6, ülke düzeyinin altında altıncı dereceden bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil çatışma olduğunu gösterir. Tüm uluslar bu idari seviyeleri göstermez.
    • administrative_area_level_7, ülke düzeyinin altında yedinci dereceden bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil çatışma olduğunu gösterir. Tüm uluslar bu idari seviyeleri göstermez.
    • colloquial_area, varlık için yaygın olarak kullanılan alternatif bir adı belirtir.
    • locality, anonim bir şehir veya kasaba siyasi tüzel kişiliğini belirtir.
    • sublocality, bir konum altındaki birinci dereceden sivil tüzel kişiyi belirtir. Bazı konumlar için ek türlerden biri gönderilebilir: sublocality_level_1 - sublocality_level_5. Her bir alt konum düzeyi sivil tüzel kişidir. Daha büyük sayılar, daha küçük bir coğrafi alanı belirtir.
    • neighborhood, adlandırılmış bir mahalleyi gösterir
    • premise, adlandırılmış bir konumu belirtir. Bu genellikle ortak ada sahip bir bina veya bina koleksiyonudur
    • subpremise, adlandırılmış bir konumun altındaki birinci derece varlığı ifade eder. Bu, genellikle ortak bir ada sahip bir grup bina içindeki tek bir binadır.
    • plus_code, enlem ve boylamdan türetilen kodlanmış bir konum referansını gösterir. Artı kodları, bulunmadığı yerlerde (bina numaralandırılmamış veya sokakların adlandırılmadığı) açık adreslerin yerine kullanılabilir. Ayrıntılı bilgi için https://plus.codes sayfasına bakın.
    • postal_code, ülkedeki posta kodunu göndermek için kullanılan bir posta kodunu belirtir.
    • natural_feature, belirgin bir doğal özelliği belirtir.
    • airport bir havaalanını gösterir.
    • park, adlandırılmış bir parkı gösterir.
    • point_of_interest, adlandırılmış bir önemli noktayı gösterir. Genellikle bu "ÖY"ler, "Empire State Binası" veya "Eyfel Kulesi" gibi başka bir kategoriye kolayca sığmayan belirgin yerel varlıklardır.
  • location_type: Dikey çizgi (|) ile ayrılmış bir veya daha fazla konum türü içeren bir filtredir. Parametre birden fazla konum türü içeriyorsa API, türlerden herhangi biriyle eşleşen tüm adresleri döndürür. İşlemeyle ilgili bir not: location_type parametresi, aramayı belirtilen konum türleriyle restrict. Bunun yerine, location_type arama sonrası filtresi gibi çalışır: API, belirtilen latlng için tüm sonuçları getirir ve ardından belirtilen konum türleriyle eşleşmeyen sonuçları siler. Aşağıdaki değerler desteklenir:
    • "ROOFTOP", yalnızca Google'ın açık adres hassasiyetine kadar doğru konum bilgilerine sahip olduğu adresleri döndürür.
    • "RANGE_INTERPOLATED" yalnızca iki kesin nokta (kavşaklar gibi) arasında interpolasyon yapılan bir yaklaşık değeri (genellikle yol üzerinde) yansıtan adresleri döndürür. İnterpole edilmiş aralık, genellikle bir açık adres için çatı coğrafi kodlarının kullanılamadığını belirtir.
    • "GEOMETRIC_CENTER", bir konumun yalnızca çoklu çizgi (ör. sokak) veya poligon (bölge) gibi geometrik merkezlerini döndürür.
    • "APPROXIMATE", yalnızca yaklaşık olarak nitelenen adresleri döndürür.

Hem result_type hem de location_type filtreleri varsa API yalnızca hem result_type hem de location_type değerleriyle eşleşen sonuçları döndürür. Filtre değerlerinin hiçbiri kabul edilebilir değilse API, ZERO_RESULTS değerini döndürür.

Ters coğrafi kodlama örneği

Aşağıdaki sorgu, Kadıköy'deki bir konum için enlem/boylam değerini içermektedir:

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY

Yukarıdaki sorgu şu sonucu döndürür:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "277",
               "short_name" : "277",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Bedford Avenue",
               "short_name" : "Bedford Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Williamsburg",
               "short_name" : "Williamsburg",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Brooklyn",
               "short_name" : "Brooklyn",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "Kings",
               "short_name" : "Kings",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "NY",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "11211",
               "short_name" : "11211",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "277 Bedford Avenue, Brooklyn, NY 11211, USA",
         "geometry" : {
            "location" : {
               "lat" : 40.714232,
               "lng" : -73.9612889
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 40.7155809802915,
                  "lng" : -73.9599399197085
               },
               "southwest" : {
                  "lat" : 40.7128830197085,
                  "lng" : -73.96263788029151
               }
            }
         },
         "place_id" : "ChIJd8BlQ2BZwokRAFUEcm_qrcA",
         "types" : [ "street_address" ]
      },

  ... Additional <code>results[]</code> ...

Ters coğrafi kodlayıcının birden fazla sonuç döndürdüğünü unutmayın. "formatted_address" sonuçları yalnızca posta adresleri değil, aynı zamanda bir konumu coğrafi olarak adlandırmanın herhangi bir yoludur. Örneğin, Chicago şehrindeki bir noktanın coğrafi kodlaması yapılırken coğrafi kodlanan nokta açık adres, şehir (Chicago), eyalet (Illinois) veya ülke (ABD) olarak belirtilebilir. Bunların hepsi coğrafi kodlayıcının "adresleridir". Ters coğrafi kodlayıcı, bu türlerden herhangi birini geçerli sonuç olarak döndürür.

Ters coğrafi kodlayıcı, siyasi varlıkları (ülkeler, iller, şehirler ve mahalleler), açık adresleri ve posta kodlarını eşleştirir.

Önceki sorgu tarafından döndürülen formatted_address değerlerinin tam listesi aşağıda gösterilmektedir.

{
   "plus_code" : {
      "compound_code" : "P27Q+MCM New York, NY, USA",
      "global_code" : "87G8P27Q+MCM"
   },
   "results" : [
      {
         "formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "street_address" ]
      },
      {
         "formatted_address" : "279 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "premise" ]
      },
      {
         "formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "establishment", "point_of_interest" ]
      },
      {
         "formatted_address" : "291-275 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "route" ]
      },
      {
         "formatted_address" : "P27Q+MC New York, NY, USA",
         ...
         "types" : [ "plus_code" ]
      },
      {
         "formatted_address" : "South Williamsburg, Brooklyn, NY, USA",
         ...
         "types" : [ "neighborhood", "political" ]
      },
      {
         "formatted_address" : "Brooklyn, NY 11211, USA",
         ...
         "types" : [ "postal_code" ]
      },
      {
         "formatted_address" : "Williamsburg, Brooklyn, NY, USA",
         ...
         "types" : [ "neighborhood", "political" ]
      },
      {
         "formatted_address" : "Kings County, Brooklyn, NY, USA",
         ...
         "types" : [ "administrative_area_level_2", "political" ]
      },
      {
         "formatted_address" : "Brooklyn, NY, USA",
         ...
         "types" : [ "political", "sublocality", "sublocality_level_1" ]
      },
      {
         "formatted_address" : "New York, NY, USA",
         ...
         "types" : [ "locality", "political" ]
      },
      {
         "formatted_address" : "New York, USA",
         ...
         "types" : [ "administrative_area_level_1", "political" ]
      },
      {
         "formatted_address" : "United States",
         ...
         "types" : [ "country", "political" ]
      }
   ],
   "status" : "OK"
}

Bu API en spesifik açık adresten mahalle, şehir, ilçe ve eyalet gibi daha az belirli olan politik varlıklara kadar farklı türde adresler döndürür. Bu örnekte olduğu gibi, daha kesin adres genellikle en belirgin sonuçtur. Belirli bir adres türünü eşleştirmek istiyorsanız aşağıdaki sonuçları türe göre kısıtlama bölümüne bakın. Bu nedenle, sonuçların birbirine göre konumu değişiklik gösterebilir.

Türe göre filtrelenmiş ters coğrafi kodlama

Aşağıdaki örnekte, döndürülen adresler yalnızca konum türü ROOFTOP ve adres türü street_address olan adresleri içerecek şekilde filtrelenmektedir.

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452
&location_type=ROOFTOP&result_type=street_address&key=YOUR_API_KEY

Not: Bu filtreler yalnızca tersine coğrafi kodlama için geçerlidir.

Coğrafi kodlama yanıtlarını tersine çevirme

Ters coğrafi kodlama yanıtının biçimi, Coğrafi Kodlama yanıtıyla aynıdır. Yanıtların coğrafi kodlamasını yapma bölümünü inceleyin. Aşağıda, ters coğrafi kodlama yanıtında olabilecek durum kodları verilmiştir.

Tersine coğrafi kodlama durum kodları

Coğrafi Kodlama yanıt nesnesindeki "status" alanı, isteğin durumunu içerir ve ters coğrafi kodlamanın neden çalışmadığını izlemenize yardımcı olacak hata ayıklama bilgilerini içerebilir. "status" alanı şu değerleri içerebilir:

  • "OK" değeri, hata oluşmadığını ve en az bir adresin döndürüldüğünü belirtir.
  • "ZERO_RESULTS", ters coğrafi kodlamanın başarılı olduğunu ancak hiçbir sonuç döndürmediğini belirtir. Bu durum, coğrafi kodlayıcının uzak bir konumda latlng iletilmiş olması durumunda gerçekleşebilir.
  • "OVER_QUERY_LIMIT", kotanızı aştığınızı gösterir.
  • "REQUEST_DENIED", isteğin reddedildiğini gösterir. Bunun nedeni büyük olasılıkla isteğin, result_type veya location_type parametresi içeriyor ancak API anahtarı içermemesidir.
  • "INVALID_REQUEST" genellikle aşağıdakilerden birini belirtir:
    • Sorgu (address, components veya latlng) eksik.
    • Geçersiz bir result_type veya location_type verildi.
  • "UNKNOWN_ERROR", sunucu hatası nedeniyle isteğin işlenemediğini belirtir. Tekrar denerseniz istek başarılı olabilir.

Tersine coğrafi kodlama artı kodları

Coğrafi Kodlama yanıtındaki plus_code alanı, sorgulanan enlem ve boylamı en iyi şekilde tahmin eden bir artı kodu içerir. Buna ek olarak, JSON sonuç dizisi çoğu durumda plus_code türünde tam bir Coğrafi Kodlama sonucu ve artı kodu içeren bir adres içerir. Kodu çözülmüş artı kodu ile istek noktası arasındaki mesafe 10 metreden az olacaktır.