2010-06-30 12 views
5

Bir ASP.NET MVC sitesi inşa ediyorum, burada bir arka plandan AJAX ile yüklenen işaretçileri gösteren bir Google Maps Javascript API haritasına sahip olmak istiyorum.Bir Google Haritalar Javascript API haritasına tembel yükleme işaretleri için strateji

İstemcinin bellek sorunlarıyla karşılaşmasını istemediğimden, işaretleyicileri işaretleyicileri yavaş yavaş yüklemek ve bunları kümelerine eklemek için Fluster2'ye uygulamak istiyorum. İşaretleyicileri tembel olarak yüklemenin en iyi yolunun, haritanın panlaması veya yakınlaştırıldıktan sonra gerçekleşen idle olayına bir olay dinleyicisi eklemesi olduğunu düşünüyorum.

  1. idle olay olay dinleyicisi ekleyin:


    İşte benim şimdiki strateji.

  2. idle olayı atıldığında, jQuery öğesinin arka ucuma bir AJAX HTTP POST çağrısı yapmasını sağlayarak haritanın geçerli görünüm alanını/sınırlarını sağlayın.
  3. Arka uç, görünümün içindeki tüm noktaları döndürür.
  4. İşaretler, işaretçiler olarak oluşturulur ve bunları haritaya ekleyen Fluster2'ye eklenir. Eski puanlar atılmaz.
  5. eski noktaları terk edilmez olarak

Ancak bu, sorunları oluşturabilir tekrarlayın. Onları yeniden yüklemek istemediğim için onları atmak istemiyorum, ama şu andaki stratejimle, onları ikinci kez yüklüyor ve ikinci kez işaretleyiciler oluşturuyordum.

Ben nasılsa ben zaten belirteçlerin bazılarına sahip olduğunu AJAX çağrısında arka uç anlatmak için iyi bir fikir değil de, çiftleri izin vermeyen bir Hashtable çeşit uygulamak güzel olurdu .

Bu şekilde, noktaları yüklediğimde bunları önce hashtable'a eklemeye çalışabilirim: eğer başarılı olursa, henüz görüntülemedim, bu yüzden onları işaretçi olarak ekleyebilirim; Başarısız olursa, zaten haritada.


Bu iyi bir strateji mi? Öyleyse, kopyalara izin vermeyen bir hashtabı nasıl uygularım?

cevap

3

Kısa süre önce oldukça benzer bir şey gerçekleştirdim; kişisel olarak tüm işaretleyicileri kaldırmayı ve haritaları tamamen doldurmayı seçerken, aslında genel stratejinizi beğendim ve kullanıcı deneyimini daha akıcı hale getirebileceğini düşündüm, çünkü tüm işaretleyicileri kaldırmak ve yenilerini eklemek arasındaki kısa titreşim ortadan kalkıyor. Evet, iyi bir strateji olduğunu söyleyebilirim.

Idle ilginç bir etkinliktir; BenZoom vb özellikle iyi çalışmadı ve TileLoaded (veya benzeri) yerleşti. Benim için iyi çalışıyor ama bir kesmek gibi görünüyor.

Sorunulabilir sorununla ilgili olarak - böyle bir haritayı depolayabileceğiniz iki olası yer var.

a) Sunucu Koordinatları hangi sayfaya gönderdiğinizi takip ederseniz, oturum açmanızdaki işaretçilerden bir nokta işareti alabilirsiniz.Bu, istemciye gereksiz koordinat göndermenize engel olabilir, ancak daha fazla hata bildirimi imo

b) İstemci Bu, muhtemelen yine de gitmek istediğiniz şeydir. Burada, normal bir Javascript ilişkilendirici dizi arkadaşınız olmalı. Tek bir hashable değerine enlem ve LNG haritalama iyi bir yol bulmak sürece

var x = {"some key": "some value"}; 
document.write ("some key" in x); // True 
document.write ("some other key" in x); // False 

, sen diziler içeren bir dizi tutmak gerekebilir:

var markers = {lat1: {lng11: 1, lng12: 1, lng13: 1}, lat2: ...} 

ve sonra

... 
if (checklat in markers) 
    if (checklng in markers[checklat]) 
     return True 
return False 
gibi kontrol

Sadece bunun daha eski bir soru olduğunu görüyorum. Çok geç, belki hala yardımcı olur.

+0

Yardımlarınız için teşekkürler! Bunu deneyeceğim. –

+0

Karma anahtar için lat/long öğesinden bir google.maps.latLng nesnesi oluşturabilir ve toString() yöntemini kullanabilirsiniz. – dsas

İlgili konular