การอัปเกรดแอปพลิเคชัน Maps JavaScript API จากเวอร์ชัน 2 เป็นเวอร์ชัน 3

Maps JavaScript API เวอร์ชัน 2 จะใช้งานไม่ได้อีกต่อไปตั้งแต่วันที่ 26 พฤษภาคม 2021 ด้วยเหตุนี้ แผนที่ v2 ของเว็บไซต์จะหยุดทํางานและแสดงข้อผิดพลาด JavaScript หากต้องการใช้แผนที่ในเว็บไซต์ต่อไป ให้ย้ายข้อมูลไปยัง Maps JavaScript API v3 คู่มือนี้จะช่วยคุณตลอดกระบวนการ

ภาพรวม

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

  1. รับคีย์ใหม่ ตอนนี้ Maps JavaScript API ใช้ Google Cloud Console ในการจัดการคีย์ หากคุณยังใช้คีย์ v2 อยู่ โปรดรับคีย์ API ใหม่ก่อนเริ่มย้ายข้อมูล
  2. อัปเดต Bootstrap ของ API แอปพลิเคชันส่วนใหญ่จะโหลด Maps JavaScript API v3 ด้วยโค้ดต่อไปนี้
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
  3. อัปเดตโค้ด ปริมาณการเปลี่ยนแปลงที่จำเป็นจะขึ้นอยู่กับแอปพลิเคชันของคุณเป็นอย่างมาก การเปลี่ยนแปลงที่พบบ่อยมีดังนี้
    • อ้างอิงเนมสเปซ google.maps เสมอ ใน v3 โค้ด Maps JavaScript API ทั้งหมดจะจัดเก็บไว้ในเนมสเปซ google.maps.* แทนเนมสเปซส่วนกลาง วัตถุส่วนใหญ่ก็ได้รับการเปลี่ยนชื่อด้วยเช่นกันในกระบวนการนี้ เช่น ตอนนี้คุณจะต้องโหลด google.maps.Map แทน GMap2
    • นำการอ้างอิงถึงวิธีการที่ล้าสมัยออก ระบบได้นำวิธีการยูทิลิตีสำหรับวัตถุประสงค์ทั่วไปจำนวนหนึ่งออกแล้ว เช่น GDownloadURL และ GLog แทนที่ฟังก์ชันนี้ด้วยไลบรารียูทิลิตีของบุคคลที่สาม หรือนําการอ้างอิงเหล่านี้ออกจากโค้ด
    • (ไม่บังคับ) เพิ่มไลบรารีลงในโค้ด เราได้แยกฟีเจอร์หลายอย่างออกเป็นไลบรารียูทิลิตีเพื่อให้แต่ละแอปต้องโหลดเฉพาะส่วนของ API ที่จะใช้งาน
    • (ไม่บังคับ) กำหนดค่าโปรเจ็กต์ให้ใช้ภายนอก v3 คุณสามารถใช้ extern ของ v3 เพื่อช่วยตรวจสอบโค้ดด้วย Closure Compiler หรือเพื่อเรียกใช้ฟีเจอร์เติมข้อความอัตโนมัติใน IDE ดูข้อมูลเพิ่มเติมเกี่ยวกับ compilation ขั้นสูงและภายนอก
  4. ทดสอบและปรับปรุง ในตอนนี้ คุณยังคงต้องดำเนินการบางอย่าง แต่ข่าวดีก็คือคุณกำลังเดินหน้าสู่แอปพลิเคชันแผนที่เวอร์ชัน 3 ใหม่

การเปลี่ยนแปลงใน Maps JavaScript API เวอร์ชัน 3

ก่อนวางแผนการย้ายข้อมูล คุณควรใช้เวลาทำความเข้าใจความแตกต่างระหว่าง Maps JavaScript API v2 กับ Maps JavaScript API v3 Maps JavaScript API เวอร์ชันล่าสุดเขียนขึ้นใหม่ทั้งหมด โดยเน้นเทคนิคการเขียนโปรแกรม JavaScript สมัยใหม่ การใช้ไลบรารีที่มากขึ้น และ API ที่เข้าใจง่าย เราได้เพิ่มฟีเจอร์ใหม่ๆ มากมายลงใน API และเปลี่ยนแปลงหรือนําฟีเจอร์ที่คุ้นเคยหลายรายการออก ส่วนนี้จะไฮไลต์ความแตกต่างที่สําคัญบางประการระหว่าง 2 รุ่น

การเปลี่ยนแปลงบางส่วนใน v3 API มีดังนี้

การอัปเกรดแอปพลิเคชัน

คีย์ใหม่

Maps JavaScript API v3 ใช้ระบบคีย์ใหม่จาก v2 คุณอาจใช้คีย์ v3 กับแอปพลิเคชันอยู่แล้ว ซึ่งในกรณีนี้ก็ไม่จําเป็นต้องเปลี่ยนแปลง หากต้องการยืนยัน ให้ตรวจสอบ URL ที่คุณโหลด Maps JavaScript API เพื่อหาพารามิเตอร์ key หากค่าคีย์ขึ้นต้นด้วย "ABQIAA" แสดงว่าคุณใช้คีย์ v2 หากมีคีย์ v2 คุณต้องอัปเกรดเป็นคีย์ v3 ในการย้ายข้อมูล ซึ่งจะทําสิ่งต่อไปนี้

ระบบจะส่งคีย์เมื่อโหลด Maps JavaScript API v3 ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคีย์ API

โปรดทราบว่าหากคุณเป็นลูกค้า Google Maps API for Work คุณอาจใช้รหัสไคลเอ็นต์ที่มีพารามิเตอร์ client แทนที่จะใช้พารามิเตอร์ key ระบบยังคงรองรับรหัสไคลเอ็นต์ใน Maps JavaScript API เวอร์ชัน 3 และไม่จำเป็นต้องผ่านกระบวนการอัปเกรดคีย์

การโหลด API

การแก้ไขครั้งแรกที่คุณต้องทํากับโค้ดเกี่ยวข้องกับวิธีโหลด API ใน v2 คุณจะโหลด Maps JavaScript API ผ่านคำขอไปยัง http://maps.google.com/maps หากกำลังโหลด Maps JavaScript API v3 คุณจะต้องทําการเปลี่ยนแปลงต่อไปนี้

  1. โหลด API จาก //maps.googleapis.com/maps/api/js
  2. นําพารามิเตอร์ file ออก
  3. อัปเดตพารามิเตอร์ key ด้วยคีย์ v3 ใหม่ ลูกค้า Google Maps API for Work ควรใช้พารามิเตอร์ client
  4. (แพ็กเกจพรีเมียมของ Google Maps Platform เท่านั้น) ตรวจสอบว่าได้ระบุพารามิเตอร์ client ตามที่อธิบายไว้ใน คู่มือนักพัฒนาซอฟต์แวร์สำหรับแพ็กเกจพรีเมียมของ Google Maps Platform
  5. นําพารามิเตอร์ v ออกเพื่อขอเวอร์ชันที่เผยแพร่ล่าสุด หรือเปลี่ยนค่าให้สอดคล้องกับรูปแบบการกำหนดเวอร์ชัน v3
  6. (ไม่บังคับ) แทนที่พารามิเตอร์ hl ด้วย language และเก็บค่าไว้
  7. (ไม่บังคับ) เพิ่มพารามิเตอร์ libraries เพื่อโหลดไลบรารีที่ไม่บังคับ

ในกรณีที่ง่ายที่สุด บูตสแtrap v3 จะระบุเฉพาะพารามิเตอร์คีย์ API ดังนี้

<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>

ตัวอย่างด้านล่างขอ Maps JavaScript API v2 เวอร์ชันล่าสุดเป็นภาษาเยอรมัน

<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>

ตัวอย่างด้านล่างคือคําขอที่เทียบเท่าสําหรับ v3

<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>

ขอแนะนําเนมสเปซ google.maps

การเปลี่ยนแปลงที่เห็นได้ชัดที่สุดใน Maps JavaScript API v3 คือการเปิดตัวเนมสเปซ google.maps API v2 จะวางออบเจ็กต์ทั้งหมดในเนมสเปซส่วนกลางโดยค่าเริ่มต้น ซึ่งอาจส่งผลให้เกิดชื่อทับซ้อนกัน ใน v3 ออบเจ็กต์ทั้งหมดจะอยู่ภายในเนมสเปซ google.maps

เมื่อย้ายข้อมูลแอปพลิเคชันไปยัง v3 คุณจะต้องเปลี่ยนโค้ดเพื่อใช้ประโยชน์จากเนมสเปซใหม่ ขออภัย การค้นหา "G" แล้วแทนที่ด้วย "google.maps" นั้นใช้ไม่ได้ผลทั้งหมด แต่นี่เป็นกฎง่ายๆ ที่ควรใช้เมื่อตรวจสอบโค้ด ด้านล่างนี้คือตัวอย่างคลาสที่เทียบเท่ากันใน v2 และ v3

v2 v3
GMap2 google.maps.Map
GLatLng google.maps.LatLng
GInfoWindow google.maps.InfoWindow
GMapOptions google.map.MapOptions
G_API_VERSION google.maps.version
GPolyStyleOptions google.maps.PolygonOptions
or google.maps.PolylineOptions

การนำโค้ดที่ล้าสมัยออก

Maps JavaScript API เวอร์ชัน 3 มีฟังก์ชันการทำงานส่วนใหญ่ที่คล้ายกับเวอร์ชัน 2 แต่มีบางคลาสที่ระบบไม่รองรับแล้ว ในการย้ายข้อมูล คุณควรแทนที่คลาสเหล่านี้ด้วยไลบรารียูทิลิตีของบุคคลที่สาม หรือนําการอ้างอิงเหล่านี้ออกจากโค้ด ไลบรารี JavaScript ที่ยอดเยี่ยมมีอยู่มากมายซึ่งให้ฟังก์ชันการทำงานที่คล้ายกัน เช่น Closure หรือ jQuery

คลาสต่อไปนี้ไม่มีคู่กันใน Maps JavaScript API v3

GBoundsGLanguage
GBrowserIsCompatibleGLayer
GControlGLog
GControlAnchorGMercatorProjection
GControlImplGNavLabelControl
GControlPositionGObliqueMercator
GCopyrightGOverlay
GCopyrightCollectionGPhotoSpec
GDownloadUrlGPolyEditingOptions
GDraggableObjectGScreenOverlay
GDraggableObjectOptionsGStreetviewFeatures
GFactualGeocodeCacheGStreetviewLocation
GGeoAddressAccuracyGStreetviewOverlay
GGeocodeCacheGStreetviewUserPhotosOptions
GGoogleBarGTileLayerOptions
GGoogleBarAdsOptionsGTileLayerOverlayOptions
GGoogleBarLinkTargetGTrafficOverlayOptions
GGoogleBarListingTypesGUnload
GGoogleBarOptionsGXml
GGoogleBarResultListGXmlHttp
GInfoWindowTabGXslt
GKeyboardHandler

การเปรียบเทียบโค้ด

มาเปรียบเทียบแอปพลิเคชัน 2 รายการที่ค่อนข้างเรียบง่ายซึ่งเขียนด้วย API เวอร์ชัน 2 และ 3

<!DOCTYPE html>
<html>
  <head>
    <script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(
            document.getElementById('map'));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
        map.setUIToDefault();

        map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));

      }
    }
    </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map"></div>
  </body>
</html>
    
<!DOCTYPE html>
<html>
  <head>
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      var map = new google.maps.Map(
        document.getElementById('map'), {
          center: new google.maps.LatLng(37.4419, -122.1419),
          zoom: 13,
          mapTypeId: google.maps.MapTypeId.ROADMAP
      });

      var marker = new google.maps.Marker({
            position: new google.maps.LatLng(37.4419, -122.1419),
            map: map
      });

    }
    google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>
    

อย่างที่เห็น แอปพลิเคชัน 2 ตัวนี้มีความแตกต่างกันหลายประการ การเปลี่ยนแปลงที่สำคัญมีดังนี้

  • ที่อยู่ที่ใช้โหลด API มีการเปลี่ยนแปลง
  • คุณไม่จำเป็นต้องใช้เมธอด GBrowserIsCompatible() และ GUnload() ใน v3 อีกต่อไป และเราได้นำเมธอดดังกล่าวออกจาก API แล้ว
  • ระบบจะแทนที่ออบเจ็กต์ GMap2 ด้วย google.maps.Map ในฐานะออบเจ็กต์กลางใน API
  • ตอนนี้ระบบจะโหลดพร็อพเพอร์ตี้ผ่านคลาส Options ในตัวอย่างข้างต้น เราได้ตั้งค่าพร็อพเพอร์ตี้ 3 รายการที่จําเป็นสําหรับการโหลดแผนที่ ซึ่งได้แก่ center, zoom และ mapTypeId ผ่านออบเจ็กต์ MapOptions ที่ฝังอยู่
  • UI เริ่มต้นจะเปิดอยู่โดยค่าเริ่มต้นในเวอร์ชัน 3 คุณปิดใช้การตั้งค่านี้ได้โดยการตั้งค่าพร็อพเพอร์ตี้ disableDefaultUI เป็น true ในแอบเจ็กต์ MapOptions

สรุป

ตอนนี้คุณคงได้ทราบข้อมูลคร่าวๆ เกี่ยวกับประเด็นสำคัญบางประการเกี่ยวกับการย้ายข้อมูล Maps JavaScript API จากเวอร์ชัน 2 ไปยังเวอร์ชัน 3 แล้ว คุณอาจต้องทราบข้อมูลเพิ่มเติม แต่ข้อมูลจะขึ้นอยู่กับแอปพลิเคชันของคุณ ในส่วนต่อไปนี้ เรามีวิธีการย้ายข้อมูลสำหรับกรณีเฉพาะที่คุณอาจพบ นอกจากนี้ เรายังมีแหล่งข้อมูลมากมายที่อาจเป็นประโยชน์ในระหว่างกระบวนการอัปเกรด

หากพบปัญหาหรือมีข้อสงสัยเกี่ยวกับบทความนี้ โปรดใช้ลิงก์ส่งความคิดเห็นที่ด้านบนของหน้านี้

ข้อมูลอ้างอิงโดยละเอียด

ส่วนนี้จะแสดงการเปรียบเทียบโดยละเอียดของฟีเจอร์ยอดนิยมสำหรับทั้ง Maps JavaScript API เวอร์ชัน 2 และ 3 แต่ละส่วนของการอ้างอิงออกแบบมาเพื่อให้อ่านแยกกันได้ เราขอแนะนําว่าอย่าอ่านข้อมูลอ้างอิงนี้จนจบ แต่ให้ใช้เนื้อหานี้เพื่อช่วยในการย้ายข้อมูลทีละกรณี

  • เหตุการณ์ - การลงทะเบียนและการจัดการเหตุการณ์
  • การควบคุม - การจัดการตัวควบคุมการนำทางที่ปรากฏบนแผนที่
  • การวางซ้อน - การเพิ่มและแก้ไขวัตถุบนแผนที่
  • ประเภทแผนที่ - ไทล์ที่ประกอบกันเป็นแผนที่ฐาน
  • เลเยอร์ - การเพิ่มและแก้ไขเนื้อหาเป็นกลุ่ม เช่น เลเยอร์ KML หรือเลเยอร์การจราจร
  • บริการ - การทำงานร่วมกับบริการการแปลงพิกัดภูมิศาสตร์ เส้นทาง หรือ Street View ของ Google

กิจกรรม

รูปแบบเหตุการณ์ของ Maps JavaScript API เวอร์ชัน 3 คล้ายกับที่ใช้ในเวอร์ชัน 2 แม้ว่าจะมีการเปลี่ยนแปลงหลายอย่างอยู่เบื้องหลัง

การควบคุม

Maps JavaScript API จะแสดงตัวควบคุม UI ที่ช่วยให้ผู้ใช้โต้ตอบกับแผนที่ได้ คุณสามารถใช้ API เพื่อปรับแต่งลักษณะที่ตัวควบคุมเหล่านี้ปรากฏ

การวางซ้อน

การวางซ้อนแสดงวัตถุที่คุณ "เพิ่ม" ลงในแผนที่เพื่อกำหนดจุด เส้น พื้นที่ หรือคอลเล็กชันของวัตถุ

ประเภทแผนที่

แผนที่ที่มีให้ใช้งานใน v2 และ v3 จะแตกต่างกันเล็กน้อย แต่แผนที่พื้นฐานทุกประเภทจะใช้ได้กับ API ทั้ง 2 เวอร์ชัน โดยค่าเริ่มต้น v2จะใช้ไทล์แผนที่ถนน "วาด" มาตรฐาน อย่างไรก็ตาม v3 กำหนดให้ต้องระบุประเภทแผนที่ที่เฉพาะเจาะจงเมื่อสร้างออบเจ็กต์ google.maps.Map

เลเยอร์

เลเยอร์คือวัตถุบนแผนที่ที่ประกอบด้วยการวางซ้อนอย่างน้อย 1 รายการ โดยสามารถจัดการเป็นหน่วยเดียวและโดยทั่วไปจะแสดงถึงกลุ่มของวัตถุ

บริการ