เปลี่ยนการมองเห็นหมุดตามระดับการซูมในตัวควบคุม Bing Maps สำหรับ Silverlight

ฉันค่อนข้างใหม่ในการใช้ตัวควบคุม Bing Maps ใน Silverlight แต่ฉันจัดการเพื่อรับชุดของวัตถุหมุด (แต่ละอันมีค่าละติจูด/ลองจิจูด) ที่ลงจุดบนแผนที่

คำถามของฉันตอนนี้คือ ฉันจะเปลี่ยนการมองเห็นสิ่งเหล่านี้ตามระดับการซูมปัจจุบันได้อย่างไร

สมมติว่าฉันมีสถานที่ 10 แห่งกระจายอยู่ทั่วสหราชอาณาจักร ฉันต้องการให้ปรากฏเฉพาะเมื่อสหราชอาณาจักรอยู่ในมุมมองปัจจุบันเท่านั้น ไม่ใช่เมื่อทั้งโลกอยู่ในมุมมอง...

ฉันรู้ว่านี่เป็นคำถามทั่วไป แต่ความช่วยเหลือใดๆ จะดีมาก

คริส


person lookitskris    schedule 07.06.2011    source แหล่งที่มา


คำตอบ (2)


คุณต้องจัดการเหตุการณ์การควบคุมแผนที่อย่างใดอย่างหนึ่ง เช่น viewchangeend หรือ TargetViewChanged และตัดสินใจว่าจะแสดงหมุดตามระดับการซูมมุมมองใหม่และกล่องขอบเขตหรือไม่ (lat/lons ที่ประกอบเป็นขอบเขตของมุมมองใหม่)

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

person Gingemonster    schedule 07.06.2011

มันจะช่วยได้ถ้าคุณเข้าใจสิ่งนั้น

  • GeoCoordinate และ Location เข้ากันได้
  • สี่เหลี่ยมรูปตัดนั้นจงใจใหญ่กว่าแผนที่เล็กน้อย เพื่อให้มองเห็นขอบของเครื่องหมายสำหรับจุดที่อยู่นอกแผนที่เล็กน้อย เพื่อแจ้งให้ผู้ใช้แพน

ตั้งค่าวิธีการขยาย

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;
  }
}

ตรวจสอบว่าแต่ละพินอยู่ในแผนที่ที่เชื่อมโยงกับนิพจน์เช่นนี้หรือไม่

map.TargetBoundingRectangle.Contains(pin.Location)

หากคะแนนของคุณอยู่ใน IEnumerable ให้นำเข้า LINQ และคุณสามารถประมวลผลทั้งหมดได้ในคราวเดียวด้วยนิพจน์เช่นนี้ ซึ่งจะส่งคืนคอลเลกชันที่มีเฉพาะพินที่คุณต้องการแสดง

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

ทำการตัดในตัวจัดการเหตุการณ์ ViewChangeEnd ของแผนที่ หากคุณมีพินจำนวนมาก คำตอบสำหรับคำถามต่อไปของคุณคือ "ควอดทรี" ค้นดูสิ.

person Peter Wone    schedule 14.06.2011