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

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

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 ที่ไม่ซ้ำกัน

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

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

ตัวอย่าง

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

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