Google Maps çoklu Marker ekleme

Google maps api kullanarak bir noktayı işaretleme olayına marker diyoruz. Bir raporda harita üzerinde bayilerimizi bulundukları şehirlere göre işaretlemem gerekiyordu fakat şehir adeti arttıkça aranan şehrin bulunamaması gibi bir problem oluşuyor. Bunun sebebi de şehirlerin isimlerini bir servise gönderip geriye koordinatları almakla ilgili..

Google map api de bulunan getLatLng fonksiyonu http://maps.google.com/maps/geo?output=json&oe=utf-8&q=TRABZON servisinden şehrin bilgilerini istiyor ve json olarak bu bilgi geri dönüyor.

{
  "name": "trabzon",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "Trabzon, Türkiye",
    "AddressDetails": {
   "Accuracy" : 4,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "Trabzon",
         "Locality" : {
            "LocalityName" : "Trabzon"
         }
      },
      "CountryName" : "Türkiye",
      "CountryNameCode" : "TR"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 41.0336756,
        "south": 40.9663072,
        "east": 39.7973630,
        "west": 39.6693036
      }
    },
    "Point": {
      "coordinates": [ 39.7333333, 41.0000000, 0 ]
    }
  } ]
}

Gelen bu bilgideki koordinatı alıp işaretlemek istediğimiz noktayı işaretliyoruz yani marker ekliyoruz. Bu istek sayısı arttığında şehirler bulunanamamaya başlıyor. Belkide bir ayarı vardır ama ben bu ayarı bulamadım ve laz işi bir çözümle olayı halettim :)

Nasıl mı ? setInterval() kullanarak. Bu javascript fonksiyonu bir kodu belirlediğimiz zaman kadar bekleyerek yeniden tekrarlatır, zamanı mili saniye cinsinden alır. Olayımız şu; Google Map servisini belirleyeceğimiz zaman aralıklarında kullanıp, aynı anda birden çok isteğin gitmesine engel olacağız. Ben 300mili saniye de şehirleri başarılı bir şekilde harita üzerine işaretletebildim, bu süreyi gözlemlerinize göre değiştirebilirsiniz.

            var sehirler = "TRABZON;RİZE;ORDU;GİRESUN;GÜMÜŞHANE;ERZURUM;SAMSUN;ARTVİN;ERZİNCAN;VAN;TOKAT;KARS;AĞRI;ÇORUM;BAYBURT;İSTANBUL;IĞDIR;ZONGULDAK;DÜZCE;AMASYA;ANKARA;ANTALYA;ARDAHAN;DİYARBAKIR;BATMAN;GAZİANTEP;GÜRCİSTAN;HAKKARİ;KIRŞEHİR;MUŞ;KAHRAMANMARAŞ;KARABÜK;SİİRT;SİNOP;SİVAS;UŞAK;İZMİR;MALATYA;NİĞDE,KONYA;ESKİŞEHİR;KÜTAHYA;AYDIN;MANİSA";
            var sehir = sehirler.split(';');
            var j = 0;
            var x = setInterval(function () {
                if (j == sehir.length) {
                    clearInterval(x); // tüm şehirleri işaretledikten sonra intervali temizliyoruz, yani durduruyoruz.
                }
                showAddress(sehir[j]);
                j++;
            }, 300);

Bu arada setInterval() fonksiyonu şu şekillerde kullanılıyor.

           setInterval("alert('test')",1000);
           setInterval(function(){
               // buraya kodlarımız geliyor.
           },1000);

Örneği buradan indirip, api keyi değiştirip çalıştırabilirsiniz.

  • oxygen

    merhaba aslında uzun zamandır sitenizi takip etmeme ragmen bu konu nasıl gözümden kacmıs anlamadım… fakat hocam sizden bir ricam olacak ..

    bu konuda bahsi gecen google map eski versiyon icin gecerli kullanmakta oldugum asp access sisteme yeni versiyonu entegre etmem lazım yani google map v3 icin coklu marker ekleme (vt den belli bir alandan cekerek kullanma durumu) konusunda bir calısma yaparsanız coook makbule gecer…

    tesekkurler

  • melih

    ben de arkadaşa katlıyorum .. çok çok lazım hatta bunun tam kodunu verseniz ben incelsem yine yeter ..
    projeyi yetiştirmem lazım :D