พิกัดแผนที่และแผนที่ย่อย

เลือกแพลตฟอร์ม: Android iOS JavaScript

Maps SDK สำหรับ Android ใช้ระบบพิกัดต่อไปนี้

  • ค่าละติจูดและลองจิจูด ซึ่งอ้างอิงจุดใดจุดหนึ่งบนโลกโดยไม่ซ้ำกัน (Google ใช้มาตรฐาน World Geodetic System WGS84)
  • พิกัดโลกซึ่งอ้างอิงจุดบนแผนที่โดยไม่ซ้ำ
  • พิกัดพิกเซล ซึ่งอ้างอิงพิกเซลที่เฉพาะเจาะจงบนแผนที่ในระดับการซูมที่เฉพาะเจาะจง
  • พิกัดของชิ้นส่วนแผนที่ ซึ่งอ้างอิงชิ้นส่วนที่เฉพาะเจาะจงบนแผนที่ในระดับการซูมที่เฉพาะเจาะจง

พิกัดโลก

เมื่อใดก็ตามที่ API จำเป็นต้องแปลตำแหน่งในโลกหนึ่งๆ ไปยังตำแหน่งบนแผนที่ ระบบจะแปลค่าละติจูดและลองจิจูดเป็นพิกัดโลกก่อน API ใช้การฉายภาพ Mercator เพื่อทำการแปลนี้

เพื่อความสะดวกในการคำนวณพิกัดพิกเซล (ดูด้านล่าง) เราถือว่าแผนที่ที่ระดับการซูมเป็น 0 เป็นชิ้นส่วนเดี่ยวของขนาดชิ้นส่วนฐาน จากนั้นเราจะระบุพิกัดโลกที่สัมพันธ์กับพิกัดพิกเซลที่ระดับการซูม 0 โดยใช้การฉายภาพเพื่อแปลงละติจูดและลองจิจูดเป็นตำแหน่งพิกเซลบนชิ้นส่วนฐานนี้ พิกัดโลกนี้คือค่าจุดลอยตัวซึ่งวัดจากต้นทางของเส้นโครงแผนที่ไปยังตำแหน่งที่เฉพาะเจาะจง โปรดทราบว่าเนื่องจากค่านี้เป็นค่าทศนิยม ค่าอาจมีความแม่นยำมากกว่าความละเอียดปัจจุบันของรูปภาพแผนที่ที่แสดง พิกัดโลกไม่ขึ้นอยู่กับระดับการซูมปัจจุบัน กล่าวคือ

พิกัดโลกใน Google Maps วัดจากต้นทางของเส้นโครงแผนที่เมอร์เคเตอร์ (มุมตะวันตกเฉียงเหนือของแผนที่ที่ลองจิจูด 180 องศา และละติจูดประมาณ 85 องศา) และเพิ่มขึ้นในทิศทาง x ไปทางตะวันออก (ขวา) และเพิ่มขึ้นในทิศทาง y ไปทางทิศใต้ (ลง) เนื่องจากชิ้นส่วนแผนที่พื้นฐานของ Mercator มีขนาด 256 x 256 พิกเซล พื้นที่พิกัดโลกที่ใช้ได้คือ {0-256}, {0-256}

โปรดทราบว่าเส้นโครงเมอร์เคเตอร์มีความกว้างจำกัดตามแนวยาว แต่มีความสูงไม่จำกัดทางละติจูด เราตัดภาพแผนที่ฐานโดยใช้เส้นโครงเมอร์เคเตอร์ที่ตำแหน่งประมาณ +/- 85 องศา เพื่อให้ผลลัพธ์แผนที่เป็นรูปทรงสี่เหลี่ยมจัตุรัส ซึ่งช่วยให้ใช้ตรรกะสำหรับการเลือกชิ้นส่วนได้ง่ายขึ้น โปรดทราบว่าการฉายภาพอาจสร้างพิกัดของโลกภายนอกพื้นที่พิกัดที่ใช้งานได้ของแผนที่ฐาน ตัวอย่างเช่น ถ้าคุณพล็อตใกล้ขั้วโลกมาก

พิกัดพิกเซล

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

pixelCoordinate = worldCoordinate * 2zoomLevel

จากสมการข้างต้น โปรดทราบว่าระดับการซูมที่เพิ่มขึ้นแต่ละระดับมีขนาดใหญ่ขึ้นเป็น 2 เท่าทั้งในทิศทาง x และ y ดังนั้น ระดับการซูมที่สูงขึ้นแต่ละระดับจะส่งผลให้มีความละเอียดสูงกว่าระดับก่อนหน้า 4 เท่า ตัวอย่างเช่น ในระดับการซูม 1 แผนที่จะมีชิ้นส่วนขนาด 256x256 พิกเซลจำนวน 4 ชิ้น ซึ่งจะกลายเป็นพื้นที่พิกเซลจากขนาด 512x512 ที่ระดับการซูม 19 x และ y พิกเซลแต่ละพิกเซลบนแผนที่จะอ้างอิงได้โดยใช้ค่าระหว่าง 0 ถึง 256 * 219

เนื่องจากเราใช้พิกัดของโลกในขนาดชิ้นส่วนแผนที่ ส่วนที่เป็นจำนวนเต็มของพิกัดพิกเซลจึงมีผลต่อการระบุพิกเซลที่แน่นอนที่ตำแหน่งนั้นในระดับการซูมปัจจุบัน โปรดทราบว่าสำหรับระดับการซูม 0 พิกัดพิกเซลจะเท่ากับพิกัดโลก

ตอนนี้เรามีวิธีแสดงตำแหน่งแต่ละตำแหน่งบนแผนที่ได้อย่างแม่นยำในทุกระดับการซูม Maps SDK สำหรับ Android สร้างวิวพอร์ตโดยกำหนดระดับการซูมที่กึ่งกลางของแผนที่ (เป็น LatLng) และขนาดขององค์ประกอบ DOM ที่มีอยู่ จากนั้นให้แปลกรอบล้อมรอบนี้ให้เป็นพิกัดพิกเซล จากนั้น API จะกำหนดชิ้นส่วนแผนที่ทั้งหมดตามตรรกะที่อยู่ภายในขอบเขตของพิกเซลที่กำหนด ชิ้นส่วนแผนที่แต่ละชิ้นเหล่านี้ถูกอ้างอิงโดยใช้ พิกัดของชิ้นส่วนแผนที่ ซึ่งทำให้การแสดงภาพแผนที่ง่ายขึ้นมาก

พิกัดแผนที่ย่อย

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

ไทล์ใน Google Maps จะมีตัวเลขกำกับจากต้นทางเดียวกับพิกเซล สำหรับการใช้เส้นโครงเมอร์เคเตอร์ของ Google ชิ้นส่วนต้นทางจะอยู่ในมุมตะวันตกเฉียงเหนือของแผนที่เสมอ โดยค่า x จะเพิ่มขึ้นจากตะวันตกถึงตะวันออกและค่า y เพิ่มขึ้นจากเหนือไปใต้ ระบบจะจัดทำดัชนีไทล์โดยใช้พิกัด x,y จากต้นทางนั้น ตัวอย่างเช่น ที่ระดับการซูม 2 เมื่อแบ่งโลกออกเป็น 16 ไทล์ แต่ละไทล์จะอ้างอิงได้ด้วยคู่ x,y ที่ไม่ซ้ำกัน ดังนี้

แผนที่โลกแบ่งออกเป็น 4 แถวและไทล์ 4 คอลัมน์

โปรดทราบว่าการหารพิกัดพิกเซลด้วยขนาดชิ้นส่วนแผนที่ (256) และนำส่วนที่เป็นจำนวนเต็มของผลลัพธ์มาใช้ จะทำให้เกิดพิกัดของชิ้นส่วนที่ระดับการซูมปัจจุบัน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงพิกัดสำหรับชิคาโก รัฐอิลลินอยส์ ค่าละติจูด/ลองจิจูด พิกัดโลก พิกัดพิกเซล และพิกัดแผนที่ย่อย ใช้การควบคุมการซูมเพื่อดูค่าพิกัดที่ระดับการซูมต่างๆ

หากต้องการดูวิธีคำนวณพิกัด โปรดดูโค้ด