Ubah visibilitas Pushpin berdasarkan tingkat Zoom di kontrol Bing Maps untuk Silverlight

Jadi saya cukup baru dalam menggunakan kontrol Bing Maps di Silverlight, tetapi saya telah berhasil mendapatkan kumpulan objek pushpin (masing-masing dengan nilai lintang/bujur) yang diplot pada peta.

Pertanyaan saya sekarang adalah, bagaimana cara mengubah visibilitas berdasarkan tingkat zoom saat ini?.

Katakanlah saya memiliki 10 lokasi yang tersebar di seluruh Inggris, saya hanya ingin lokasi tersebut terlihat saat Inggris dalam tampilan saat ini, bukan saat seluruh dunia terlihat...

Saya menyadari ini adalah pertanyaan yang sangat umum tetapi bantuan apa pun akan sangat membantu!

Keris


person lookitskris    schedule 07.06.2011    source sumber


Jawaban (2)


Anda perlu menangani salah satu peristiwa kontrol peta, seperti viewchangeend atau TargetViewChanged dan memutuskan apakah akan menampilkan pin berdasarkan tingkat zoom tampilan baru dan kotak pembatas (lintang/lonjong yang membentuk batas tampilan baru)

http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspx

person Gingemonster    schedule 07.06.2011

Ini akan membantu jika Anda memahaminya

  • GeoCoordinate dan Lokasi kompatibel.
  • Persegi panjang kliping sengaja dibuat agak lebih besar dari peta sehingga tepi penanda untuk titik-titik yang sedikit di luar peta akan terlihat, memberi isyarat kepada pengguna untuk menggeser.

Siapkan metode ekstensi.

public static class ExtensionMethods
{
  public static bool Contains(this LocationRect r, GeoCoordinate p)
  {
    double w = r.West - 0.2;
    double e = r.East + 0.2;
    double s = r.South - 0.2;
    double n = r.North + 0.2;
    return w <= p.Longitude && p.Longitude <= e && s <= p.Latitude && p.Latitude <= n;
  }
}

Periksa apakah setiap pin di peta terikat dengan ekspresi seperti ini.

map.TargetBoundingRectangle.Contains(pin.Location)

Jika poin Anda berada dalam IEnumerable, impor LINQ dan Anda dapat memproses semuanya sekaligus dengan ekspresi seperti ini, yang mengembalikan koleksi yang hanya berisi pin yang perlu Anda tampilkan.

pushpins.Where(pin => map.TargetBoundingRectangle.Contains(pin.Location))

Lakukan kliping di event handler ViewChangeEnd peta. Jika Anda memiliki banyak pin, jawaban pertanyaan Anda selanjutnya adalah "quadtree". Cari tahu.

person Peter Wone    schedule 14.06.2011