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 นะครับ แล้วจะนำไปปรับปรุงสำหรับตอนต่อๆไปครับ

  • admintater

    พี่ครับผมนำ map ลงเว็บได้แล้ว
    แต่ภาษาอ่านไม่ออกนะครับ
    ต้องแก้ยังไงครับ

  • tanomsak

    หมายถึงภาษาตรงไหนครับ

  • tanomsak

    Test

  • http://www.utcc.ac.th/ leeyoungmin

    ขอบคุณมากเลยครับ ไม่เป็นไรครับ เนื้อหาสาระ ก็ต้องยาว เป็นธรรมดา ติดตามนะครับ..อธิบายได้ดี

  • http://xn--22cj3cg0cga0ae5a7a3bp7bd4o0frch.com วังน้ำเขียว

    แต้งหลายๆค๊าบ

    ———————————————————————————————————-

    Comment(1) Share This edit

  • tstafnvfsi

    เป็นบทความที่ดีมากๆเลยครับ ขอบคุณมากครับ กำลังสนใจเรื่องนี้อยู่พอดีเลย ^^

  • มือใหม่

    อยากทราบว่า Google Map สามารถเขียนโค๊ดบอกระยะทางได้หรือเปล่าค่ะ เช่น กรุงเทพไปเชียงใหม่ ค่ะ

  • มือใหม่

    อยากทราบว่าสามารถทำ google map บอกระยะทางได้ไหมค่ะ เช่น จากกรุงเทพไปเชียงใหม่เป็นระยะทางเท่าไหร่

  • tanomsak

    ได้ครับ ใช้ GDirections ครับ

    // map คือ ตัวแปลที่เรา define GMap2 ครับ ส่วน routes คือ div ที่เอาไว้แสดงคำอธิบายเส้นทาง

    var dirn = new GDirections(map, document.getElementById(“routes”));
    dirn.load(“from: 12.841101,100.555886 to: 13.841101,100.575886″);

  • Pingback: การหาเส้นทางโดย Google Maps API (GDirection) — tanomsak.com

  • dashzaki

    พี่ครับผมกำลังทำโปรเจ็ค ผมจะเขียนค่าจาก form แล้วส่งมาไปที่ฝั่ง server แล้วให้มันแสดงค่าบน google map ต้องทำไงอ่ะครับ ถ้าพี่งง ประมาณนี้เลยครับ http://tourismthailand.org/google_map/index.php#

  • boomiejy

    กำลังจะทำโปรเจคต้องใช้เรื่องนี้เหมือนกันคะ

    ขอบคุนที่แบ่งปันความรู้ค่ะ

  • tanomsak

    ยินดีที่มีประโยชน์ครับ

  • boomiejy

    พี่ตอบcommentเร็วจังค่ะ ^^

    พี่คะๆพี่เขียน tutorial ข้างๆผิดปะคะเปนตัว U แทน O นะค่ะ

    Tuturials <<อ่ะคะ

  • tanomsak

    ขอบคุณครับที่ช่วยดู แก้ไขแล้วครับ :)

  • aofkub0819679369

    ทำไมข้อ 3 ถึงมองไม่เห็นโค้ดครับ

  • KU57

    รู้สึกดีใจที่เข้ามาเจอนาย
    คือเราสนใจ ที่เอา Google Map มาใช้กับงานของ บริษัท แต่กลัวความลับของบริษัทหลุด ไม่รู้ว่าควรทำอย่างไร
    เนื่องจากว่าเพิ่งสนใจ ใน Google Map แต่เดิมเคยใช้ GGE แต่ GGE ไม่มี แผนที่แบบ Google Map พอพิมพ์ข้อมูลออกมามองไม่เห็นชื่อถนน

  • http://www.triphunsa.com/blog Trip Hunsa

    ขอบคุณสำหรับเนื้อหาดีๆ ครับ
    ผมกำลังทำเว็บเพื่อให้ความรู้เกี่ยวกับการทำเว็บแผนที่ Google map เหมือนกันครับ Theme ของ Blog ของผม จะออกแนวชวนผู้อ่านสร้างเว็บแผนที่ด้วย Google map ครับ โดยผมจะค่อยๆ แทรกเนื้อหาด้านเทคนิคต่างๆ เข้าไปให้ผู้อ่านได้รับสาระแบบไม่เครียดเกินไป ผมลองดู search ดูเว็บไทยที่ให้ความรู้ลักษณะเดียวกันดู ก็เจอเว็บนี้ล่ะครับ เนื้อหากระชับดีครับ แต่เสียดายจังเลยครับที่ link ของรองศาสตราจารย์สวัสดิ์ชัย เกรียงไกรเพชร (ด้านบน) มัน link ไปเจอ Error 404 ครับ
    ว่างๆ ก็แวะเข้าไปติชมกันบ้างนะครับ http://www.triphunsa.com/blog

  • tanomsak

    ยินดีที่มีคนสนใจเรื่องนี้ แถมยังทำเวปที่น่าสนใจขึ้นมาด้วยครับ แล้วจะคอยติดตามครับ

  • http://www.utcc.ac.th/ ศึกษาต่อ

    ขอบคุณครับผม..เจ๋งมากครับ…หูตาสว่างขึ้นเยอะเลยครับผม

  • ช่วยทีครับ

    งง ข้อ 4 อ่ะครับ – -

  • tanomsak

    ก็หมายถึงต้องสร้าง markup <div id=”map”></div> โดยกำหนด ID ไว้ด้วย จะชื่อ map หรืออะไรก็ได้ครับ แต่ว่าต้องใส่ค่า ID ที่จตั้งให้กับ script เพื่อบอกว่าจะแสดง Google Maps ใน Div ไหนครับ

  • Nujarmai

    โทษนะครับ ตอนนี้ถ้าจะพัฒนา google map ใน web เข้าเราเอง ผมควรจะพัฒนา ใน version ไหนดีอะครับ api v2 หรือ v3 ดีครับ

    ขอบคุณครับ

  • tanomsak

    V3 ไปเลยครับ feature ออกมาค่อนข้างครบแล้ว และ V2 ไม่มีการพัฒนาต่อแล้วครับ

  • Nujarmai

    โอเคครับ….. เพราะตอนนี้กำลังจะเริ่มเขียนดูอะครับ…..ได้เวปที่นี้ช่วยได้เยอะเลยครับผม….ขอบคุณมากนะครับ

  • Avaj

    var dirn = new GDirections(map, document.getElementById(“routes”));
    dirn.load(“from: 12.841101,100.555886 to: 13.841101,100.575886″);

    อยากทราบว่า ตรงตัวเลข คืออะไรค่ะ นั้นคือ จุด บ่งบอกสถานที่นั้นหรือค่ะ

    แล้วเราตะรู้ได้ค่ะ ว่าจากตรงนี้ไปถถึงตรงนี้ ต้องหมายเลข นี้ค่ะ

    ปล. กำลังทำโปรเจค เกี่ยวกับแผนที่เสมือนจริง สว่างเลยค่ะ ขอบคุณความรู้แบบนี้นะคะ

  • vanilla

    ขอบคุณมากๆ เลยนะครับ
    ได้ความรู้เยอะมากๆ
    ได้เอาไปใช้ในโปรเจคแน่ๆ : )

  • Icyjoy

    ขอบคุณมากค่ะ^^

  • janjira

    พี่ค่ะพอดีหนูจาทำโปรเจคจบเกี่ยวกับ google map api

    พี่ช่วยด้วยนะค่ะ

  • tanomsak

    สวัสดีครับ ถ้ามีคำถามหรือทำแล้วติดตรงไหนก็ถามได้ครับ ส่งมาตรง contact ก็ได้ครับ

  • Programmeraek

    อยากให้เอาใส่ app desktop นะ ทำได้ไม่อะคับ

  • Programmeraek

    เเต่เเค่นี้ก็สุดยอดไปเลยคับขอบคุณมากคับผม

  • MagaNosferatu

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

  • Boy

    ลิ้งเว็บ ที่แจ้งโหลดไม่ได้ครับ
    รบกวนช่วยแก้ให้หน่อยครับ

  • Guest

    อยากทราบว่า google map มี api ที่แสดงตำแหน่งปัจจุบันที่เราอยู่รึเปล่าครับ

  • http://twitter.com/ipeaw Ipeaw

    ใช่ครับอยากได้ code นี้มากเลยครับพี่

  • tanomsak

    ลองดูตัวอย่างที่นี่นะครับ http://code.google.com/apis/maps/documentation/javascript/basics.html#DetectingUserLocation

  • Kuyyuth

    ฝากเนื้อฝากตัวด้วยครับ ตอนนี้อยู่ช่วงกำลังศึกษาโดยใช้ เจ้าตัว API V3 ไงจะมารบกวนบ่อยๆๆน๊าครับ

    ท่าดีออนเอมหรือเปล่าครับ หรือ อีเมลก็ได้ขอด้วยก็ดีมากมายครับ อิอิ

  • Home_tai

    กำลังทำโปรเจคเรื่อง google map api อยู่ค่ะ
    ช่วยได้มากเลยค่ะ ขอบคุณมากนะค่ะ

  • KD#35

    พี่คับคือผมมีปัญหาเรื่อง google map นิดหน่อยอ่ะคับ แก้ไม่ได้ซักที พี่พอจะช่วยได้มั้ยคับ

    คือหน้าเว็บที่ทำนี่ http://uinnkhonkaen.com/location.php แล้วผมอยากจะเปลี่ยน marker ตรงโรงแรมให้เป็นรูปนี้อ่ะคับ

    http://maps.google.com/mapfiles/kml/paddle/blu-stars.png แก้ไม่ได้ซักที พี่พอจะช่วยได้มั้ยคับ

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

  • Cs-_-evolution

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

  • Cs-_-evolution

    ยังรอให้พี่มาช่วยตอบอยู่นะครับ รบกวนด้วยครับ

  • Zerowolrd

    ขอบคุณจากใจเลยครับ กำลังจะเริ่มศึกษา api map พอดีเลยครับ

    รบกวนถามอีกนิดได้ไหมครับ ถ้าเราจะ set ให้ map ที่แสดงออกมา local เป็นที่ประเทศไทยนี่ต้องไปกำหนดตรงไหนครับ

  • Bank

    บทความดีมากๆๆๆเลยครับผม :D ขอบคุณมากๆครับ

  • AthiKan Buathong

    อยากจะกราบพี่เป็นอาจารย์ จริงๆๆ ครับ เก่งมากเลย
    เอ่อ คืองี้ คับ ผมมันพวกหัวช้า อยากให้พี่ช่วย ทำเป็น VDO การทำสอนให้หน่ออยได้ใหม ครับ
    เป็นพระคุณ อย่างสูง คับ

  • ShoeGars

    Thx kub

  • Wow1973

    http://202.143.157.35/2555sp2/indexgis.php
    อันนี้เขาทำอย่างไรครับ..อยากทำเป็นแบบนี้จัง เอาฐานข้อมูลมาประยุกต์ใช้ด้วย

  • Sasita77

    จิ๊ก
     เข้าไป My wed site URL:htto://www.fahsai-cosmetic.com  แล้วกด Generate API Key ไม่เห็นมีอะไรเกิดข้นเลยค่ะไม่รู้ว่าทำตรงไหนผิดหรือ domain ยังไม่ได้จดแล้วต้องจดยังไง งง มากเลยช่วยหน่อยนะค่ะ

  • Kpp_betterman

    เป็นประโยชน์มากๆๆ ขอบคุณครับ

  • Psakoolrat

    การสมัครใช้กับพวก dynamic dns ได้ไหมครับ พวก no-ip หรือ dyndns อ่ะครับ