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

Coğrafi kodlama terimi genellikle okunabilir bir adresin harita üzerindeki bir konuma çevrilmesini ifade eder. Bunun tam tersini yaparak haritadaki bir konumu kullanıcıların okuyabileceği bir adrese çevirme işlemi ters coğrafi kodlama olarak bilinir.

Ters coğrafi kodlama istekleri

Gerekli parametreler

  • latlng: İnsanlar tarafından okunabilecek 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

Bunlar, tersine coğrafi kodlama isteğine ekleyebileceğiniz isteğe bağlı parametrelerdir:

  • 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 kapsamlı olmayabilir.
    • language sağlanmazsa coğrafi kodlayıcı, Accept-Language başlığında belirtilen tercih edilen dili veya isteğin gönderildiği alanın ana dilini kullanmaya çalışır.
    • Coğrafi kodlayıcı, hem kullanıcı hem de bölge sakinlerinin okuyabileceği bir açık adres sağlamak için elinden geleni yapar. Bu hedefe ulaşmak için yerel dildeki açık adresleri, gerekirse kullanıcı tarafından okunabilecek bir alfabeye dönüştürülerek tercih edilen dile uyarlar. 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 mevcut değilse coğrafi kodlayıcı en yakın eşleşmeyi kullanır.
  • region — ccTLD ("üst düzey alan") olarak iki karakterlik değer olarak belirtilen bölge kodu. Parametre, geçerli yasalara göre sonuçları da etkileyebilir.
  • result_type: Dikey çizgiyle (|) ayrılmış bir veya daha fazla adres türünü içeren filtre. 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 bir arama sonrası filtre olarak çalışır: API, belirtilen latlng için tüm sonuçları getirir, ardından belirtilen adres türleriyle eşleşmeyen sonuçları siler. Aşağıdaki değerler desteklenir:
    • street_address, tam açık adresi gösterir.
    • route, adlandırılmış bir rotayı (ör. "TR 101") gösterir.
    • intersection, genellikle iki ana yolu kapsayan ana bir kesişimi gösterir.
    • political, siyasi bir tüzel kişiyi belirtir. Bu tür genellikle bir sivil yönetim poligonunu gösterir.
    • country, ulusal siyasi kuruluşu gösterir 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 bir sivil tüzel kişiyi belirtir. ABD'de bu idari düzeyler eyalettir. Tüm uluslar bu idari düzeylerde değildir. Çoğu durumda, management_area_level_1 kısa adları, ISO 3166-2 alt bölümleri ve yaygın olarak 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 durum garanti edilmez.
    • administrative_area_level_2, ülke düzeyinin altında ikinci düzey bir sivil tüzel kişiyi gösterir. Bu idari düzeyler ABD'de ilçelerdir. Tüm uluslar bu idari düzeylerde değildir.
    • administrative_area_level_3, ülke düzeyinin altında üçüncü taraf bir sivil tüzel kişiyi gösterir. Bu tür, küçük bir sivil toplum bölmesini belirtir. Tüm uluslar bu idari düzeylerde değildir.
    • administrative_area_level_4, ülke düzeyinin altında dördüncü dereceden bir sivil tüzel kişiyi gösterir. Bu tür, küçük bir sivil toplum bölmesini belirtir. Tüm uluslar bu idari düzeylerde değildir.
    • administrative_area_level_5, ülke düzeyinin altında beşinci düzey bir sivil tüzel kişiyi belirtir. Bu tür, küçük bir sivil toplum bölmesini belirtir. Tüm uluslar bu idari düzeylerde değildir.
    • administrative_area_level_6, ülke düzeyinin altında altıncı düzey bir sivil tüzel kişiyi gösterir. Bu tür, küçük bir sivil toplum bölmesini belirtir. Tüm uluslar bu idari düzeylerde değildir.
    • administrative_area_level_7, ülke düzeyinin altında yedinci düzey sivil tüzel kişiyi gösterir. Bu tür, küçük bir sivil toplum bölmesini belirtir. Tüm uluslar bu idari düzeylerde değildir.
    • colloquial_area, varlık için yaygın olarak kullanılan bir alternatif adı gösterir.
    • locality, anonim bir şehir veya kasabadaki siyasi tüzel kişiyi belirtir.
    • sublocality, bir konum altında birinci dereceden bir sivil tüzel kişiyi belirtir. Bazı konumlar için ek türlerden biri alınabilir: sublocality_level_1 - sublocality_level_5. Her alt konum düzeyi bir sivil tüzel kişidir. Büyük sayılar daha küçük bir coğrafi alanı belirtir.
    • neighborhood, adlandırılmış bir mahalleyi gösterir
    • premise, genellikle ortak bir ada sahip olan bir bina veya bina topluluğu olan adlandırılmış bir konumu gösterir
    • subpremise, adlandırılmış bir konumun altındaki birinci derece varlığı gösterir. Bu genellikle ortak bir ada sahip binalar içinde yer alan tek bir binadır
    • plus_code, enlem ve boylamdan türetilen kodlanmış bir konum referansını gösterir. Artı kodları, var olmadıkları yerlerde (binaların numaralandırılmadığı veya sokakların adlandırılmadığı durumlarda) açık adreslerin yerine kullanılabilir. Ayrıntılar için https://plus.codes sayfasına bakın.
    • postal_code, ülke içindeki posta postaları için kullanılan posta kodunu belirtir.
    • natural_feature belirgin bir doğal özelliği gösterir.
    • airport, bir havaalanını gösterir.
    • park, adlandırılmış bir parkı gösterir.
    • point_of_interest, adlandırılmış bir önemli yeri gösterir. Bu "ÖY"ler, genellikle "Empire State Binası" veya "Eyfel Kulesi" gibi başka bir kategoriye kolayca uymayan önemli yerel varlıklardır.
  • location_type: Dikey çizgiyle (|) ayrılmış bir veya daha fazla konum türünü içeren filtre. Parametre birden fazla konum türü içeriyorsa API, türlerden herhangi biriyle eşleşen tüm adresleri döndürür. İşleme hakkında bir not: location_type parametresi, aramayı belirtilen konum türleriyle restrict. Bunun yerine, location_type bir arama sonrası filtre olarak çalışır: API, belirtilen latlng için tüm sonuçları getirir, 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 kesinliğine 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ılmış yaklaşık bir değeri (genellikle bir yol üzerinde) yansıtan adresleri döndürür. Ara değer aralığı genellikle bir açık adres için çatı coğrafi kodlarının kullanılamadığını gösterir.
    • "GEOMETRIC_CENTER", çoklu çizgi (örneğin, sokak) veya poligon (bölge) gibi bir konumun yalnızca geometrik merkezlerini döndürür.
    • "APPROXIMATE", yalnızca yaklaşık olarak nitelendirilen 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 edilemezse API, ZERO_RESULTS değerini döndürür.

Ters coğrafi kodlama örneği

Aşağıdaki sorgu, Brooklyn'deki bir konumun enlem/boylam değerini içerir:

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

Yukarıdaki sorgu aşağıdaki 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 adreslerini değil, aynı zamanda bir konumu coğrafi olarak adlandırmanın da 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 tümü coğrafi kodlayıcıya ait "adreslerdir". 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 adresler ve posta kodlarıyla 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 belirgin siyasi kuruluşlara kadar farklı türde adresler döndürür. Daha kesin adres, bu örnekte olduğu gibi genellikle en belirgin sonuçtur. Belirli bir adres türüyle eşleştirmek istiyorsanız aşağıdaki sonuçları türe göre kısıtlama ile ilgili bölüme bakın. Bu nedenle, sonuçların konumları birbiriyle göreceli olarak değişiklik gösterebilir.

Türe göre filtrelenen coğrafi kodlamayı tersine çevir

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 başlıklı makaleyi inceleyin. Aşağıda, ters coğrafi kodlama yanıtında bulunabilecek durum kodları verilmiştir.

Coğrafi kodlama durum kodlarını tersine çevir

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

  • "OK", herhangi bir hata oluşmadığını ve en az bir adresin döndürüldüğünü belirtir.
  • "ZERO_RESULTS", tersine coğrafi kodlamanın başarılı olduğunu ancak hiçbir sonuç döndürmediğini gösterir. Bu durum, coğrafi kodlayıcının uzak bir konumda latlng iletilmesi 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, isteğin bir result_type veya location_type parametresi içermesi ancak API anahtarı içermemesi olabilir.
  • "INVALID_REQUEST" genellikle aşağıdakilerden birini gösterir:
    • Sorgu (address, components veya latlng) eksik.
    • Geçersiz bir result_type veya location_type girildi.
  • "UNKNOWN_ERROR", isteğin bir sunucu hatası nedeniyle işlenemediğini gösterir. Tekrar denerseniz istek başarılı olabilir.

Ters coğrafi kodlama artı kodları

Coğrafi Kodlama yanıtındaki plus_code alanı, sorgulanan enlem ve boylama en iyi şekilde yaklaşan bir artı kodu içerir. Ayrıca, 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 mesafenin 10 metreden az olacağı garanti edilir.