การ bound แผนที่เพื่อให้เห็นเฉพาะวัตถุที่ต้องการ

การ bound แผนที่

คือการเปลี่ยนตำแหน่งและระดับซูมของแผนที่เพื่อให้ครบคลุมพื้นที่ที่เราต้องการ โดยพื้นที่จะกำหนดด้วยตำแหน่งอย่างน้อย 2 ตำแหน่ง โจทย์ที่เหมาะกับการใช้ bound เช่น ต้องการให้ผู้ใช้เห็นหมุดจากหารค้นหาทั้งหมด เป็นต้น

การใช้งานสามารถเรียกได้โดยใช้ method Map.bound()

Pin p1 = new Pin(new MapLocation(100,13),"http://map-test.longdo.com/api-mobile/android/document/v2/images/pin.png");
Pin p2 = new Pin(new MapLocation(101,14),"http://map-test.longdo.com/api-mobile/android/document/v2/images/pin.png");
Pin p3 = new Pin(new MapLocation(100.5,13),"http://map-test.longdo.com/api-mobile/android/document/v2/images/pin.png");
ldmap.pushPin(p1);
ldmap.pushPin(p2);
ldmap.pushPin(p3);

ldmap.bound(Arrays.asList((IMarker)p1,(IMarker)p2,(IMarker)p3));

ตัวอย่างนี้เป็นการวาดหมุดลงไปบนแผนที่ 3 หมุด แล้วสั่งให้แผนที่ซูม/เปลี่ยนตำแหน่ง เพื่อให้เห็นหมุดทั้งหมด (Pin, Line, Polygon เป็น class ที่ implement interface IMarker ทั้งหมด)

Map.bound() มี overload ที่ทำให้เราสามารถควบคุมการทำงานได้ละเอียดขึ้นคือ

public MapLocation bound(List<IMarker> markerList, boolean doMoveAnimation, boolean doZoomAnimation, boolean onlyReturnValue, boolean fixCenter, PointF offset)
  1. markerList คือหมุด เส้น หรือ โพลิกอน ที่ต้องการจะ bound
  2. doMoveAnimation คือ แสดง animation ของการเลื่อนแผนที่ระหว่างที่ bound
  3. doZoomAnimationคือ แสดง animation ของการซูมแผนที่ระหว่างที่ bound
  4. onlyReturnValue คือ คืนตำแหน่งและซูมของแผนที่หลังจากการ bound แต่ไม่ต้อง bound แผนที่จริงๆ
  5. fixCenter คือ bound โดยไม่ขยับจุดกลาง บางครั้งการ bound อาจจะทำให้มุมมองผู้ใช้หลุดออกจากตำแหน่งปัจจุบันมากเกินไป การล็อคจุดกลางแผนที่จะทำให้แผนที่เปลี่ยนแค่ซูมแต่ไม่เปลี่ยนตำแหน่ง
  6. offset ของการ bound จะใช้ในกรณีที่ต้องการให้พื้นที่ของการ bound เล็กลง เช่น กรณีที่มี view อื่นบังแผนที่ ซึ่งถ้า bound ตามปกติ อาจจะทำให้หมุดโดนบังด้วย view ดังกล่าวได้

ตัวอย่างการ bound แบบมี offset

กลับหน้าหลัก