Maps JavaScript API ใช้ระบบพิกัดต่อไปนี้
- ค่าละติจูดและลองจิจูดซึ่งอ้างอิงจุดบนโลกโดยไม่ซ้ำกัน (Google ใช้มาตรฐาน World Geodetic System WGS84)
- พิกัดโลกซึ่งอ้างอิงจุดบนแผนที่โดยไม่ซ้ำ
- พิกัดพิกเซล ซึ่งอ้างอิงพิกเซลที่เฉพาะเจาะจงบนแผนที่ที่การซูมระดับหนึ่งๆ
- พิกัดของชิ้นส่วนแผนที่ ซึ่งอ้างอิงชิ้นส่วนที่เฉพาะเจาะจงบนแผนที่ในระดับการซูมที่เฉพาะเจาะจง
พิกัดโลก
เมื่อใดก็ตามที่ API ต้องการแปลงตำแหน่งในโลกเป็นตำแหน่งบนแผนที่ ระบบจะแปลงค่าละติจูดและลองจิจูดเป็นพิกัดโลกก่อน API ใช้การฉายภาพ Mercator เพื่อทำการแปลนี้
เพื่อความสะดวกในการคำนวณพิกัดพิกเซล (ดูด้านล่าง) เราถือว่าแผนที่ที่ระดับการซูม 0 เป็นไทล์เดียวที่มีขนาดเท่ากับไทล์ฐาน จากนั้นเราจะกำหนดพิกัดโลกตามพิกัดพิกเซลที่ระดับการซูม 0 โดยใช้การฉายภาพเพื่อแปลงละติจูดและลองจิจูดเป็นตำแหน่งพิกเซลในไทล์ฐานนี้ พิกัดโลกนี้เป็นค่าจุดลอยที่วัดจากจุดเริ่มต้นของการฉายแผนที่ไปยังตำแหน่งที่เฉพาะเจาะจง โปรดทราบว่าเนื่องจากค่านี้เป็นค่าทศนิยม จึงอาจมีความแม่นยำมากกว่าความละเอียดปัจจุบันของรูปภาพแผนที่ที่แสดง กล่าวคือ พิกัดโลกจะไม่ขึ้นอยู่กับระดับการซูมปัจจุบัน
พิกัดโลกใน Google Maps วัดจากต้นทางของเส้นโครงแผนที่เมอร์เคเตอร์ (มุมตะวันตกเฉียงเหนือของแผนที่ที่ลองจิจูด 180 องศา
และละติจูดประมาณ 85 องศา) และเพิ่มขึ้นในทิศทาง x
ไปทางตะวันออก (ขวา) และเพิ่มขึ้นในทิศทาง y
ไปทางทิศใต้ (ลง) เนื่องจากข้อมูลแผนที่ Mercator พื้นฐานของ Google Maps มีขนาด 256 x 256 พิกเซล พื้นที่พิกัดโลกที่ใช้งานได้จึงเท่ากับ {0-256}, {0-256}
โปรดทราบว่าการฉายภาพเมอร์เคเตอร์มีความกว้างตามแนวลองจิจูดแบบจำกัด แต่มีความสูงตามแนวละติจูดแบบไม่จำกัด เราตัดภาพแผนที่ฐานโดยใช้การฉาย Mercator ที่ประมาณ +/- 85 องศาเพื่อให้แผนที่ที่ได้เป็นรูปสี่เหลี่ยมจัตุรัส ซึ่งช่วยให้การเลือกชิ้นส่วนแผนที่ทำได้ง่ายขึ้น โปรดทราบว่าการฉายอาจสร้างพิกัดโลกที่อยู่นอกพื้นที่พิกัดที่ใช้งานได้ของแผนที่ฐาน เช่น หากคุณพล็อตจุดใกล้กับขั้วโลกมาก
พิกัดพิกเซล
พิกัดพิกเซลจะอ้างอิงพิกเซลที่เฉพาะเจาะจงบนแผนที่ที่ระดับการซูมหนึ่งๆ ส่วนพิกัดโลกจะแสดงตำแหน่งสัมบูรณ์ในการฉายภาพหนึ่งๆ ระบบจะคํานวณพิกัดพิกเซลโดยใช้สูตรต่อไปนี้
pixelCoordinate = worldCoordinate * 2zoomLevel
จากสมการข้างต้น โปรดทราบว่าระดับการซูมแต่ละระดับที่เพิ่มขึ้นจะใหญ่ขึ้น 2 เท่าทั้งในด้าน x
และ y
ดังนั้น การซูมแต่ละระดับที่สูงขึ้นจะส่งผลให้ความละเอียดสูงขึ้น 4 เท่าจากระดับก่อนหน้า ตัวอย่างเช่น เมื่อซูมระดับ 1 แผนที่ประกอบด้วยไทล์ขนาด 256x256 พิกเซล 4 รายการ ซึ่งทำให้พื้นที่พิกเซลมีขนาด 512x512 เมื่อซูมระดับ 19 พิกเซล x
และ y
แต่ละพิกเซลบนแผนที่จะอ้างอิงได้โดยใช้ค่าระหว่าง 0 ถึง 256 * 219
เนื่องจากเราใช้พิกัดของโลกในขนาดชิ้นส่วนแผนที่ ส่วนที่เป็นจำนวนเต็มของพิกัดพิกเซลจึงมีผลต่อการระบุพิกเซลที่แน่นอนที่ตำแหน่งนั้นในระดับการซูมปัจจุบัน โปรดทราบว่าสำหรับระดับการซูม 0 พิกัดพิกเซลจะเท่ากับพิกัดโลก
ตอนนี้เรามีวิธีแสดงตำแหน่งแต่ละตำแหน่งบนแผนที่ได้อย่างแม่นยำในทุกระดับการซูม Maps JavaScript API จะสร้างวิวพอร์ตโดยพิจารณาจากจุดศูนย์กลางระดับการซูมของแผนที่ (เป็น LatLng
) และขนาดขององค์ประกอบ DOM ที่บรรจุอยู่ และแปลขอบเขตนี้ให้เป็นพิกัดพิกเซล จากนั้น API จะกำหนดไทล์แผนที่ทั้งหมดที่อยู่ภายในขอบเขตพิกเซลที่ระบุอย่างมีเหตุผล ชิ้นส่วนแผนที่แต่ละชิ้นเหล่านี้ถูกอ้างอิงโดยใช้
พิกัดของชิ้นส่วนแผนที่ ซึ่งทำให้การแสดงภาพแผนที่ง่ายขึ้นมาก
พิกัดแผนที่ย่อย
API ไม่สามารถโหลดภาพแผนที่ทั้งหมดพร้อมกันสำหรับระดับการซูมที่สูงขึ้น แต่ API จะแบ่งภาพในแต่ละระดับการซูมออกเป็นชุดไทล์แผนที่ ซึ่งจัดเรียงอย่างเป็นระเบียบตามลำดับที่แอปพลิเคชันเข้าใจ เมื่อแผนที่เลื่อนไปยังตำแหน่งใหม่หรือระดับการซูมใหม่ API จะกำหนดว่าต้องใช้ไทล์ใดโดยใช้พิกัดพิกเซล และแปลค่าเหล่านั้นเป็นชุดไทล์ที่จะดึงข้อมูล ระบบจะกำหนดพิกัดของชิ้นส่วนแผนที่เหล่านี้โดยใช้รูปแบบที่ช่วยให้ระบุชิ้นส่วนแผนที่ที่มีภาพสำหรับจุดหนึ่งๆ ได้อย่างง่ายดาย
ไทล์ใน Google Maps จะได้รับการระบุหมายเลขจากต้นทางเดียวกันกับของพิกเซล สำหรับการใช้เส้นโครงแผนที่เมอร์เคเตอร์ของ Google ชิ้นส่วนต้นทางจะอยู่ในมุมตะวันตกเฉียงเหนือของแผนที่เสมอ โดยค่า x
จะเพิ่มขึ้นจากตะวันตกถึงตะวันออกและค่า y
เพิ่มขึ้นจากเหนือไปใต้ ระบบจะจัดทำดัชนีไทล์โดยใช้พิกัด x,y
จากต้นทางนั้น ตัวอย่างเช่น เมื่อซูมระดับ 2 ซึ่งโลกถูกแบ่งออกเป็น 16 ไทล์ แต่ละไทล์จะอ้างอิงด้วยคู่ x,y
ที่ไม่ซ้ำกัน ดังนี้
โปรดทราบว่าการหารพิกัดพิกเซลด้วยขนาดไทล์ (256) และนำส่วนที่เป็นจำนวนเต็มของผลลัพธ์มาใช้งานจะทำให้เกิดผลพลอยได้คือพิกัดไทล์ที่ระดับการซูมปัจจุบัน
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงพิกัดของชิคาโก รัฐอิลลินอยส์ ซึ่งได้แก่ ค่าละติจูด/ลองจิจูด พิกัดโลก พิกัดพิกเซล และพิกัดไทล์ ใช้ตัวควบคุมการซูมเพื่อดูค่าพิกัดในระดับการซูมต่างๆ
หากต้องการดูวิธีคํานวณพิกัด ให้ดูโค้ด