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