Maps JavaScript API ใช้ระบบพิกัดต่อไปนี้
- ค่าละติจูดและลองจิจูดซึ่งอ้างอิงจุดบนโลกโดยไม่ซ้ำกัน (Google ใช้มาตรฐาน World Geodetic System WGS84)
- พิกัดโลกซึ่งอ้างอิงจุดบนแผนที่อย่างเจาะจง
- พิกัดพิกเซล ซึ่งอ้างอิงพิกเซลที่เฉพาะเจาะจงบนแผนที่ที่การซูมระดับหนึ่งๆ
- พิกัดของชิ้นส่วนแผนที่ ซึ่งอ้างอิงถึงชิ้นส่วนแผนที่ที่เฉพาะเจาะจงบนแผนที่ที่ระดับการซูมหนึ่งๆ
พิกัดโลก
เมื่อใดก็ตามที่ API ต้องการแปลงตำแหน่งในโลกเป็นตำแหน่งบนแผนที่ ระบบจะแปลงค่าละติจูดและลองจิจูดเป็นพิกัดโลกก่อน API นี้ใช้การโปรเจ็กต์ Mercator เพื่อทำการแปลง
เพื่อความสะดวกในการคำนวณพิกัดพิกเซล (ดูด้านล่าง) เราถือว่าแผนที่ที่ระดับการซูม 0 เป็นไทล์เดียวที่มีขนาดเท่ากับไทล์ฐาน จากนั้นเราจะกำหนดพิกัดโลกตามพิกัดพิกเซลที่ระดับการซูม 0 โดยใช้การฉายภาพเพื่อแปลงละติจูดและลองจิจูดเป็นตำแหน่งพิกเซลในไทล์พื้นฐานนี้ พิกัดโลกนี้เป็นค่าจุดลอยที่วัดจากจุดเริ่มต้นของการฉายแผนที่ไปยังตำแหน่งที่เฉพาะเจาะจง โปรดทราบว่าเนื่องจากค่านี้เป็นค่าทศนิยม จึงอาจแม่นยำกว่าความละเอียดปัจจุบันของรูปภาพแผนที่ที่แสดงอยู่ กล่าวคือ พิกัดโลกจะไม่ขึ้นอยู่กับระดับการซูมปัจจุบัน
พิกัดโลกใน Google Maps จะวัดจากจุดเริ่มต้นของการฉายภาพ Mercator (มุมตะวันตกเฉียงเหนือของแผนที่ที่ลองจิจูด 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 จะได้รับการระบุหมายเลขจากต้นทางเดียวกันกับของพิกเซล สำหรับการใช้การฉาย Mercator ของ Google ไทล์ต้นทางจะอยู่ตรงมุมตะวันตกเฉียงเหนือของแผนที่เสมอ โดยค่า x
จะเพิ่มขึ้นจากตะวันตกไปตะวันออก และค่า y
จะเพิ่มขึ้นจากเหนือไปใต้ ระบบจะจัดทำดัชนีไทล์โดยใช้พิกัด x,y
จากต้นทางนั้น ตัวอย่างเช่น เมื่อซูมระดับ 2 ซึ่งโลกถูกแบ่งออกเป็น 16 ไทล์ แต่ละไทล์จะอ้างอิงด้วยคู่ x,y
ที่ไม่ซ้ำกัน ดังนี้
โปรดทราบว่าการหารพิกัดพิกเซลด้วยขนาดไทล์ (256) และนำส่วนที่เป็นจำนวนเต็มของผลลัพธ์มาใช้งานจะทำให้เกิดผลพลอยได้คือพิกัดไทล์ที่ระดับการซูมปัจจุบัน
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงพิกัดของชิคาโก รัฐอิลลินอยส์ ซึ่งได้แก่ ค่าละติจูด/ลองจิจูด พิกัดโลก พิกัดพิกเซล และพิกัดไทล์ ใช้ตัวควบคุมการซูมเพื่อดูค่าพิกัดในระดับการซูมต่างๆ
หากต้องการดูวิธีคํานวณพิกัด ให้ดูโค้ด