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

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

Maps JavaScript API ใช้ระบบพิกัดต่อไปนี้

  • ค่าละติจูดและลองจิจูด ซึ่งอ้างอิงจุดบนโลกโดยไม่ซ้ำกัน Google ใช้มาตรฐาน World Geodetic System WGS84
  • พิกัดโลก ซึ่งอ้างอิงจุดบนแผนที่โดยไม่ซ้ำกัน
  • พิกัดพิกเซล ซึ่งอ้างอิงพิกเซลที่เฉพาะเจาะจงบนแผนที่ที่ระดับการซูมที่เฉพาะเจาะจง
  • พิกัดแผนที่ย่อย ซึ่งอ้างอิงแผนที่ย่อยที่เฉพาะเจาะจงบนแผนที่ที่ระดับการซูมที่เฉพาะเจาะจง

พิกัดโลก

เมื่อใดก็ตามที่ API ต้องแปลตำแหน่งในโลกเป็นตำแหน่งบนแผนที่ API จะแปลค่าละติจูดและลองจิจูดเป็นพิกัดโลกก่อน API ใช้การฉายภาพแบบเมอร์เคเตอร์เพื่อทำการแปลนี้

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

พิกัดโลกใน Google Maps วัดจากจุดเริ่มต้นของการฉายภาพแบบเมอร์เคเตอร์ (มุมตะวันตกเฉียงเหนือของแผนที่ที่ลองจิจูด 180 องศาและละติจูดประมาณ 85 องศา) และเพิ่มขึ้นในทิศทาง x ไปทางทิศตะวันออก (ขวา) และเพิ่มขึ้นในทิศทาง y ไปทางทิศใต้ (ลง) เนื่องจากไทล์ Google Maps แบบ Mercator พื้นฐานมีขนาด 256 x 256 พิกเซล พื้นที่พิกัดโลกที่ใช้งานได้จึงเป็น {0-256}, {0-256}

โปรดทราบว่าการฉายภาพแบบเมอร์เคเตอร์มีความกว้างจำกัดตามลองจิจูด แต่มีความสูงไม่จำกัดตามละติจูด เราตัดภาพแผนที่ฐานที่ใช้การฉายภาพแบบเมอร์เคเตอร์ที่ประมาณ +/- 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 จะกำหนดการ์ดที่ต้องการโดยใช้พิกัดพิกเซล แล้วแปลค่าเหล่านั้นเป็นชุดการ์ดที่จะดึงข้อมูล โดยจะกำหนดพิกัดแผนที่ย่อยเหล่านี้โดยใช้รูปแบบที่ทำให้ระบุได้ง่ายว่าแผนที่ย่อยใดมีภาพสำหรับจุดที่กำหนด

ไทล์ใน Google Maps จะมีหมายเลขจากจุดเริ่มต้นเดียวกันกับพิกเซล สำหรับการใช้งานการฉายภาพแบบเมอร์เคเตอร์ของ Google ไทล์ต้นทางจะอยู่ที่มุมตะวันตกเฉียงเหนือของแผนที่เสมอ โดยค่า x จะเพิ่มขึ้นจากตะวันตกไปตะวันออก และค่า y จะเพิ่มขึ้นจากเหนือไปใต้ ระบบจะจัดทำดัชนีไทล์โดยใช้พิกัด x,y จากจุดเริ่มต้นนั้น ตัวอย่างเช่น ที่ระดับการซูม 2 เมื่อแบ่งโลกออกเป็น 16 ไทล์ ไทล์แต่ละไทล์จะอ้างอิงได้ด้วยคู่ x,y ที่ไม่ซ้ำกัน ดังนี้

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

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

ตัวอย่าง

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

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