Random Thoughts on Random Things by Tanomsak
Random header image... Refresh for more!

Tutorial แบบบ้านๆ ตอนที่ 1 – Basic Google Maps API

08 Dec 2008

ตอนผมทำเวป ddproperty.com อยากจะเอา Google Maps มาใช้ระบุตำแหน่ง ก็เลยหาข้อมูลจากหลายๆที่ ทั้งดูตัวอย่างจากเวป แล้วก็หาอ่านจาก เอกสารของ google และ Google Maps Tutorial รวมถึงเอกสาร การใช้ Google Maps API ที่ รองศาสตราจารย์สวัสดิ์ชัย เกรียงไกรเพชร รวบรวมไว้ซึ่งละเอียดมากๆ ถ้าใครต้องการเนื้อหาแบบละเอียดๆ ก็ลองอ่านดูได้จาก link ข้างต้นไม่ผิดหวังครับ

แต่ที่ผมจะเขียนนี้ขอเป็น Google Maps Tutorial แบบบ้านๆ รวบรวมเฉพาะส่วนที่ผมใช้เป็นหลักในเวป ddproperty.com โดยจะแบ่งเป็นตอนๆแบบนี้ครับ

  1. Basic Google Maps API
  2. แสดงหมุดจาก database ใน Google Maps
  3. แสดงหมุดจาก database ใน Google Maps ด้วย AJAX
  4. เพิ่มหมุดใน database
  5. ใช้รูปภาพแทนหมุด (Custom Marker Icon)
  6. การทำ Custom marker icon สำหรับ Google Static Maps
  7. ใช้รูปภาพแทนปุม control (Custom Control)
  8. สร้าง info windows แบบลอยนอกแผนที่
  9. แล้วแต่จะคิดออกต่อๆำไปครับ
แต่ก่อนอื่นขอออกตัวไว้ก่อนเลยนะครับ ว่าผมก็ไม่ใช่กูรูอะไร แต่คิดว่าน่าพอจะมีประโยชน์ช่วยให้หลายๆคน เริ่มใช้งานได้เร็วขึ้นเลยเอามาแบ่งบันกัน แนะนำติชมได้เลยนะครับ ยินดีมากๆ

ออกตัวเสร็จแล้วก็เริ่มตอนที่ 1 กันดีกว่า

ในการจะนำ Google Maps มาใส่ในเวปของเราเนี้ยจริงๆแล้วมันมีได้ 2 แบบคือ

  • แบบที่ใช้บริการจำพวก My maps ของ Google แบบนี้ใช้งานง่ายมากแค่แปะ link ในหน้า source code ของเวปก็แสดงแผนที่ได้แล้ว (แนะนำหนังสือ Google Maps มหัศจรรย์แผนที่ออนไลน์ ครับ) แต่ว่ามีข้อจำกัดในการทำลูกเล่นต่างๆและ ไม่สามารถแสดงข้อมูลที่อยู่ใน database ของเราเองได้
  • กับแบบที่แสดงแผนที่โดยใช้ Google Maps API จะสามารถปรับหน้าตาแผนที่ได้ และจะสามารถแสดงหมุดจาก database ของเราเอง หรือเพิ่มหมุดลงใน database ก็ได้ครับ

ที่ผมกำลังจะเขียนถึงเป็นแบบที่สอง คือ Google Maps API ครับ

ขั้นตอนที่ 1: ขอใช้ API Key สำหรับใช้งาน Google Maps

ขั้นแรกก็ต้องขอ API Key จาก Google ก่อนครับ โดยทำได้ง่ายมากๆ แค่มี account ของ google (ก็ account gmail นั้นแหละครับ) ก็เป็นอันใช้ได้ โดยไปที่ http://www.google.com/apis/maps/signup.html พออ่าน Term of Service จบแล้ว ก็ใส่ domain name ของเวปเรา ที่จะใช้ Google Maps API ในกล่้อง My web site ตามรูปครับ

เช่นถ้าจะใช้ Google Maps API กับเวป ddproperty.com ก็ใส่ http://www.ddproperty.com ลงไปจะทำให้สามารถใช้ Google Maps API กับทุกๆหน้าภายใตั domain www.ddproperty.com ได้ (sub domain ไม่ได้นะครับ ต้องขอ API key อันใหม่)

ในช่วง development ที่ยังไม่ได้จด domain ก็ใส่ http://localhost/ ไปได้เลยครับ แล้วก็เข้าหน้าทดสอบผ่านทาง url localhost เอา

สามารถขอได้หมายๆอันนะครับ ไม่ต้องกลัวหมด :) ผมขอมาทดลองหลายอันแล้ว

ขั้นตอนที่ 2: แปะ script สำหรับ Google Maps API และเรียกใช้งาน

พอกด Generate API Key ในขั้นแรกแล้วก็จะได้ API Key มา พร้อมด้วยตัวอย่างการนำไปใช้ในเวปของเราตามรูปข่างล่าง

จริงๆแล้วเจ้า Google Maps API เนี้ยมันก็คือ javascript functions ชุดนึงที่ Google เขียนขึ้นเพื่อให้เราเรียกใช้เพื่อสร้างแผนที่ในเวปเรา จากตัวอย่างที่ได้มาจากการสร้าง API Key จะเห็นได้ว่าการเรียกใช้งาน Google Maps API เนี้ยแบ่งเป็น 4 ส่วนใหญ่ๆครับ

  1. การ include Google Maps API (external javascript จาก google) เข้ามาในหน้าเวปเรา ตาม script ข้างล่างโดย v=2 หมายถึง API version 2 ซึ่งเป็นเวอร์ชั่นหลักในปัจจุบัน และ key=api_key ก็คือค่า API Key ของเราถ้าพัฒนาเสร็จแล้วก็ไปขอ API Key ใหม่โดยใช้ domain name ของจริงแล้วก็นำมาแทนที่ตรงนี้ครับ
  2. <script src="http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;amp;v=2&amp;amp;amp;amp;amp;amp;amp;amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQKXEKxoc7nW6rPe_Qv-bqip6q6Kw" type="text/javascript"></script>
    
  3. เขียน javascript เพื่อเรียกใช้งาน Google Maps API จาก script จะเห็นการเรียก function GBrowserIsCompatible() เพื่อเป็นการตรวจสอบว่า browser รองรับหรือเปล่าก่อนจะสร้าง object map อันนี้เป็น pattern ในการเริ่มสร้าง map เลยครับ ที่อยากให้สังเกตุอีกอันนึงคือ GMap2(document.getElementById(“map”)); parameter ที่ใช้ในการสร้าง object GMap2 เป็นชื่อของ DIV Element ที่จะให้ google ใช้เป็นพื้นที่ของแผนที่
  4. <script type="text/javascript">// <![CDATA[
    
    //<![CDATA[
    
    function load() {
    if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    }
    }
    
    // ]]></script>
    
  5. ต่อไปก็เป็นส่วนเรียกใช้ function load() ที่เขียนเอาไว้ โดยจากตัวอย่างของ Google เค้าเขียนง่ายๆ โดยการผูกกับ Event onload ของ Page body ส่วน GUnload() ที่ผูกไว้กับ Event onunload เป็น function ของ Google Maps ครับ เอาไว้ release memory ป้องกันพวก memory leak ประมาณนั้น ใส่ไว้กันเหนียว
  6. 
    
  7. จาก script ในข้อ 3 อยากให้สังเกตุ DIV Element ที่มี id=”map” ครับ พื้นที่ตรงนี้แหละครับที่จะถูกแสดงแผนที่ ตามที่เรากำหนดไว้ใน function load() ในส่วนที่ 2 เราสามารถกำหนดขนาดเล็กใหญ่ของแผนที่ได้ โดยกำหนด style ให้กับ DIV Element อันนี้ครับ

เท่านี้ก็เป็นอันเสร็จการเพิ่มแผนที่ Google Maps เข้าไปในเวปของเราแล้วครับ ลองดูผลงานจากตัวอย่าง เขียนไปเขียนมาทำไมมันยาวจัง แล้วตอนต่อไปมันจะยาวขนาดไหนเนี้ย :)

ผมเขียนแล้วอ่านรู้เรื่องไหมครับ แนะนำและแสดงความคิดเห็นใน comment นะครับ แล้วจะนำไปปรับปรุงสำหรับตอนต่อๆไปครับ

  • Pingback: Tutorial แบบบ้านๆ ตอนที่ 2 - เพิ่มและแสดงหมุดใน Google Maps — tanomsak.com

  • http://www.bs2network.com ฐิติพงศ์

    ขอบคุณมากครับ อ่านแล้วทดลองทำก่อนนะครับ เดี๋ยวจะแจ้งผลให้ทราบ

  • tanomsak

    ครับผม ขอบคุณที่สนใจแล้วก็คำขอบคุณครับ

  • http://www.mae-or.com ฐิติพงศ์

    ไม่เคยอ่าน วิธีการทำอะไรง่าย ๆ แบบนี้มาก่อนเลยครับ เยี่ยมมากครับ ขอยกนิ้วให้ ถ้าแต่งหนังสือขายเมื่อไร บอกด้วยนะครับ นี่คือตัวอย่างที่ผม ได้ความรู้จากท่าน ลองทำดูครับ ขอบคุณมากจริง ๆ http://www.mae-or.com/map.html

  • ฐิติพงศ์

    อ่านแล่วเข้าใจครับ ลองทำดูแล้วครับ เข้าไปดูได้ครับ ขอบคุณมากนะครับ http://www.mae-or.com/map.html

  • http://www.mae-or.com ฐิติพงศ์

    ไม่เคยอ่าน วิธีการทำอะไรง่าย ๆ แบบนี้มาก่อนเลยครับ เยี่ยมมากครับ ขอยกนิ้วให้ ถ้าแต่งหนังสือขายเมื่อไร บอกด้วยนะครับ นี่คือตัวอย่างที่ผม ได้ความรู้จากท่าน ลองทำดูครับ ขอบคุณมากจริง ๆ http://www.mae-or.com/map.html

  • tanomsak

    ดีใจที่นำไปใช้ประโยชน์ได้ครับ เล่นเอาตัวลอยเลยครับ :)

  • ^^

    กำลังทำโปรเจคอยู่เลย อยากรู้เรื่องอีกเยอะๆๆๆๆ

    ขอบคุณมากนะค่ะ ช่วยได้เยอะเลย

    ขอบคุณมากจิงๆๆ เอามาอีกนะค่ะ

  • tanomsak

    อยากให้เขียนถึงส่วนไหนแนะนำได้นะครับ ถ้าผมทราบก็จะลองเขียนให้อ่านกันครับ ขอบคุณที่ติดตามครับ

  • songwut

    ขอบคุณมากเลยครับ

    กำลังทำโปรเจคอยู่เลย

    ช่วยแนะนำด้วยน่ะครับ

    ตัวอย่างโปรเจคที่ผมจะทำ http://www.panoramio.com

    อยากให้ช่วยดูและแนะนำหน่อยครับว่าควรทำอย่างไร

  • light

    ผมขอบคุณมากเลยครับในเรื่องนี้กำลังศึกษาทำโปรเจคจบอยู่เลย
    เข้าไปดูในเว็บของพี่แล้วชอบมากเลยครับ
    อยากให้สอนวิธีการทำอะครับ

  • elle

    ขอบคุณมากค่ะ เป็นเวปที่ดีมากเลย กำลังศึกษาทำโปรเจคอยู่พอดีค่ะ อยากให้มีมาอีกเรื่อยนะค่ะ

  • http://www.bkk10140.com kan

    ขอถามหน่อยค่ะ ว่าทำไมเวลาของ key api google แล้วไปแปะบนเว็บ แล้วมันฟ้อง ว่า ให้ขอใหม่ key ตัวนี้เคยใช้กับที่อื่นแล้ว ทั้งๆ ที่ domain เป็นของเราเองอ่ะ

  • palmmy_little

    เยี่ยม เป็นบทความที่ให้ความรู้ที่ดีครับ

  • http://www.bkk10140.com kan

    มีปัญหาเรื่อง gen key api google map อ่ะค่ะ

  • http://www.ideezign.com dynaz

    เยี่ยม คับ หาอ่านยาก เลย ขอบคุณสำ หรับ ความรู้ที่แบ่งปัน น่ะครับ…

    dynaz of iDeeZiGn

    http://www.ideezign.com

  • ยุ้มยิ้ม

    กำลังทำวิจัยเหมือนกันค่า แบบว่าทำอะไรไม่เป็นเลย
    อยากรู้ว่าได้โค้ดมาแล้วเอาไปใส่ที่ไหนหรอคะ
    ใช้ localhost อะค่ะ

  • ยุ้มยิ้ม

    ยัง งงอยู่ค่ะ กำลังทำโปรเจคด้วย
    แบว่าเอาโค้ดที่มันให้มาไปลอง
    เรียกแผนที่ดู ในlocalhost แต่มันไม่ออกมาอะค่ะ
    ไม่รุ้ว่าerrormไหน และก็ไม่รู้ว่าทำถูกมั้ยด้วย – -”

  • tanomsak

    สำหรับ http://localhost/ สามารถใช้ API key ข้างล่างได้เลยครับ ทดลองโดย copy html source code จากตัวอย่างข้างบน แล้วเปลี่ยน API key เป็นข้างล่างดูนะครับ

    ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQKXEKxoc7nW6rPe_Qv-bqip6q6Kw

    ถ้าไม่ได้ลองขอ API key ใหม่โดยใส่ url เป็น htpp://localhost นะครับ เผื่อผม copy paste ไม่ครบ ได้ไม่ได้ก็ comment บอกนะครับ

  • wordpress
  • http://thowr.blogspot.com/ siriporn

    ยังงงคะ ได้ กด Generate API Key แล้วเอาไปใส่ blogger อย่างไรคะ

  • rexchrono

    ผม กำลังศึกษาอยู่นะคร้บและอยากจะทราบว่า ถ้าเราจะปักหมุดเนี่ย
    เราต้องทำยังไงบ้างครับ แบบว่า ปัก ลง ดาต้าเบส ด้วยอ่ะคร้บ

    ช่วยหน่อย ครับ โปรเจคผมล่ม ไปครั้งหนึ่งละ

    กำลังวางแผนโปรเจคใหม่

  • tanomsak

    ลองดูที่ http://www.tanomsak.com/index.php/2008/12/googl… นะครับ เผื่อเป็นแนวทางได้

  • http://www.preor.co.cc/ space

    ขอบคุณมากครับ

  • prasopsuk

    ง่ายและเข้าใจได้เร็ว
    ขอบคุณครับ

  • Pingback: การทำ Custom marker icon สำหรับ Google Static Maps — tanomsak.com

  • http://www.facebook.com/people/Abhisak-Chonchanakul/605258725 Abhisak Chonchanakul

    ให้ความรู้มากครับ

  • http://twitter.com/kobdesign kobdesign

    สำหรับเริ่มต้นนี่เป็นตัวอย่างที่ีดีมากครับ ขอบคุณครับ

  • rung

    อยากถามเรื่องการปักหมุดลงไปบนแผนที่อ่ะ
    แบบผู้ใช้สามารถปักหมุดเองได้ โดยไม่จำเป็นว่าadminต้องเพิ่มหมุดไปในdatabaseเอง
    โปรดตอบกลับมาที่เมล mazdog_rb@hotmail.com
    ขอบคุณล่วงหน้านะค่ะ

  • tanomsak

    ลองดูที่ http://www.tanomsak.com/index.php/2008/12/googl… นะครับ เผื่อเป็นแนวทางได้

  • rung

    โค้ดตรงส่วนไหนอ่ะค่ะ
    ที่บอกว่าให้เลือว่าจะเอาแบบดาวเทียมหรือแบบภูมิประเทศ
    ขอโค้ดส่วนนั่นด้วยนะค่ะ

  • tanomsak

    ประเภทของแผนที่เป็น options อันนึงตอนสร้าง map ครับ

    var map = new GMap2(document.getElementById(“map”), {mapTypes: G_DEFAULT_MAP_TYPES[G_SATELLITE_MAP] });

    โดยปกติ G_DEFAULT_MAP_TYPES มีอยู่สามแบบครับ คือ G_NORMAL_MAP, G_SATELLITE_MAP, and G_HYBRID_MAP

    แต่ถ้าอยากให้ผู้ใช้เลือกประเภทของแผนที่ได้ ก็ต้อง สร้าง map type control หลังจาก สร้างแผนที่แล้วครับ

    map.addControl(new GMapTypeControl());

  • http://www.iraming.com/ ฟลุ๊ค

    สวัสดีครับ

    ผมเจอ blog ของคุณจนได้ รออ่านตอนต่อไปอยู่นะครับ ขอบคุณมากครับที่สอนผ่าน blog นี้ครับ จะเข้ามาอ่านทุกอาทิตย์เลยครับ

  • tanomsak

    ยินดีที่มีประโยชน์ครับ ถ้ามีอะำไรสงสัยหรือ มีคำแนะนำก็ยินดีนะครับ แล้วเจอกันแถวๆนี้บ่อยๆนะครับ

  • Name

    อยากถามพี่ tanomsak ว่า สามารถทำให้ google map แสดงเส้นทางมากกว่า 1 เส้นทางได้ไหมค่ะ ช่วยตอบด้วยน่ะค่ะ ขอบคุณค่ะ

  • tanomsak

    เท่าที่ทราบ ตัว API ยังไม่ support alternative routes ครับ แต่ว่า Google Maps มีแล้วไม่นานน่าจะมีใน API ด้วยครับ

    ถ้าใครทราบก็ลองแนะนำได้ครับ

  • Pingback: เรียนรู้ google map api | Select2web.com

  • http://auaupro.hi5.com/ mynumber

    ขอบคุณมาก ครับเิ่มเข้าใจ แล้ว
    เด้วต้องหาวิธีที่ระเอียดกว่านี้ต่อ

    เป็นก้าวแรกที่ดีครับ

  • moomoo

    จากข้อความ

    4.จาก script ในข้อ 3 อยากให้สังเกตุ DIV Element ที่มี id=”map” ครับ พื้นที่ตรงนี้แหละครับที่จะถูกแสดงแผนที่ ตามที่เรากำหนดไว้ใน function load() ในส่วนที่ 2 เราสามารถกำหนดขนาดเล็กใหญ่ของแผนที่ได้ โดยกำหนด style ให้กับ DIV Element อันนี้ครับ

    ข้อ 3 Script ไม่มี ลืมใส่หรือไม่ ถ้าลืมรบกวนด้วยครับ อยากได้ความรู้มากเลยจุดนี้อะครับ climax ขอบพระคุณล่วงหน้าอย่างสูง

  • http://www.facebook.com/flukenakrab Fluke Nakrab

    ทำยังไงให้ใช้ ID ของ Facebook ได้ด้วยอะครับ ><

  • tanomsak

    หมายถึง comment ใช่ไหมครับ

    ผมใช้ comment system ชื่อ disqus ครับ ไม่ใช่ standard ของ wordpress เค้ามี feature รับ id facebook, กับ twitter ให้เรียบร้อยเลย ดีมากๆเลยครับ

  • blossom

    มันขี้นแบบนี้แล้ว ก็ไม่ขึ้นรูปเลย ต้องแก้ไขยังงัยคะ

    The Google Maps API server rejected your request. The “sensor” parameter specified in the request must be set to either “true” or “false”.

  • blossom

    ขึ้นแบบนี้ แก้ไขยังงัยดีคะ

    The Google Maps API server rejected your request. The “sensor” parameter specified in the request must be set to either “true” or “false”.

  • blossom

    แก้ได้แล้วค่ะ เอา sensor ออกซะเลย

  • tanomsak

    กำลังจะตอบเลยครับ :)

  • voravit

    hello

  • http://www.kohsamui-hotels.org/ ตี๋

    ขอถามคุณ tanomsak และท่านที่ทราบเกี่ยวกับ google map api ครับ
    ผมติดปัญหาตรงที่ อยากทำเป็นทำ Link ด้วยภาพจาก PAGE อื่น ๆ หลาย หน้า ครับ ไปที่ marker แต่ marker ครับ โดย marker แต่ละอันสร้างจาก xml ครับ ติดตรงที่จะทำ Link ไปหา marker ยังไงครับเมื่ออคลิกที่ ภาพลิ้งค์ ให้มาร์คเกอร์ ที่เราลิ้งไปหาแอคทีพ แล้วโชว์ infowindow เลยครับ ผมหามาหลายวันแล้ว ไม่ค่อยมีคนเขียนเลยครับ

    ขอคุณครับ
    ตี๋

  • http://www.kohsamui-hotels.org/ ตี๋

    ขอถามคุณ tanomsak และท่านที่ทราบเกี่ยวกับ google map api ครับ
    ผมติดปัญหาตรงที่ อยากทำเป็นทำ Link ด้วยภาพจาก PAGE อื่น ๆ หลาย หน้า ครับ ไปที่ marker แต่ marker ครับ โดย marker แต่ละอันสร้างจาก xml ครับ ติดตรงที่จะทำ Link ไปหา marker ยังไงครับเมื่ออคลิกที่ ภาพลิ้งค์ ให้มาร์คเกอร์ ที่เราลิ้งไปหาแอคทีพ แล้วโชว์ infowindow เลยครับ ผมหามาหลายวันแล้ว ไม่ค่อยมีคนเขียนเลยครับ

    ขอคุณครับ
    ตี๋

  • admintater

    ขอบคุณครับ
    กำลังอยากได้อยู่พอดี
    ศึกษาเว็บอื่นก็มีแต่ภาษาอังกฤษเข้าใจยากนะครับ

  • admintater

    พี่ครับติดตรงที่เปลี่ยนโหมด map เช่น แผนที่ ดาวเทียม นะครับ
    ต้องใช้ Code ตัวไหนครับ
    ขอบคุณล่วงหน้าครับ