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