การแก้ไขปัญหา GLatLngBounds
กับ Google Maps API: คู่มือทีละขั้นตอน
หากคุณกำลังทำงานกับ Google Maps API และพบปัญหากับ GLatLngBounds
คุณไม่ได้อยู่คนเดียว นักพัฒนาหลายคนพบปัญหาในการกำหนดขอบเขตทางภูมิศาสตร์ที่ถูกต้อง ซึ่งสามารถส่งผลกระทบต่อการทำงานของแผนที่และประสบการณ์ของผู้ใช้ ในโพสต์นี้ เราจะเข้าไปลึกลงในปัญหาที่เฉพาะเจาะจงเกี่ยวกับ GLatLngBounds
และเสนอแนวทางการแก้ไขที่มีประสิทธิภาพเพื่อเอาชนะความท้าทายเหล่านี้
การเข้าใจปัญหา
ปัญหาที่เกิดขึ้นเกี่ยวข้องกับคลาส JavaScript ที่กำหนดเอง (tPoint
) ซึ่งถูกออกแบบมาเพื่อเก็บจุดทางภูมิศาสตร์ และความจำเป็นในการสร้างฟังก์ชันที่คืนค่าช่องว่าง GLatLngBounds
เป้าหมายของวัตถุนี้คือการขยายขอบเขตของแผนที่ในปัจจุบันเพื่อให้ครอบคลุม “HeadPoints” ทั้งหมดที่เก็บไว้
นี่คือภาพรวมสั้น ๆ ของสถานการณ์:
- อาร์เรย์ของจุด: คลาส
tPoint
เก็บอาร์เรย์ของจุดGLatLng
- ฟังก์ชันที่ต้องการ: ฟังก์ชัน (
getBounds()
) ถูกตั้งไว้เพื่อคำนวณและคืนค่าขอบเขตทางภูมิศาสตร์ที่แสดงถึงจุดทั้งหมด - ปัญหาที่เกิดขึ้นในปัจจุบัน: การคำนวณคืนค่า
NaN
(Not a Number) สำหรับพิกัดละติจูดและลองจิจูด ทำให้เกิดปัญหาในการกำหนดระดับการซูมที่เหมาะสม
ปัญหาในส่วนของโค้ด
นี่คือส่วนที่เกี่ยวข้องของการใช้งานที่ทำให้เกิดความสับสน:
function getBounds() {
var mBound = map.getBounds();
for (var i = 0; i < tPoints.length; i++) {
alert(mBound.getSouthWest().lat() + "," + mBound.getSouthWest().lng());
alert(mBound.getNorthEast().lat() + "," + mBound.getNorthEast().lng());
currPoint = trackMarkers[i].getHeadPoint();
if (!mBound.containsLatLng(currPoint)) {
mBound.extend(currPoint);
}
}
return mBound;
}
การแจ้งเตือนจะแสดงค่า NaN
ซึ่งบ่งชี้ว่ามีปัญหาเมื่อเข้าถึงละติจูดและลองจิจูด โดยเฉพาะอย่างยิ่งเมื่อโต้ตอบกับ mBound
การเสนอวิธีแก้ปัญหา
เพื่อให้การแก้ปัญหานี้สำเร็จ เราต้องใช้แนวทางที่ละเอียดมากขึ้นในการจัดการขอบเขต นี่เกี่ยวข้องกับการเก็บพิกัดตะวันตกเฉียงใต้และตะวันออกเฉียงเหนือในตัวแปรแยกต่างหากก่อนที่จะพยายามดึงพิกัดแต่ละตัว มาแยกออกเป็นขั้นตอนที่ชัดเจน:
1. ดึงขอบเขตปัจจุบันอย่างถูกต้อง
ก่อนอื่น เมื่อคุณดึงขอบเขต ให้เก็บพิกัดตะวันตกเฉียงใต้และตะวันออกเฉียงเหนืออย่างถูกต้อง:
function getBounds() {
var mBound = map.getBounds();
var southWest = mBound.getSouthWest();
var northEast = mBound.getNorthEast();
2. ตรวจสอบค่าต่าง ๆ
ถัดไป เมื่อเก็บขอบเขตลงในตัวแปร คุณสามารถตรวจสอบความถูกต้องของค่าก่อนใช้:
console.log("SouthWest: ", southWest);
console.log("NorthEast: ", northEast);
การเห็นค่าต่าง ๆ เหล่านี้ถูกดึงมาได้อย่างถูกต้องโดยไม่มีข้อผิดพลาดเป็นสิ่งสำคัญ
3. วนลูปและขยายขอบเขต
ตอนนี้ คุณสามารถวนลูปผ่าน tPoints
และขยายขอบเขตตามต้องการ:
for (var i = 0; i < tPoints.length; i++) {
currPoint = trackMarkers[i].getHeadPoint();
// ตรวจสอบว่าจุดปัจจุบันไม่ได้อยู่ภายในขอบเขต
if (!mBound.containsLatLng(currPoint)) {
mBound.extend(currPoint); // ขยายขอบเขตเพื่อรวมจุดปัจจุบัน
}
}
4. คืนค่าขอบเขตสุดท้าย
สุดท้ายคืนค่าขอบเขตที่ได้รับการปรับเปลี่ยน:
return mBound;
}
บทสรุป
โดยการปฏิบัติตามขั้นตอนที่กล่าวไว้ข้างต้น เราทำให้มั่นใจว่าเราจัดการกับวัตถุ GLatLngBounds
ได้อย่างถูกต้อง ลดความน่าจะเป็นในการพบค่า NaN
แนวทางที่รอบคอบนี้ไม่เพียงแต่แก้ปัญหาที่เกิดขึ้นเท่านั้น แต่ยังเพิ่มความเข้าใจของคุณเกี่ยวกับวิธีการจัดการขอบเขตทางภูมิศาสตร์ภายใน Google Maps API ได้อย่างมีประสิทธิภาพ
หากคุณพบว่าตัวเองติดขัด อย่าลังเลที่จะกลับไปดูเอกสารสำหรับ Google Maps API และจำไว้ว่าการเข้าร่วมกับชุมชนเพื่อขอข้อมูลเชิงลึกและแนวทางแก้ไขเพิ่มเติมก็เป็นสิ่งสำคัญ ขอให้สนุกกับการสร้างแผนที่!