<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tanomsak.com &#187; Tutorial</title>
	<atom:link href="http://www.tanomsak.com/index.php/category/tutorial-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tanomsak.com</link>
	<description>Random Thoughts on Random Things by Tanomsak</description>
	<lastBuildDate>Sun, 23 May 2010 08:39:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>การหาเส้นทางโดย Google Maps API (GDirections)</title>
		<link>http://www.tanomsak.com/index.php/2010/01/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%ab%e0%b8%b2%e0%b9%80%e0%b8%aa%e0%b9%89%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%94%e0%b8%a2-google-maps-api-gdirection/</link>
		<comments>http://www.tanomsak.com/index.php/2010/01/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%ab%e0%b8%b2%e0%b9%80%e0%b8%aa%e0%b9%89%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%94%e0%b8%a2-google-maps-api-gdirection/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 06:06:56 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=377</guid>
		<description><![CDATA[เมื่อสองสามวันก่อน มี comment ถามมาว่า &#8220;อยากทราบว่าสามารถทำ google map บอกระยะทางได้ไหมค่ะ เช่น จากกรุงเทพไปเชียงใหม่เป็นระยะทางเท่าไหร่&#8221; ผมก็ตอบไปสั้นๆ วันนี้ขอขยายความเรื่องการหาเส้นทาง และการหาระยะทางจากจุดสองจุดในโดยใช้ Google Maps API ครับ เรื่องนี้เป็นเรื่องที่หลายๆคนสนใจ และเวปใหม่ที่ผมกำลังซุ่มทำอยู่ก็ใช้เยอะมากครับ ใครอ่านภาษาอังกฤษคล่อง และต้องการข้อมูลแบบละเอียด ผมแนะน ลองอ่าน document ของ Google นะครับ http://code.google.com/apis/maps/documentation/services.html#Directions เรามาเริ่มกันเลยดีกว่าครับ อ้อ! วิธีการข้างล่างจะเ็ป็นของ API v2 นะครับ เพราะว่าคนส่วนใหญ่คงยังใช้งาน version 2 กันอยู่ &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; xmlns:v=&#34;urn:schemas-microsoft-com:vml&#34;&#62; &#60;head&#62; &#60;title&#62;Google Maps JavaScript API Example: Simple [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2010%2F01%2F%25e0%25b8%2581%25e0%25b8%25b2%25e0%25b8%25a3%25e0%25b8%25ab%25e0%25b8%25b2%25e0%25b9%2580%25e0%25b8%25aa%25e0%25b9%2589%25e0%25b8%2599%25e0%25b8%2597%25e0%25b8%25b2%25e0%25b8%2587%25e0%25b9%2582%25e0%25b8%2594%25e0%25b8%25a2-google-maps-api-gdirection%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2010%2F01%2F%25e0%25b8%2581%25e0%25b8%25b2%25e0%25b8%25a3%25e0%25b8%25ab%25e0%25b8%25b2%25e0%25b9%2580%25e0%25b8%25aa%25e0%25b9%2589%25e0%25b8%2599%25e0%25b8%2597%25e0%25b8%25b2%25e0%25b8%2587%25e0%25b9%2582%25e0%25b8%2594%25e0%25b8%25a2-google-maps-api-gdirection%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>เมื่อสองสามวันก่อน มี comment ถามมาว่า &#8220;<a href="http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/#comment-32125975">อยากทราบว่าสามารถทำ google map บอกระยะทางได้ไหมค่ะ เช่น จากกรุงเทพไปเชียงใหม่เป็นระยะทางเท่าไหร่</a>&#8221; ผมก็ตอบไปสั้นๆ วันนี้ขอขยายความเรื่องการหาเส้นทาง และการหาระยะทางจากจุดสองจุดในโดยใช้ Google Maps API ครับ เรื่องนี้เป็นเรื่องที่หลายๆคนสนใจ และเวปใหม่ที่ผมกำลังซุ่มทำอยู่ก็ใช้เยอะมากครับ</p>
<p>ใครอ่านภาษาอังกฤษคล่อง และต้องการข้อมูลแบบละเอียด ผมแนะน ลองอ่าน document ของ Google นะครับ <a href="http://code.google.com/apis/maps/documentation/services.html#Directions">http://code.google.com/apis/maps/documentation/services.html#Directions</a></p>
<p>เรามาเริ่มกันเลยดีกว่าครับ อ้อ! วิธีการข้างล่างจะเ็ป็นของ API v2 นะครับ เพราะว่าคนส่วนใหญ่คงยังใช้งาน version 2 กันอยู่</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;  xmlns:v=&quot;urn:schemas-microsoft-com:vml&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;Google Maps JavaScript API Example: Simple Directions&lt;/title&gt;
    &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot;/&gt;
    &lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hRHchrjOSPM-moa2HMmJZw-0fE6VhTsARfVd9x1Dg8TowZALqHIOcO20g&quot;
      type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
	// Create a directions object and register a map and DIV to hold the
    // resulting computed directions

    var map;
    var directionsPanel;
    var directions;

    function initialize() {
      map = new GMap2(document.getElementById(&quot;map_canvas&quot;));
      map.setCenter(new GLatLng(13.998, 100.5009), 15);
      directions = new GDirections(map);
      directions.load(&quot;from: 14.068, 100.6009 to: 13.8152, 100.5606&quot;});
   }
  &lt;/script&gt;
  &lt;/head&gt; 

  &lt;body onload=&quot;initialize()&quot;&gt;
    &lt;div id=&quot;map_canvas&quot; style=&quot;width: 70%; height: 480px; float:left; border: 1px solid black;&quot;&gt;&lt;/div&gt;
    &lt;br/&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>source code ข้างบนผมเอามาจาก Tutorial ของ Google ครับ การใช้ GDirection ง่ายมากครับ โดย code ส่วนที่เกี่ยวข้องจริงๆคือบรรทัดที่ 19-20<br />
<code><br />
directions = new GDirections(map);<br />
directions.load("from: 14.068, 100.6009 to: 13.8152, 100.5606");<br />
</code></p>
<p>บรรทัดที่ 19 เป็นการสร้าง GDirections และระบุว่าให้แสดงเส้นทางใบแผนที่ที่เราสร้างไว้ก่อนหน้านี้<br />
บรรทัดที่ 20 เป็นการเรียกใช้บริการหาเส้นทางจาก Google โดยเราระบุ จุดเริ่มต้นกับปลายทาง</p>
<p>การระบุจุดเริ่มต้นกับปลายทาง สามารถระบุเป็ืนชื่อสถานที่ก็ได้นะครับ แต่ผมว่ามันไม่ค่อยแม่นเนื่องจาก Google ต้องตีความสถานที่ก่อน และระบบ reverse-geocode สำหรับของไทยยังไม่สมบูรณ์ครับ</p>
<p>แค่นี้เราก็จะได้เส้นทางเ็ป็น Polyline บนแผนที่ของเราแล้วครับ</p>
<p>ถ้าต้องการให้ มีข้อความบอกเส้นทางด้วย แบบว่า &#8220;ตรงไป 2 กม. แล้วเลี้ยวซ้าย&#8221; ก็ทำได้ง่ายๆครับ โดยสร้าง div สำหรับแสดงผลขึ้นมาแล้วระบุตอน new GDirections แบบนี้ครับ</p>
<p><code><br />
directionsPanel = document.getElementById("route");<br />
directions = new GDirections(map, directionsPanel );<br />
directions.load("from: 14.068, 100.6009 to: 13.8152, 100.5606", {locale: 'th'});<br />
</code></p>
<p>ตรง {locale: &#8216;th&#8217;} เป็นการบอกว่าให้แสดงข้อความเป็นภาษาไทยครับ</p>
<p>ดูตัวอย่างการใช้หาเส้นทางจาก Google Maps API <a href="http://tanomsak.com/tutorial-7.html">http://tanomsak.com/tutorial-7.html</a></p>
<p>Update: ตัวอย่างสำหรับกรณีมีจุดหมายสองจัดครับ <a href="http://tanomsak.com/tutorial-7_1.html">http://tanomsak.com/tutorial-7_1.html</a></p>
<p>ถ้าผมอธิบา่ยตรงไหนไม่เข้าใจ แนะนำได้ใน Comment เหมือนเดิมนะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2010/01/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%ab%e0%b8%b2%e0%b9%80%e0%b8%aa%e0%b9%89%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%94%e0%b8%a2-google-maps-api-gdirection/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>การใช้รูปภาพแทนปุ่มซูมเข้าออก (Custom control)</title>
		<link>http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/</link>
		<comments>http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 10:49:04 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[tanomsak]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=295</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/' ถ้าใครเคยเข้าไปเวป ddproperty.com จะเห็นว่าปุ่มซูมเข้าซูมออกจะไม่เหมือนแบบปกติของ Google Maps และมีปุ่มย่อขยายแผนที่เพิ่มขึ้นมาด้วย การทำแบบนี้เค้าเรียกว่า Custom Control ครับ คราวนี้เราจะพูดถึงเรื่องการสร้าง Control ของ Google Maps ให้เป็นแบบเฉพาะของเวปเรากันครับ ทำความรู้จักกับ Control ใน Google Maps ก่อนอื่นมาทำความรู้จักกับ Control ใน Google Maps API กันก่อน ในตัว Google Maps API มี Control มาตราฐานมาให้เราใช้อยู่หลายอย่างครับ GLargeMapControl &#8211; เป็น Control ที่มีครบทั้งซูมเข้าออก,เลื่อนแผนที่ซ้ายขวา และ Slider GSmallMapControl &#8211; จะมีแค่ซูมเข้าออก,เลื่อนแผนที่ซ้ายขวา GSmallZoomControl &#8211; มีแต่ ซูมเข้าออกเล็กๆ GScaleControl &#8211; scale บอกขนาดแผนที่ GLargeMapControl3D [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F07%2Fgoogle-maps-custom-control%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F07%2Fgoogle-maps-custom-control%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="FLOAT: right; MARGIN-LEFT: 20px"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>ถ้าใครเคยเข้าไปเวป <a title="ขายบ้าน บ้านมือสอง ขายคอนโด" href="http://www.ddproperty.com" target="_blank">ddproperty.com</a> จะเห็นว่าปุ่มซูมเข้าซูมออกจะไม่เหมือนแบบปกติของ Google Maps และมีปุ่มย่อขยายแผนที่เพิ่มขึ้นมาด้วย การทำแบบนี้เค้าเรียกว่า Custom Control ครับ</p>
<p style="TEXT-ALIGN: center"><img src="http://www.tanomsak.com/wp-content/uploads/2009/07/ddproperty_maps_crop.jpg" alt="ddproperty-maps-crop.jpg" width="488" height="304" /></p>
<p>คราวนี้เราจะพูดถึงเรื่องการสร้าง Control ของ Google Maps ให้เป็นแบบเฉพาะของเวปเรากันครับ</p>
<p><span id="more-295"></span></p>
<h3>ทำความรู้จักกับ Control ใน Google Maps</h3>
<p>ก่อนอื่นมาทำความรู้จักกับ Control ใน Google Maps API กันก่อน ในตัว Google Maps API มี Control มาตราฐานมาให้เราใช้อยู่หลายอย่างครับ</p>
<ul>
<li>GLargeMapControl &#8211; เป็น Control ที่มีครบทั้งซูมเข้าออก,เลื่อนแผนที่ซ้ายขวา และ Slider</li>
<li>GSmallMapControl &#8211; จะมีแค่ซูมเข้าออก,เลื่อนแผนที่ซ้ายขวา</li>
<li>GSmallZoomControl &#8211; มีแต่ ซูมเข้าออกเล็กๆ</li>
<li>GScaleControl &#8211; scale บอกขนาดแผนที่</li>
<li>GLargeMapControl3D &#8211; เหมือน GLargeMapControl แต่ว่าดูสวยกว่า <img src='http://www.tanomsak.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>GSmallZoomControl3D &#8211; เหมือน GSmallZoomControl แต่ว่าดูสวยกว่า</li>
<li>GMapTypeControl &#8211; เอาไว้เลือกประเภทแผนที่ ว่าจะเป็นแผนที่ธรรมดา หรือภาพถ่ายดาวเทียม</li>
<li>GHierarchicalMapTypeControl &#8211; Control แบบที่มี Drop down ให้เลือกได้</li>
<li>GOverviewMapControl &#8211; แผนที่ขนาดเล็กที่ปกติอยู่ทางขวาล่าง</li>
<li>GNavLabelControl &#8211; Label แสดง &#8220;ที่อยู่&#8221; ณ ตำแหน่งปัจจุบัน</li>
</ul>
<p>ปกติเราเรียกใช้งาน Control พวกนี้โดยคำสั่งแบบนี้ครับ</p>
<p><code>map.addControl(new GLargeMapControl());</code></p>
<h3>มาสร้าง Control ของเรากันครับ</h3>
<p>ขอเริ่มจาก source code ละกันนะครับ</p>
<pre class="brush: jscript;">
// ก่อนอื่นสร้าง function myZoomControl ขึ้นมาก่อน
function myZoomControl() {
}
// ทำ &quot;subclass&quot; GControl โ้้ดยการกำหนดให้ prototype object เป็น Instance ของ GControl
myZoomControl.prototype = new GControl();

myZoomControl.prototype.initialize = function(map) {
  // เริ่มต้นก็สร้าง div ว่างๆมาหนึ่งอัน เอาไ้ว้เป็น container
  var container = document.createElement(&quot;div&quot;);

  container.style.width = &quot;37px&quot;;
  container.style.height = '100px';

  // สร้าง div อีกอันเอาไว้เป็นปุ่ม ZoomIn
  var zoomInDiv = document.createElement(&quot;div&quot;);
  // กำหนด style ให้กับปุ่ม -&gt; ไป call function ด้านล่าง
  this.setButtonStyle_(zoomInDiv,&quot;zoonin.png&quot;);
  // เพิ่ม div ของปุ่ม ZoomIn ไว้ใส่ container
  container.appendChild(zoomInDiv);

  // กำหนดหน้าที่ให้กับปุ่ม
  GEvent.addDomListener(zoomInDiv, &quot;click&quot;, function() {
    map.zoomIn();
  });

  // สร้าง div อีกอันเอาไว้เป็นปุ่ม ZoomOut
  var zoomOutDiv = document.createElement(&quot;div&quot;);
  // กำหนด style ให้กับปุ่ม -&gt; ไป call function ด้านล่าง
  this.setButtonStyle_(zoomOutDiv,&quot;zoomout.png&quot;);
  // เพิ่ม div ของปุ่ม ZoomIn ไว้ใส่ container
  container.appendChild(zoomOutDiv);

  // กำหนดหน้าที่ให้กับปุ่ม
  GEvent.addDomListener(zoomOutDiv, &quot;click&quot;, function() {
    map.zoomOut();
  });

  // นำ div container ใส่เข้าไปในแผนที่
  map.getContainer().appendChild(container);
  return container;
}

myZoomControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
}

myZoomControl.prototype.setButtonStyle_ = function(button,button_pic) {

    button.style.backgroundImage = &quot;url(/&quot;+button_pic+&quot;)&quot;;
    button.style.width = &quot;31px&quot;;
    button.style.height = &quot;31px&quot;;
    button.style.margin = &quot;0px 0px 3px 3px&quot;;
    //styleFloat  for IE
    if (navigator.appName.indexOf(&quot;Netscape&quot;) != -1) {
       button.style.cssFloat = &quot;left&quot;;
    }
    else {
       button.style.styleFloat = &quot;left&quot;;
    }
    button.style.cursor = &quot;pointer&quot;;
}

function load() {
    if (GBrowserIsCompatible()) {
       var map = new GMap2(document.getElementById(&quot;map&quot;));

       // เรียกใช้ Custom Control ที่สร้าง
       map.addControl(new myZoomControl());
       map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    }
}
</pre>
<p><a href="http://www.tanomsak.com/tutorial-5.htm" target="_blank">ดูตัวอย่างกันครับว่าออกเป็นแบบไหน</a></p>
<p>การสร้าง Custom Control จริงแล้วไม่ยากเลยครับ ส่วนที่สำคัญๆมีดังนี้ครับ</p>
<p>บรรทัดที่ 1-5 กำหนด prototype ของ Custom Control ที่จะสร้าง ให้เป็น instance ของ GControl ขั้นตอนนี้้เป็นการทำ &#8220;subclass&#8221; จาก GControl แต่ว่า Javascript ไม่มีการ inherit Class เหมือนพวก OOP แต่มีการทำ prototype แทนครับ ไม่ต้องงงครับ  copy ไปเลย <img src='http://www.tanomsak.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>มี function ที่สำคัญ 2 อันคือ initialize บรรทัดที่ 7-41 กับ getDefaultPosition บรรทัด 43-45 ห้ามตกหล่นไม่งั้นไม่ work</p>
<p>โดย initialize ทำหน้าที่กำหนดหน้าตาของ Custom Control และ กำหนด Action เวลากดปุ่มต่าง มาดูกันทีละบรรทัดครับ</p>
<p>บรรทัด 9-11 เริ่มต้นด้วยการสร้าง div เปล่าๆขึ้นมาและกำหนดขนาดให้มัน div อันนี้จะเรียกว่า container ครับ โดยเราจะสร้างปุ่มไว้ข้างใน แล้วก็ append ทั้ง container เข้าไปใน Google maps ของเราตอนท้าย คอยดูนะครับ</p>
<p>บรรทัด 15-17 เริ่มสร้างปุ่ม ZoomIn โดยการสร้าง div อีกอันนึง แล้วก็ กำหนด style ให้มันโดยเรียก function setButtonStyle_<span> ถ้าตามไปดูข้างในก็จะเห็นว่าเป็นการกำหนด background ให้เป็นรูปปุ่ม และก็กำหนดขนาดนั้นเอง</span></p>
<p><span>บรรทัด 19 ใส่ div ZoomIn เข้าไปใน Container</span></p>
<p><span>บรรทัด 22-24 เป็นการตั้ง Listener ให้ซูมเข้าเวลามรการ &#8220;click&#8221; ที่ div ZoomIn ของเรา</span></p>
<p><span>จากนั้น บรรทัด 26-36 ก็ทำซ้ำสำหรับปุ่ม ZoomOut</span></p>
<p><span>บรรทัด 39 ก็ append container ที่เราใส่ปุ่ม ZoomIn/ZoomOut แล้วเข้าไปในแผนที่</span></p>
<p><span>ส่วน </span>getDefaultPosition ทำหน้าที่กำหนดตำแหน่งว่า Control ของเราจะอยู่ตรงไหนของแผนที่ครับ</p>
<p>สุดท้ายก็เรียกใช้ myZoomControl ก็เป็นอันเรียบร้อย</p>
<p>Update:</p>
<p>คุณ @<a href="http://twitter.com/iampz" target="_blank">iampz</a> แนะนำให้ใช้ id/class กำหนด style แทน ผมทดลองแล้วตามแล้ว<a href="http://www.tanomsak.com/tutorial-5-1.htm " target="_blank">ลองดูตัวอย่าง</a>นะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>การทำ Custom marker icon สำหรับ Google Static Maps</title>
		<link>http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/</link>
		<comments>http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 08:27:31 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=234</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/' คิดว่าหลายๆคนคงจะรู้จัก Google Static Maps API กันบ้างนะครับ ตัว Static map จะเป็นรูปแผนที่ Google Maps แบบที่เป็นรูปภาพนิ่ง คือไม่สามารถลากเพื่อเปลี่ยนที่ และไม่สามารถว่าซูมเข้าออกได้ ประโยชน์ของมันก็คือโหลดเร็วเพราะว่าเป็นรูปภาพรูปเดียว เหมาะสำหรับการแสดงตำแหน่งแค่คร่าวๆ เพราะบางครั้งแผนที่ไม่ใช้ส่วนสำคัญในหน้าเวป จะได้ไม่ต้องเสียเวลาโหลดตัว API นานๆครับ Google Static Maps มีการสนับสนุนการแสดงหมุดด้วยครับ แต่ว่าหมุดมันจะเป็นชุดมาตราฐานซึ่งอาจจะไม่เข้ากับเวปอันแสนสวย(??) ของเราเท่าไหร่ จะใช้วิธีการเปลี่ยนรูปหมุดใน Google Maps ที่แนะนำไปแล้วก็ไม่ได้ เนื่องจากแผนที่เป็นรูปภาพไม่ได้สร้างจาก Javascript API และนี่เป็นหัวข้อของผมในวันนี้ครับ คือการ การทำ Custom marker icon สำหรับ Google Static Maps ผมพบวิธีนี้จากเวป Yelp.com ตอนที่เค้าเปลี่ยนมาใช้ static map ครับ 1. การใช้งาน Google Static [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F06%2Fcustom-marker-icon-google-static-maps%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F06%2Fcustom-marker-icon-google-static-maps%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="FLOAT: right; MARGIN-LEFT: 20px"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>คิดว่าหลายๆคนคงจะรู้จัก Google Static Maps API กันบ้างนะครับ ตัว Static map จะเป็นรูปแผนที่ Google Maps แบบที่เป็นรูปภาพนิ่ง คือไม่สามารถลากเพื่อเปลี่ยนที่ และไม่สามารถว่าซูมเข้าออกได้ ประโยชน์ของมันก็คือโหลดเร็วเพราะว่าเป็นรูปภาพรูปเดียว เหมาะสำหรับการแสดงตำแหน่งแค่คร่าวๆ เพราะบางครั้งแผนที่ไม่ใช้ส่วนสำคัญในหน้าเวป จะได้ไม่ต้องเสียเวลาโหลดตัว API นานๆครับ</p>
<p>Google Static Maps มีการสนับสนุนการแสดงหมุดด้วยครับ แต่ว่าหมุดมันจะเป็นชุดมาตราฐานซึ่งอาจจะไม่เข้ากับเวปอันแสนสวย(??) ของเราเท่าไหร่ จะใช้วิธีการ<a title="custom marker icon ใช้รูปภาพแทนหมุด ใน google maps api" href="http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/">เปลี่ยนรูปหมุดใน Google Maps</a> ที่แนะนำไปแล้วก็ไม่ได้ เนื่องจากแผนที่เป็นรูปภาพไม่ได้สร้างจาก Javascript API</p>
<p>และนี่เป็นหัวข้อของผมในวันนี้ครับ คือการ การทำ Custom marker icon สำหรับ Google Static Maps ผมพบวิธีนี้จากเวป Yelp.com ตอนที่เค้าเปลี่ยนมาใช้ static map ครับ<span id="more-234"></span></p>
<h3>1. การใช้งาน Google Static Maps</h3>
<p>ทำได้ง่ายมากๆครับ คือใช้ html img tag สำหรับแสดงรูปภาพตรงๆเลย แ่ต่ว่า source ของรูปให้ระบุเป็น maps.google.com พร้อมด้วย parameter ตัวอย่างเป็นแบบนี้ครับ</p>
<p><code><a href="http://maps.google.com/staticmap?center=13.6225480441,100.5334854126&amp;zoom=14&amp;size=300x300&amp;maptype=roadmap&amp;markers=13.6225480441,100.5334854126&amp;key=YOUR_API_KEY">http://maps.google.com/staticmap?center=13.6225480441,100.5334854126&amp;zoom=14&amp;size=300x300&amp;maptype=roadmap&amp;markers=13.6225480441,100.5334854126&amp;key=YOUR_API_KEY</a></code></p>
<p>จาก code ข้างบนเป็นการขอรูปแผนที่จาก Google Static Maps โดยมี parameter ต่อไปนี้</p>
<ul>
<li>ให้มีจุดกึ่งกลางที่(Center) lattitude = 13.6225480441 และ longtitude = 100.5334854126</li>
<li>ระดับการซูม (Zoomlevel) = 14</li>
<li>ขนาดรูป (กว้างxยาว) = 300&#215;200 pixel</li>
<li>ประเภทแผนที่เป็นแบบถนน</li>
<li>ให้มีหมุดวางอยู่ตรงตำแหน่ง lattitude = 13.6225480441 และ longtitude = 100.5334854126</li>
<li>และสุดท้ายต้องใส่ Maps API Key ด้วยครับ (ดูวิธีการขอได้จาก <a href="http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/">ตอนก่อนหน้า</a> นะครับ)</li>
</ul>
<p>ใครสนใจความหมาย และ parameter ทั้งหมดที่มีดูได้จาก <a href="http://code.google.com/apis/maps/documentation/staticmaps">Google Static Maps API</a> เราจะได้รูปแบบนี้ออกมาครับ</p>
<p><img style="border: 1px solid #c0c0c0; display: inline; width: 300px; height: 320px;" src="http://maps.google.com/staticmap?center=13.6225480441,100.5334854126&amp;zoom=14&amp;size=300x300&amp;maptype=roadmap&amp;markers=13.6225480441,100.5334854126&amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hRHchrjOSPM-moa2HMmJZw-0fE6VhTsARfVd9x1Dg8TowZALqHIOcO20g" alt="" width="300" height="320" /></p>
<h3>2. การจะเปลี่ยนหมุดจากแบบมาตราฐานเป็นรูปภาพที่เราต้องการ</h3>
<p>ทำได้โดยการใช้เทคนิคเกี่ยวกับ CSS นิดหน่อยครับ หลักการก็คือ การแสดงรูปภาพสองรูปซ้อนกัน โดยเอารูปหมุดที่ต้องการวางทับบน static map โดยแสดง static map ให้ตรงกลางเป็นตัวแหน่งของสถานที่ ที่เราจะแสดงหมุด จากนั้นก็ให้ CSS กำหนดตำแหน่งรูปภาพหมุดให้อยู่กึ่งกลางครับ</p>
<p><img src="http://www.tanomsak.com/wp-content/uploads/2009/06/div.png" alt="div.png" width="416" height="211" /></p>
<p>วิธีการค่า left และ top เพื่อวางหมุดตรงกึ่งกลางแผนที่</p>
<p><img src="http://www.tanomsak.com/wp-content/uploads/2009/06/done.png" alt="done.png" width="381" height="251" /></p>
<p>html ที่ใช้เป็นแบบนี้ครับ อันนี้ไม่มีอะไรพิเศษ (เอา parameter เกี่ยวกับ markers ออกด้วย เวลาเรียก static map จะได้ไม่มีรูปหมุดซ้ำกับที่เรากำลังจะแสดง)</p>
<pre class="brush: xml;">
&lt;div id=&quot;map_div&quot;&gt;
&lt;img style=&quot;border: 1px solid #c0c0c0; display: inline; width: 300px; height: 320px;&quot; src=&quot;http://maps.google.com/staticmap?center=13.6225480441,100.5334854126&amp;amp;zoom=14&amp;amp;size=300x300&amp;amp;maptype=roadmap&amp;amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hRHchrjOSPM-moa2HMmJZw-0fE6VhTsARfVd9x1Dg8TowZALqHIOcO20g&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;320&quot; /&gt;
&lt;img class=&quot;marker&quot; src=&quot;pin_blue.png&quot;/&gt;
&lt;/div&gt;
</pre>
<p>ส่วน CSS เป็นแบบนี้ครับ</p>
<pre class="brush: css;">
#map_div {
height:320px;
position:relative;
}
#map_div img.marker {
position:absolute;
height:37px;
width:25px;
left:142px;
top:125px;
}
</pre>
<p>property position ของ div ที่ใส่รูปทั้งสองต้องเป็น relative และ position ของรูปหมุดต้องเป็น absolute นะครับ</p>
<p>ใน IE6 จะมีปัญหากับ transparent png ทำให้รูปหมุดแสดงพื้นหลังเป็นแถบๆ เลือก<a href="http://www.google.co.th/search?q=ie6+transparent&amp;ie=utf-8&amp;oe=utf-8">วีธีแก้</a>ในตามชอบใจเลยครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial Google maps ใช้รูปภาพแทนหมุด (Custom Marker Icon)</title>
		<link>http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/</link>
		<comments>http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 04:00:00 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=163</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/' หลังจากหายหน้าไปนาน ขอต่อเรื่อง Google Maps ด้วยการใช้รูปภาพแทนหมุดกันครับ ถ้าจะค้นหาบทความเพิ่มเติม ลองค้นคำว่า Custom Marker Icon นะครับ เรามาเริ่มเรื่องของเรากันเลยดีกว่า สังเกตุไหมครับว่าจากตัวอย่างที่ผ่านๆมาทั้งหมด หมุดของเราเป็นหมุดแดงๆ แล้วมีจุดดำๆตรงกลาง ซึ่งเป็นมาตรฐานของ Google Maps เค้า บา่งทีมันอาจดูไม่เนียน ไม่เข้ากับเวปเราเท่าไหร่ สามารถเปลี่ยนได้นะครับ โดยใช้ Customer Marker Icon วิธีกา่รไม่ยากครับ ผมว่าที่ยากที่สุดก็ตรงทำรูป Icon ที่ดูดีอย่างที่ต้องการมากกว่า (ของ ddproperty.com ผมกับเพื่อน ก็ดูแบบจากหลายๆที่มารวมๆกัน ซึ่งทำนานกว่าเขียน script อีก) การปรับ Options ของ Gmarker ตามเอกสาร Google Maps API (Gmarker) ฟังชั่น Gmarker รับ parameter แบบนี้ครับ โดยปกติถ้าเราระบุแค่ latlng เราก็จะได้ [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F06%2Fgoogle-maps-customer-marker%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2009%2F06%2Fgoogle-maps-customer-marker%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left:20px;"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>หลังจากหายหน้าไปนาน ขอต่อเรื่อง Google Maps ด้วยการใช้รูปภาพแทนหมุดกันครับ ถ้าจะค้นหาบทความเพิ่มเติม ลองค้นคำว่า Custom Marker Icon นะครับ เรามาเริ่มเรื่องของเรากันเลยดีกว่า</p>
<p>สังเกตุไหมครับว่าจากตัวอย่างที่ผ่านๆมาทั้งหมด หมุดของเราเป็นหมุดแดงๆ แล้วมีจุดดำๆตรงกลาง ซึ่งเป็นมาตรฐานของ Google Maps เค้า บา่งทีมันอาจดูไม่เนียน ไม่เข้ากับเวปเราเท่าไหร่ สามารถเปลี่ยนได้นะครับ โดยใช้ Customer Marker Icon วิธีกา่รไม่ยากครับ ผมว่าที่ยากที่สุดก็ตรงทำรูป Icon ที่ดูดีอย่างที่ต้องการมากกว่า (ของ <a title="บ้านมือสอง ขายบ้าน บ้าน" href="http://www.ddproperty.com/" target="_blank">ddproperty.com</a> ผมกับเพื่อน ก็ดูแบบจากหลายๆที่มารวมๆกัน ซึ่งทำนานกว่าเขียน script อีก)</p>
<p><span id="more-163"></span></p>
<p><img style="DISPLAY: inline; FLOAT: left" src="http://www.tanomsak.com/wp-content/uploads/2009/06/ddproperty-marker.png" alt="ddproperty-marker.png" width="210" height="188" /></p>
<p><img style="display: inline; float: left; width: 196px; height: 189px;" src="http://www.tanomsak.com/wp-content/uploads/2009/06/plazes-marker.png" alt="Plazes-marker.png" width="216" height="206" /> <img src="http://www.tanomsak.com/wp-content/uploads/2009/06/yelp.png" alt="Yelp.png" width="210" height="188" /></p>
<h3>การปรับ Options ของ Gmarker</h3>
<p>ตามเอกสาร Google Maps API (<a href="http://code.google.com/intl/th/apis/maps/documentation/reference.html#GMarker" target="_blank">Gmarker</a>) ฟังชั่น Gmarker รับ parameter แบบนี้ครับ</p>
<p><img style="display: inline; width: 650px; height: 54px;" src="http://www.tanomsak.com/wp-content/uploads/2009/06/google-code.png" alt="Google Code.png" width="650" height="54" /></p>
<p>โดยปกติถ้าเราระบุแค่ latlng เราก็จะได้ Marker ที่ตำแหน่งที่ต้องการโดย icon จะเป็น G_DEFAULT_ICON ซึ่งก็คือ หมุดแดงที่มีจุดดำครับ</p>
<p>ถ้าเราต้องการเปลี่ยนหมุดให้เป็นรูปสวยงาม (??) ตามต้องการเราก็ต้องระบุ options (<a href="http://code.google.com/intl/th/apis/maps/documentation/reference.html#GMarkerOptions" target="_blank">GMarkerOptions</a>) ซึ่งมีตัวเลือกให้เยอะมากครับและก็มีเพิ่มขึ้นเรื่อยๆเมื่อมีการ update Google Maps API ที่เราสนใจในตอนนี้คือ options ชื่อ icon ครับ โดยเราต้องสร้าง GIcon (<a href="http://code.google.com/intl/th/apis/maps/documentation/reference.html#GIcon" target="_blank">การใช้งาน GIcon</a>) ขึ้นมาแล้วนำไปใช้</p>
<p>ใครถนัดอ่านภาษาอังกฤษผมแนะนำให้อ่าน <a href="http://econym.org.uk/gmap/custom.htm" target="_blank">Making your own custom markers</a> ของคุณ Mike Williams ผมว่าเขียนไว้ได้ครบถ้วนดีครับ ผมจะพยายามแปลให้เข้าใจง่ายๆดูนะครับ ย้ำว่าส่วนต่อจากนี้ผมแปลบทความของคุณ Mike เป็นหลัก ผสมกับการอธิบายของผมตามที่ติดว่าจะเข้าใจง่ายขึ้นครับ</p>
<pre class="brush: jscript;">
var Icon = new GIcon();
Icon.image = &quot;mymarker.png&quot;;
Icon.iconSize = new GSize(20, 34);
Icon.shadow = &quot;myshadow.png&quot;;
Icon.shadowSize = new GSize(36, 34);
Icon.iconAnchor = new GPoint(5, 34);
Icon.infoWindowAnchor = new GPoint(5, 2);
Icon.transparent = &quot;mytran.png&quot;;
Icon.imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0];
Icon.printImage = &quot;mymarkerie.gif&quot;;
Icon.mozPrintImage = &quot;mymarkerff.gif&quot;;
Icon.printShadow = &quot;myshadow.gif&quot;;
</pre>
<p>script ข้างบนเป็นการสร้าง GIcon เพื่อนำไปใช้สำหรับ options ในการสร้าง GMarker อีกทีนึง ที่เห็นยาวเหยียดจริงๆไม่ได้จำเป็นหมดทุกคำสั่งหรอกนะครับ แต่ว่าอันนี้เป็น parameter ที่มีเกือบทั้งหมดแล้ว ลองมาทำความเข้าใจไปทีละส่วนด้วยกันนะครับ</p>
<p>1. เริ่มสร้าง GIcon อันนี้ตรงไปตรงมาไม่มีอะไร</p>
<p><code>var Icon = new GIcon();</code></p>
<p>2. ต่อมาก็เริ่ม กำหนดรูปภาพที่ต้องการนำมาใช้เป็นรูปหมุด และบอกขนาดของรูปที่นำมาใช้ (กว้่าง x สูง)</p>
<p>ตรงนี้ต้องระวังเรื่อง path ของรูป ต้องให้ script สามารถมองเห็นรูปได้ไม่งั้นไม่ work และต้องกำหนด iconSize ถ้าไม่กำหนดจะไม่แสดง icon นะครับ การกำหนดขนาดของ icon กำหนดเป็น GSize นะครับ</p>
<p><code>Icon.image = "mymarker.png";<br />
Icon.iconSize = new GSize(20, 34);</code></p>
<p>3. ถ้าใครต้องการทำเงาให้หมุดด้วยก็ต้องกำหนดรูปเงาและขนาดของเงาดังนี้ครับ (เป็น options ไม่ต้องมีก็ได้ครับ)</p>
<p><code>Icon.shadow = "myshadow.png";<br />
Icon.shadowSize = new GSize(36, 34);</code></p>
<p>4. ต่อไปเป็นการกำหนดจุดอ้างอิงของหมุด ซึ่งมี 2 จุด (รูปนิ้วประกอบนำมาจากเวปคุณ <a href="http://econym.org.uk/gmap/custom.htm" target="_blank">Mike Williams</a> นะครับ)</p>
<p><img style="border: 1px solid #b0b0b0; display: inline; margin-left: auto; width: 200px; margin-right: auto; height: 340px;" src="http://www.tanomsak.com/wp-content/uploads/2009/06/fingerbig.png" alt="fingerbig.png" width="200" height="340" /></p>
<ul>
<li>iconAnchor คือตรงปลายแหลมของหมุดที่จะปักลงบนแผน (<span style="color: red;">จุดสีแดงในตัวอย่าง</span>) ถ้ากำหนดผิดจุดเวลาแสดงผลมันจะดูหลอกๆ เพราะตรงปลายแหลมไม่ใช้จุดที่ปักลงแผนที่</li>
<li>infoWindowAnchor คือตำแหน่งที่จะให้ infoWindow จะโผล่ออกจากหมุด (จะให้ตรงปลายแหลมของ infoWindows โผล่ออกมาจากตรงไหนของหมุด) ถ้ากำหนดผิดจะทำให้เวลาแสดง infoWindow มันจะดูไม่เนียน เช่นห่างหมุดมากไป หรือทะลุออกมาจากกลางหมุด โดยปกติเราจะอยากให้ infoWindow ออกมาจากด้านบนของหมุด (<span style="color: green;">จุดสีเขียวในตัวอย่าง</span>)</li>
</ul>
<p>การกำหนดจุดอ้างอิงทั้งสองทำได้โดย</p>
<p><code>Icon.iconAnchor = new GPoint(5, 34);<br />
Icon.infoWindowAnchor = new GPoint(5, 2);</code></p>
<p>ให้สังเกตุว่าการนับตำแหน่งของจุดเริ่มจาก (1,1) ตรงมุมบนซ้ายของรูปหมุดของเรา และก็ใช้ GPoint ในการกำหนดจุดครับ</p>
<p>5. การป้องกันปัญหา การกดบนหมุดไม่ได้ (กดแล้วไม่เกิด event onClick) เวลามี infoWindow อยู่ใกล้ๆ</p>
<p><code>Icon.transparent = "mytran.png";<br />
Icon.imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0];</code></p>
<ul>
<li>
<div>transparent เป็นรูปภาพโปล่งใสของรูปหมุดของเรา (ดูวิธีการสร้างตอนท้าย) กำหนดเพื่อป้องกันการกดหมุดไม่ได้ใน Internet Explorer</div>
</li>
<li>
<div>imageMap กำหนดเพื่อป้องกันการกดหมุดไม่ได้ใน Firefox ชุดตัวเลขที่เห็นเป็นพิกัด x,y บนรูปหมุดของเรา เช่น 9,0 หมายถึงจุด x=9, y=0 ไล่ไปเรื่อยๆ ซุ่มๆกำหนดให้ทั่วๆหมุดลองเรา (ผมเองไม่ได้กำหนดตัวนี้เพราะว่างงเหมือนกัน ใครเข้าใจบอกด้วยครับ )</div>
</li>
</ul>
<p>6. ส่วนสุดท้ายเป็นการเตรียมตัวสำหรับการพิมพ์ (options ใครไม่เน้นเรื่องพิมพ์ไม่ต้องกำหนดครับ)</p>
<p>Icon.printImage = &#8220;mymarkerie.gif&#8221;;<br />
Icon.mozPrintImage = &#8220;mymarkerff.gif&#8221;;<br />
Icon.printShadow = &#8220;myshadow.gif&#8221;;</p>
<p>เนื่องจาก browser ส่วนใหญ่ไม่สนับสนุนการพิมพ์รูปภาพแบบที่โปร่งใสบางส่วน Google Maps API เลยอนุญาติให้กำหนดรูปแทนได้เวลาจะพิมพ์</p>
<ul>
<li>printImage เป็นรูปแทนของหมุดสำหรับ Internet Explorer</li>
<li>mozPrintImage เป็นรูปแทนของหมุดสำหรับ Firefox</li>
<li>printShadow เป็นรูปแทนของเงา</li>
</ul>
<p>ถ้าไม่กำหนดค่า printImage และ mozPrintImage IE6 จะพิมพ์รูปหมุดหลักที่เรากำหนดไว้ก่อนหน้า (ซึ่งส่วนที่โปร่งใสจะออกมาทึบๆ) แต่ Firefox จะไม่พิมพ์หมุดเลยครับ</p>
<p>7. สุดท้าย พอเราสร้าง GIcon ใหม่เรียบร้อยแล้ว เราก็ต้องนำไปใช้ในการสร้างหมุด (GMarker) แบบนี้ครับ</p>
<p>var marker = new GMaker(latlng, {icon: Icon});</p>
<p>ลองดู <a href="http://www.tanomsak.com/customermarker.htm" target="_blank">ตัวอย่างการใช้รูปภาพแทนหมุด</a> ที่เราทำข้างบนนะครับ</p>
<h3>แถม 1: การสร้างเงาสำหรับหมุด</h3>
<p>การสร้างเงา เริ่มแรกก็ใช้โปรแกรมจำพวก Photoshop เปิดรูปหมุดของเราขึ้นมาครับ แล้วก็เปลี่ยนสีของหมุดทั้งหมดให้เป็นสีดำไปเลย จากนั้นก็ปรับ opacity ลงซัก 50% หมุดดำของเราก็จะออกเป็นสีเทาๆ จากนั้นก็เอียงหมุด (Edit -&gt; Transform -&gt; Skew) ประมาณ 45% แล้วก็ทำพวก blur พองาม จากนั้นก็ Save for web เป็น PNG-24 เท่านี้ก็เรียบร้อยครับ</p>
<h3>แถม 2: การสร้างภาพโปร่งใส (transparent) ของหมุด</h3>
<p>การทำภาพโปร่งใสง่ายมากครับ แค่เปิดรูปหมุดในโปรแกรม Photoshop แล้วก็ลด opacity ลงเหลือ 1% เราจะมองไม่เห็นหมุดเลยครับ จากนั้นก็ Save for web เป็น PNG-24 เท่านี้ก็เรียบร้อยครับ</p>
<p>ทดลองทำกันดูนะครับ ทำเรียบร้อยแล้วก็ลองเอามาโชว์กันบ้างนะครับ ใครมีคำถามหรือว่าอยากแนะนำอะไร comment คุยกันได้นะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>เพิ่มหมุดจาก Google Maps ลง Database</title>
		<link>http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/</link>
		<comments>http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 10:32:00 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Google Map]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=150</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/' ในเวป ddproperty.com ที่ผมกับเพื่อนดูแลอยู่เนี้ย เราให้คนที่ลงประกาศทุกคนต้องระบุตำแหน่งด้วยว่า อสังหาฯที่กำลังลงประกาศตำแหน่งอยู่ตรงไหน ผมก็ใ้ช้ google maps นี้แหละครับในการระบุตำแหน่ง คราวนี้เราจะมาดูกันว่า จะใช้ Google Maps เพิ่มตำแหน่งหมุดใน Database ยังไง จริงๆแล้ว trick หลักๆก็คือว่าเราจะเอาค่าตำแหน่ง lat, lng ของจุดที่เราต้องการออกมาจาก Google Maps ได้ยังไง ส่วนการบันทึกค่าลง database ก็ทำเหมือนกับการส่งค่าจาก form ตามปกติ ขั้นตอนคร่าวๆเป็นแบบนี้ครับ หาค่า lat, lng จากตำแหน่งที่ click บนแผนที่ เขียนค่า lat, lng ไว้ใน hidden fields ของ form ที่เราจะใช้ส่งค่ากลับไปฝั่ง server ทางฝั่ง server ก็รับกา่ร submit แล้วก็เขียนค่าลง database ง่ายไหมครับ [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-insert-database%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-insert-database%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="FLOAT: right; MARGIN-LEFT: 20px"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>ในเวป <a title="บ้านมือสอง ขายบ้าน" href="http://www.ddproperty.com">ddproperty.com</a> ที่ผมกับเพื่อนดูแลอยู่เนี้ย เราให้คนที่ลงประกาศทุกคนต้องระบุตำแหน่งด้วยว่า อสังหาฯที่กำลังลงประกาศตำแหน่งอยู่ตรงไหน ผมก็ใ้ช้ google maps นี้แหละครับในการระบุตำแหน่ง</p>
<p style="TEXT-ALIGN: center"><img class="size-full wp-image-151 aligncenter" title="ddproperty_post" src="http://www.tanomsak.com/wp-content/uploads/2008/12/ddproperty_post.jpg" alt="" width="500" height="275" /></p>
<p>คราวนี้เราจะมาดูกันว่า จะใช้ Google Maps เพิ่มตำแหน่งหมุดใน Database ยังไง <span id="more-150"></span>จริงๆแล้ว trick หลักๆก็คือว่าเราจะเอาค่าตำแหน่ง lat, lng ของจุดที่เราต้องการออกมาจาก Google Maps ได้ยังไง ส่วนการบันทึกค่าลง database ก็ทำเหมือนกับการส่งค่าจาก form ตามปกติ ขั้นตอนคร่าวๆเป็นแบบนี้ครับ</p>
<ol>
<li>หาค่า lat, lng จากตำแหน่งที่ click บนแผนที่</li>
<li>เขียนค่า lat, lng ไว้ใน hidden fields ของ form ที่เราจะใช้ส่งค่ากลับไปฝั่ง server</li>
<li>ทางฝั่ง server ก็รับกา่ร submit แล้วก็เขียนค่าลง database</li>
</ol>
<p>ง่ายไหมครับ ลองมาดูกันทีละขั้น</p>
<h3>ขั้นแรก หาค่า lat, lng จากตำแหน่งที่ click บนแผนที่</h3>
<p>Google Maps API มี function ต่างๆที่เตรียมไว้ให้ใช้งานเยอะมากครับ รวมถึงเมื่อผู้ใช้ Interactive กับแผนที่เช่น Click บนแผนที่ ซูมเข้า ซูมออก หรือว่าจะขยับหมุดก็มี Event เกี่ยวข้องทั้งหมด สิ่งที่เราต้องทำเพื่อหาตำแหน่งที่ผู้ใช้งาน Click บนแผนที่ก็คือสร้าง Listerner เพื่อมาดักจับ Event เหล่านี้ ซึ่งทำได้อย่างนี้ครับ</p>
<pre class="brush: jscript;"> GEvent.addListener(map, &amp;quot;click&amp;quot;, function(overlay, latlng) { /*เรา check ค่า overlay เพื่อดูว่าเป็นการกดบนแผนที่ หรือว่ากดบน overlay ที่อยู่บนแผนที่เช่น marker โดยตัวแปล overlay จะมีค่าเป็น null ในกรณีที่กดบนแผนที่เปล่าๆ*/ if (!overlay) { var lat = latlng.lat(); var lng = latlng.lng(); } }); </pre>
<p>โดย Event &#8220;click&#8221; เนี้ยจะส่งค่าตัวแปลไปให้ function ที่เราเขียนขึ้นมารับด้วย คือ overlay และ <code>latlng โดย overlay จะเป็นตัวบอกว่าเป็นการ click บนแผนที่ หรือว่า click บน overlay ส่วน latlng จะเป็นตัวแปลประเภท <a href="http://code.google.com/apis/maps/documentation/reference.html#GLatLng">GLatLng</a> ซึ่งมี method lat(), lng() เพื่อหาค่า lat, lng</code> แค่นี้เราก็จะได้ค่า lat, lng ของตำแหน่งที่ click บนแผนที่แล้วครับ</p>
<h3>เขียนค่า lat, lng ไว้ใน hidden fields ของ form ที่เราจะใช้ส่งค่ากลับไปฝั่ง server</h3>
<p>อันนี้ก็ตรงไปตรงมาครับ โดยเราจะำสร้าง form ที่มี hidden fields ชื่อ lat กับ lng ไว้ แล้วทำการ update ค่าทุกครั้งที่มีกาีร click บนแผนที่</p>
<pre class="brush: xml;">&lt;/p&gt; &lt;form action=&amp;quot;/new_marker&amp;quot;&gt; &lt;p&gt;&lt;input name=&amp;quot;marker[name]&amp;quot; size=&amp;quot;30&amp;quot;/&gt; &lt;input name=&amp;quot;marker[address]&amp;quot; size=&amp;quot;30&amp;quot;/&gt; &lt;input type=&amp;quot;hidden&amp;quot; id=&amp;quot;marker_lat&amp;quot; name=&amp;quot;marker[lat]&amp;quot;/&gt; &lt;input type=&amp;quot;hidden&amp;quot; id=&amp;quot;marker_lng&amp;quot; name=&amp;quot;marker[lng]&amp;quot;/&gt; &lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;commit&amp;quot; value=&amp;quot;submit&amp;quot;/&gt;&lt;/p&gt; &lt;/form&gt; &lt;p&gt;</pre>
<p>แล้วก็จัดกา่รแก้ไข javascript ของเราให้ Update value ของ hidden fields lat, lng สังเกตุว่า ผมใช้ $(&#8216;marker_lat&#8217;) แทนการ <em>getElementById</em> เพราะผมใช้ Prototype Framework อันนี้เพราะผมชินครับ ส่วนใครจะใช้ javascript แบบมาตราฐานก็ตามสะดวกครับ</p>
<pre class="brush: jscript;"> var map; var present = null; function updateHiddenFields(marker) { latlng = marker.getLatLng(); var lng = latlng.lng(); var lat = latlng.lat(); $('marker_lat').value = lat; $('marker_lng').value = lng; } function addMarker(latlng) { if (!present) { /*ใส่ options draggable เป็น true เพื่อให้สามารถย้ายตำแหน่งของหมุดได้ ส่วน bouncy เป็น false เพื่อไม่ให้หมุดเด้งหลังการย้ายตำแหน่ง*/ var newMarker = new GMarker(latlng, { draggable: true, bouncy: false}); map.addOverlay(newMarker); /*ตรวจจับ Event dragend เพื่อทำการ update ค่า lat,lng เมื่อมีย้ายหมุด*/ GEvent.addListener(newMarker, &amp;quot;dragend&amp;quot;, function() { updateHiddenFields(newMarker); }); updateHiddenFields(newMarker); map.panTo(latlng); present = true; } } function load() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById(&amp;quot;map&amp;quot;)); map.setCenter(new GLatLng(37.4419, -122.1419), 13); GEvent.addListener(map, &amp;quot;click&amp;quot;, function(overlay, latlng) { if (!overlay) { addMarker(latlng); } }); } } </pre>
<p>เนื่องจากผมต้องการให้ระบุตำแหน่งทีละหนึ่งอัน (หนึ่งอสังหาฯ หนึ่งตำแหน่ง) เลยต้องมีตั้งค่าตัวแปล present เอาไว้ check ไม่ให้เพิ่มหมุดซ้ำ</p>
<h3>ทางฝั่ง server รับกา่ร submit แล้วก็เขียนค่าลง database</h3>
<p>ที่นี้ก็จัดกา่ร insert ค่าที่ได้รับจาก form ลง database ครับ</p>
<pre class="brush: ruby;"> def new_marker _marker = params[:marker] @marker = Marker.new(_marker) @marker.save! end </pre>
<p>เท่านี้ก็เป็นอันเรียบร้อยครับ <a href="http://tanomsak.com/tutorial-4.html">ลองดูตัวอย่าง</a> ลองดู Firebug console นะครับว่า ค่า value ของ hiddle fields เปลี่ยนหลังจากย้ายหมุดตามที่ต้องการหรือเปล่า <img class="aligncenter size-full wp-image-160" title="tutorail-4" src="http://www.tanomsak.com/wp-content/uploads/2008/12/tutorail-4.jpg" alt="" width="499" height="316" /></p>
<p class="zoundry_raven_tags"><!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com --> <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a class="ztag" rel="tag" href="http://del.icio.us/tag/Google%20Map">Google Map</a>, <a class="ztag" rel="tag" href="http://del.icio.us/tag/tutorial">tutorial</a></span><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a class="ztag" rel="tag" href="http://www.technorati.com/tag/Google+Map">Google Map</a>, <a class="ztag" rel="tag" href="http://www.technorati.com/tag/tutorial">tutorial</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>แสดงหมุดจาก database ใน Google Maps ด้วย AJAX</title>
		<link>http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/</link>
		<comments>http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 09:16:46 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=127</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/' ความเดิมจากตอนที่แล้ว เราพูดถึงวิธีิการแสดงหมุดจาก database บนแผนที่ Google Maps ไปแล้ว แต่ติดตรงที่ว่าเวลามีหมุดเยอะๆจะแสดงหน้าเวปช้า และเปลือง memory คราวนี้ผมจะพูดถึงการใช้วิธีการแสดงหมุดจาก database เฉพาะส่วนที่มองเห็นในหน้าต่างแผนที่โดยการใช้ AJAX ครับ ส่วน table database และ ข้อมูลใน database ก็ใช้ของคราวที่แล้วครับ (ดูได้ที่ Tutorial แบบบ้านๆ ตอนที่ 2 &#8211; แสดงหมุดจาก database ใน Google Maps) สิ่งที่ต้องเตรียมก่อนเริ่ม ผมใช้ Prototype Javascript Framework สำหรับทำ AJAX เพราะมันติดมากับ Rails เลยชินครับ ถ้าใครถนัดตัวอื่นก็ตามสะดวก แนะนำ Firefox + Firebug สำหรับการ Debug ครับ สุดยอดมากๆ หลักกาำรทำงาน ทุกครั้งที่มีกา่รเลื่อนแผนที่ [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-database-ajax%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-database-ajax%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left:20px;"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>ความเดิมจากตอนที่แล้ว เราพูดถึงวิธีิการแสดงหมุดจาก database บนแผนที่ <a class="zem_slink" title="Google Maps" rel="homepage" href="http://maps.google.com">Google Maps</a> ไปแล้ว แต่ติดตรงที่ว่าเวลามีหมุดเยอะๆจะแสดงหน้าเวปช้า และเปลือง memory คราวนี้ผมจะพูดถึงการใช้วิธีการแสดงหมุดจาก database เฉพาะส่วนที่มองเห็นในหน้าต่างแผนที่โดยการใช้ <a class="zem_slink" title="Ajax (programming)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">AJAX</a> ครับ</p>
<p>ส่วน table database และ ข้อมูลใน database ก็ใช้ของคราวที่แล้วครับ (ดูได้ที่ <a href="http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1/">Tutorial แบบบ้านๆ ตอนที่ 2 &#8211; แสดงหมุดจาก database ใน Google Maps</a>)</p>
<h3>สิ่งที่ต้องเตรียมก่อนเริ่ม</h3>
<ol>
<li>ผมใช้ Prototype Javascript Framework สำหรับทำ AJAX เพราะมันติดมากับ Rails เลยชินครับ ถ้าใครถนัดตัวอื่นก็ตามสะดวก</li>
<li>แนะนำ Firefox + Firebug สำหรับการ Debug ครับ สุดยอดมากๆ</li>
</ol>
<h3>หลักกาำรทำงาน</h3>
<ol>
<li>ทุกครั้งที่มีกา่รเลื่อนแผนที่ หรือซูมเข้า/ซูมออก script จะขอข้อมูลจาก server และนำไปแสดงจุดพิกัดใหม่ในแผนที่</li>
<li>ใช้พิกัดของแผนที่ ที่กำลังแสดงผล (x1,y1,x2,y2 ตรงมุมกรอบของแผนที่) เป็นตัวแปลในการเลือกข้อมูลพิกัดจาก database<span id="more-127"></span></li>
</ol>
<p>อ้อ วิธีการที่จะเขียนถึง ส่วนใหญ่นำมาจากหนังสือ &#8220;<a href="www.amazon.com/Beginning-Google-Maps-Applications-Rails/dp/1590597877">Beginning Google Maps Applications with Rails and Ajax</a>&#8221; นะครับ ลองไปหาอ่านดูกัน แนะนำๆ</p>
<p>ส่วนที่ 1 เรียกใช้ prototype.js โดยการเพิ่มบรรทัดต่อไปนี้ ในส่วน head</p>
<pre class="brush: jscript;">
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>ส่วนที่ 2 แก้ไขส่วน Javascript โดยเพิ่ม function สำหรับแสดงหมุด และ แก้ไข function load() ดังนี้ครับ</p>
<pre class="brush: jscript;">
var displayingMarkers = [];
var displayingMarkersNum = 0;
var deletingMarkers = [];
var deletingMarkersNum = 0;

function clearMarkers() {

for (var i = 0 ; i &lt; deletingMarkersNum ; i++) {
map.removeOverlay(deletingMarkers[i]);
}

}

function updateMarkers() {
//เตรียม parameters พิกัดของแผนที่ที่กำลังแสดง เพื่อ query หมุดจาก database
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var mapBoundary = 'ne=' + northEast.toUrlValue() + '&amp;amp;amp;amp;sw=' + southWest.toUrlValue();
var myAjax = new Ajax.Request( '/get_marker', {
method: 'get',
parameters: mapBoundary,
onComplete: function(request){
// function นี้จะทำงานหลังจากได้รับค่า response จาก server
// ทำการเก็บค่า response จาก server เข้าตัวแปล markers
markers = eval( &quot;(&quot; + request.responseText + &quot;)&quot; );

// copy markers ที่กำลังแสดงอยู่เก็บไว้ เดี๋ยวเราจะลบหมุดพวกนี้ออก หลังจากเพิ่มหมุดชุดใหม่ในแผนที่แล้ว
deletingMarkers = displayingMarkers.clone();
deletingMarkersNum = displayingMarkersNum;
displayingMarkersNum = 0;
displayingMarkers.clear();

for (var i = 0 ; i &lt; markers.length ; i++) {
var marker = markers[i]
var lat = marker.lat;
var lng = marker.lng;

//check for lat and lng so MSIE does not error on parseFloat of a null value
if (lat &amp;amp;amp;amp;&amp;amp;amp;amp; lng &amp;amp;amp;amp;&amp;amp;amp;amp; lat != 0 &amp;amp;amp;amp;&amp;amp;amp;amp; lng != 0) {
var latlng = new GLatLng(lat,lng)

var marker = new GMarker(latlng);

displayingMarkers[displayingMarkersNum] = marker;
displayingMarkersNum++;

map.addOverlay(marker);

} // end of if lat and lng
} // end of for loop

clearMarkers();

} // end of anonymous onComplete function

}); // end of the new Ajax.Request() call

}

function load() {
if (GBrowserIsCompatible()) {
displayingLandmarkNum = 0;
displayingLandmark.clear();
deletingLandmarkNum = 0;
deletingLandmark.clear();

var map = new GMap2(document.getElementById(&quot;map&quot;));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);

updateMarkers();
GEvent.addListener(map,'zoomend',function() {
updateMarkers();
});

GEvent.addListener(map,'moveend',function() {
updateMarkers();
});
}
}
</pre>
<p>ส่วนที่ 3 เพิ่ม action ฝั่ง server ให้รับ AJAX request และ return ค่าพิกัด</p>
<pre class="brush: ruby;">
def get_marker
ne = params[:ne].split(',').collect{|e|e.to_f}
sw = params[:sw].split(',').collect{|e|e.to_f}

# if the NE longitude is less than the SW longitude,
# it means we are split over the meridian.

if ne[1] &gt; sw[1]
conditions = '((lng &gt; ? AND lng &lt; ?) AND (lat &lt;= ? AND lat &gt;= ?))'
else
conditions = '((lng &gt;= ? OR lng &lt; ?) AND (lat &lt;= ? AND lat &gt;= ?))'
end
markers = Marker.find :all, :select =&gt; 'id, lat, lng', :conditions =&gt; [conditions,sw[1],ne[1],ne[0],sw[0]]

render :text=&gt;markers.collect{|c|c.attributes}.to_json
end
</pre>
<p>TIPS:</p>
<p>ลองสังเกตุหน้าต่าง console ของ Firebug เวลาเลื่อนแผนที่ดูครับ จะเห็นการสื่อสารระหว่าง browser กับ server เพิ่มขอข้อมูลพิกัดทุกครั้งที่มีการเลื่อนแผนที่</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Tutorial แบบบ้านๆ ตอนที่ 2 &#8211; แสดงหมุดจาก database ใน Google Maps</title>
		<link>http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1/</link>
		<comments>http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 15:09:01 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=84</guid>
		<description><![CDATA[จากคราวก่อนที่เราทดลองใช้ Google Maps API แสดงแผนที่ในหน้าเวปของเราไปแล้ว (อ่าน Tutorial แบบบ้านๆ ตอนที่ 1) คราวนี้มาต่อตอนที่ 2: เพิ่มและแสดงหมุดใน Google Maps กันครับ

ประโยชน์ของการใช้ Google Maps API แสดงแผนที่ก็คือเราสามารถแสดงหมุด จากข้อมูลใน database ของเราเองได้ คราวนี้เราจะทดลองสร้าง interface ให้ปักหมุด จัดค่าพิกัดใน database และนำข้อมูลจาก database กลับมาแสดงครับ

สิ่งที่ต้องเตรียมก่อนเริ่ม

Database server สำหรับเก็บข้อมูลพิกัด (ผมใช้ MySQL v5.0)
Web Server สำหรับประมวลผลและติดต่อ database จะใช้อะไรก็ตามสะดวกครับ (ผมเขียน server side ด้วย Rails ครับ ขอใช้ตัวอย่างเป็น Rails นะครับ)]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-overlay1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-overlay1%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left:20px;"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>จากคราวก่อนที่เราทดลองใช้ Google Maps API แสดงแผนที่ในหน้าเวปของเราไปแล้ว (อ่าน <a href="http://www.tanomsak.com/?p=40">Tutorial แบบบ้านๆ ตอนที่ 1</a>) คราวนี้มาต่อตอนที่ 2: เพิ่มและแสดงหมุดใน Google Maps กันครับ</p>
<p>ประโยชน์ของการใช้ Google Maps API แสดงแผนที่ก็คือเราสามารถแสดงหมุด จากข้อมูลใน database ของเราเองได้ คราวนี้เราจะทดลองสร้าง interface ให้ปักหมุด จัดค่าพิกัดใน database และนำข้อมูลจาก database กลับมาแสดงครับ</p>
<h3>สิ่งที่ต้องเตรียมก่อนเริ่ม</h3>
<ol>
<li>Database server สำหรับเก็บข้อมูลพิกัด (ผมใช้ MySQL v5.0)</li>
<li>Web Server สำหรับประมวลผลและติดต่อ database จะใช้อะไรก็ตามสะดวกครับ (ผมเขียน server side ด้วย Rails ครับ ขอใช้ตัวอย่างเป็น Rails นะครับ)</li>
</ol>
<h3>ขั้นตอนที่ 1 มารู้จักวิธีการแสดงหมุดบนแผนที่ด้วย Google Maps API กันก่อน</h3>
<p>หมุดที่แสดงบนแผนที่ Google Maps จะเรียกว่า <a href="http://www.lecturer.eng.chula.ac.th/fsvskk/gglmap2/get-start-gmap-apiv2.html#วัตถุซ้อนทับบนแผนที่_(Map_Overlays)">Marker</a> ครับ โดยการจะแสดงหมุดบนแผนที่นั้น ก็ต้องสร้าง Marker ขึ้นมาก่อน แล้วก็ทำการเพิ่ม Marker ที่สร้างมาลงบนแผนที่ ลองดูจาก script นะครับ</p>
<p><span id="more-84"></span></p>
<pre class="brush: jscript;">
/*บรรทัด 2-3 เป็นการสร้างแผนที่และกำหนดจุดศูนย์กลางแผนที่ เหมือนในตอนที่ 1*/
var map = new GMap2(document.getElementById(&quot;map&quot;));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);

/*บรรทัด 6-7 เป็นการสร้าง Marker โดยกำหนดตำแหน่งของ Marker ไว้ตำแหน่งเดียวกับศูนย์กลางแผนที่*/
var point = new GLatLng(37.4419, -122.1419);
var marker = new GMarker(point);

/*บรรทัด 10 เป็นการเพิ่ม marker ที่เพิ่งสร้างลงในแผนที่*/
map.addOverlay(marker);
</pre>
<p><a href="http://www.tanomsak.com/tutorial-2-1.htm ">ตัวอย่างของ script ข้างบน</a> (view source กันเองนะครับ) เป็นไง ง่ายไหมครับ</p>
<h3>ขั้นตอนที่ 2 สร้าง database สำหรับเก็บข้อมูลพิกัด</h3>
<p>สร้าง table สำหรับเก็บข้อมูลพิกัด อย่างง่ายๆตาม SQL ข้างล่างครับ โดย field lat กับ lng เก็บทศนิยมแค่ 6 หลักก็พอครับ เนื่องจากถึงเก็บละเอียดกว่านี้ เรา็ก็คงสามารถสังเกตุไม่ออกแม้ว่าจะซูมแผนที่ใกล้ที่สุดแล้วก็ตาม ตัวอย่าง table และตัวอย่างข้อมูลต่อจากนี้ผมขออนุญาตนำมาจาก <a href="http://code.google.com/support/bin/answer.py?answer=87134&amp;topic=11364">http://code.google.com/support/bin/answer.py?answer=87134&amp;topic=11364</a> นะครับ</p>
<pre class="brush: sql;">
CREATE TABLE `markers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 60 ) NOT NULL ,
`address` VARCHAR( 80 ) NOT NULL ,
`lat` FLOAT( 10, 6 ) NOT NULL ,
`lng` FLOAT( 10, 6 ) NOT NULL
) ENGINE = MYISAM ;
</pre>
<h3>ขั้นตอนที่ 3 ใส่่ค่าเริ่มต้นใน database</h3>
<p>ใส่ marker ลงใน database เพิ่มค่าเริ่มต้นซักหน่อย เดี๋ยวเราจะลองมาแสดงหมุดจาก database กัน</p>
<pre class="brush: sql;">
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Frankie Johnnie Luigo Too','939 W El Camino Real, Mountain View, CA','37.386339','-122.085823');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Amici\'s East Coast Pizzeria','790 Castro St, Mountain View, CA','37.38714','-122.083235');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Kapp\'s Pizza Bar Grill','191 Castro St, Mountain View, CA','37.393885','-122.078916');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Round Table Pizza: Mountain View','570 N Shoreline Blvd, Mountain View, CA','37.402653','-122.079354');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Sausage Factory Inc','517 Castro St, San Francisco, CA','37.389578','-122.081463');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Tony and Alba\'s Pizza &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; Pasta','619 Escuela Ave, Mountain View, CA','37.394011','-122.095528');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Oregano\'s Wood-Fired Pizza','4546 El Camino Real, Los Altos, CA','37.401724','-122.114646');
</pre>
<h3>ขั้นตอนที่ 4 ทดลองนำค่าพิกัดจาก database มาแสดงในแผนที่</h3>
<p>พอเสร็จขั้นตอนที่ 3 เราก็มี database ที่มีข้อมูลพิกัดแล้ว ตอนนี้เราจะมาแสดงพิกัดจาก database บนแผนที่กันครับ เริ่มต้นง่ายๆที่สุดก็คือทำเป็นแบบ static โดยโหลดค่าพิกัดทั้งหมดที่ต้องการแสดงเข้าไปกับหน้าเพจที่กำลังแสดงเลย แล้วใช้ javascript สร้าง Marker จากค่าพิกัดนั้นๆ แล้วก็ใส่ลงในแผนที่</p>
<p>ขั้นตอนนี้จะต้องเขียนโปรแกรมฝั่ง server side กันละครับ ว่ากันตามสะดวกนะครับใครถนัดภาษาอะไร ตัวอย่างข้างล่างเป็น <a href="http://www.rubyonrails.org/">Ruby on Rails</a></p>
<p>ส่วน controller query ค่าพิกัดจาก database</p>
<pre class="brush: ruby;">
def show
@markers = Marker.find(:all, :limit =&gt; 5)
end
</pre>
<p>ส่วน view ไฟล์ show.html.erb</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;
&lt;title&gt;Google Maps JavaScript API Example&lt;/title&gt;
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hRHchrjOSPM-moa2HMmJZw-0fE6VhTsARfVd9x1Dg8TowZALqHIOcO20g&quot;
type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

//&lt;![CDATA[

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById(&quot;map&quot;));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);

var bounds = new GLatLngBounds();
for (var i = 0; i &lt; markers.length; i++) {
var point = new GLatLng(markers[i]['marker']['lat'],markers[i]['marker']['lng']);
var marker = new GMarker(point);
map.addOverlay(marker);
bounds.extend(point);
}
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
}
}

//]]&gt;
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;load()&quot; onunload=&quot;GUnload()&quot;&gt;
&lt;div id=&quot;map&quot; style=&quot;width:500px;height:300px&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

//&lt;![CDATA[
var markers = &lt;%=@markers.to_json%&gt; ;
//]]&gt;
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><a href="http://www.tanomsak.com/tutorial-2-2.htm">ตัวอย่างเมื่อเสร็จสมบูรณ์</a></p>
<p>จุดสำคัญคือ ตรง var markers = &lt;%=@markers.to_json%&gt; เป็นส่วนที่นำค่าพิกัดที่ได้จาก database ส่งไปให้ function load() เพื่อนำไปสร้าง Marker และใส่ในแผนที่ โดย Rails จะ render ออกมาเป็น</p>
<p>var markers = [{"marker": {"lng": -122.083235, "lat": 37.38714}}, {"marker": {"lng": -122.078916, "lat": 37.393885}}, {"marker": {"lng": -122.085823, "lat": 37.386339}}, {"marker": {"lng": -122.079354, "lat": 37.402653 }}, {"marker": {"lng": -122.081463, "lat":37.389578 }}] ;</p>
<p>แล้วเราก็แกะค่าตัวแปล markers เพื่อเอา lat, lng ออกมาสร้าง Marker ครับ</p>
<p>var point = new GLatLng(markers[i]['marker']['lat'],markers[i]['marker']['lng']);</p>
<p>ไม่ยากใช่ไหมครับ แต่ว่าวิธีนี้มีปัญหาอยู่ตรงที่ ถ้าเรามี Marker จำนวนมากๆ เป็นร้อยเป็นพัน จะทำให้หน้า html ของเราใหญ่และโหลดช้า รวมถึงทำให้เปลือง memory ในการที่โหลด Marker จำนวนมากๆด้วยครับ วิธีแก้ก็คือทำการ load ค่าพิกัดและสร้างหมุดแบบ dynamic คือแสดงเพราะส่วนที่มองเห็นในแผนที่เท่านั้น แต่ว่าขอยกไปคราวหน้าละกันครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Tutorial แบบบ้านๆ ตอนที่ 1 &#8211; Basic Google Maps API</title>
		<link>http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/</link>
		<comments>http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 14:36:18 +0000</pubDate>
		<dc:creator>tanomsak</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.tanomsak.com/?p=40</guid>
		<description><![CDATA[zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/' ตอนผมทำเวป ddproperty.com อยากจะเอา Google Maps มาใช้ระบุตำแหน่ง ก็เลยหาข้อมูลจากหลายๆที่ ทั้งดูตัวอย่างจากเวป แล้วก็หาอ่านจาก เอกสารของ google และ Google Maps Tutorial รวมถึงเอกสาร การใช้ Google Maps API ที่ รองศาสตราจารย์สวัสดิ์ชัย เกรียงไกรเพชร รวบรวมไว้ซึ่งละเอียดมากๆ ถ้าใครต้องการเนื้อหาแบบละเอียดๆ ก็ลองอ่านดูได้จาก link ข้างต้นไม่ผิดหวังครับ แต่ที่ผมจะเขียนนี้ขอเป็น Google Maps Tutorial แบบบ้านๆ รวบรวมเฉพาะส่วนที่ผมใช้เป็นหลักในเวป ddproperty.com โดยจะแบ่งเป็นตอนๆแบบนี้ครับ Basic Google Maps API แสดงหมุดจาก database ใน Google Maps แสดงหมุดจาก database ใน Google Maps ด้วย AJAX เพิ่มหมุดใน database [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="width: 100%; margin-bottom: 30px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-tutorial-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tanomsak.com%2Findex.php%2F2008%2F12%2Fgoogle-maps-tutorial-1%2F&amp;source=tanomsak&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left:20px;"><div class="zickrbutton"><script>zickr_url='http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/'</script><script language="javascript" src="http://api.zickr.com/button.js"></script></div></div>
<p>ตอนผมทำเวป ddproperty.com อยากจะเอา Google Maps มาใช้ระบุตำแหน่ง ก็เลยหาข้อมูลจากหลายๆที่ ทั้งดูตัวอย่างจากเวป แล้วก็หาอ่านจาก <a href="http://code.google.com/apis/maps/documentation/">เอกสารของ google</a> และ <a href="http://econym.googlepages.com/index.htm">Google Maps Tutorial</a> รวมถึงเอกสาร <a href="http://www.lecturer.eng.chula.ac.th/fsvskk/gglmap2/get-start-gmap-apiv2.html">การใช้ Google Maps API</a> ที่ รองศาสตราจารย์สวัสดิ์ชัย เกรียงไกรเพชร รวบรวมไว้ซึ่งละเอียดมากๆ ถ้าใครต้องการเนื้อหาแบบละเอียดๆ ก็ลองอ่านดูได้จาก link ข้างต้นไม่ผิดหวังครับ</p>
<p>แต่ที่ผมจะเขียนนี้ขอเป็น Google Maps Tutorial แบบบ้านๆ รวบรวมเฉพาะส่วนที่ผมใช้เป็นหลักในเวป ddproperty.com โดยจะแบ่งเป็นตอนๆแบบนี้ครับ</p>
<ol>
<li><a title="Basic Google Maps API tutorial " href="http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/" target="_blank">Basic Google Maps API</a></li>
<li><a title="แสดงหมุดจาก database ใน Google Maps" href="http://www.tanomsak.com/index.php/2008/12/google-maps-overlay1" target="_blank">แสดงหมุดจาก database ใน Google Maps</a></li>
<li><a title="แสดงหมุดจาก database ใน Google Maps ด้วย AJAX" href="http://www.tanomsak.com/index.php/2008/12/google-maps-database-ajax/" target="_blank">แสดงหมุดจาก database ใน Google Maps ด้วย AJAX</a></li>
<li><a title="Google Maps เพิ่มหมุด database" href="http://www.tanomsak.com/index.php/2008/12/google-maps-insert-database/" target="_blank">เพิ่มหมุดใน database</a></li>
<li><a title="รูปภาพแทนหมุด custom marker google maps api" href="http://www.tanomsak.com/index.php/2009/06/google-maps-customer-marker/" target="_blank">ใช้รูปภาพแทนหมุด (Custom Marker Icon)</a></li>
<li><a title="การทำ Custom marker icon สำหรับ Google Static Maps" href="http://www.tanomsak.com/index.php/2009/06/custom-marker-icon-google-static-maps/" target="_blank">การทำ Custom marker icon สำหรับ Google Static Maps</a></li>
<li><a href="http://www.tanomsak.com/index.php/2009/07/google-maps-custom-control/">ใช้รูปภาพแทนปุม control (Custom Control)</a></li>
<li>สร้าง info windows แบบลอยนอกแผนที่</li>
<li>แล้วแต่จะคิดออกต่อๆำไปครับ</li>
</ol>
<div>แต่ก่อนอื่นขอออกตัวไว้ก่อนเลยนะครับ ว่าผมก็ไม่ใช่กูรูอะไร แต่คิดว่าน่าพอจะมีประโยชน์ช่วยให้หลายๆคน เริ่มใช้งานได้เร็วขึ้นเลยเอามาแบ่งบันกัน แนะนำติชมได้เลยนะครับ ยินดีมากๆ</div>
<p><span id="more-40"></span></p>
<h2>ออกตัวเสร็จแล้วก็เริ่มตอนที่ 1 กันดีกว่า</h2>
<p>ในการจะนำ Google Maps มาใส่ในเวปของเราเนี้ยจริงๆแล้วมันมีได้ 2 แบบคือ</p>
<ul>
<li>แบบที่ใช้บริการจำพวก My maps ของ Google แบบนี้ใช้งานง่ายมากแค่แปะ link ในหน้า source code ของเวปก็แสดงแผนที่ได้แล้ว (แนะนำหนังสือ <a href="http://blog.macroart.net/2007/10/google-maps-miracle-of-online-map.html">Google Maps มหัศจรรย์แผนที่ออนไลน์</a> ครับ) แต่ว่ามีข้อจำกัดในการทำลูกเล่นต่างๆและ ไม่สามารถแสดงข้อมูลที่อยู่ใน database ของเราเองได้</li>
<li>กับแบบที่แสดงแผนที่โดยใช้ Google Maps API จะสามารถปรับหน้าตาแผนที่ได้ และจะสามารถแสดงหมุดจาก database ของเราเอง หรือเพิ่มหมุดลงใน database ก็ได้ครับ</li>
</ul>
<p>ที่ผมกำลังจะเขียนถึงเป็นแบบที่สอง คือ Google Maps API ครับ</p>
<h3>ขั้นตอนที่ 1: ขอใช้ API Key สำหรับใช้งาน Google Maps</h3>
<p>ขั้นแรกก็ต้องขอ API Key จาก Google ก่อนครับ โดยทำได้ง่ายมากๆ แค่มี account ของ google (ก็ account gmail นั้นแหละครับ) ก็เป็นอันใช้ได้ โดยไปที่ <a href="http://www.google.com/apis/maps/signup.html">http://www.google.com/apis/maps/signup.html</a> พออ่าน Term of Service จบแล้ว ก็ใส่ domain name ของเวปเรา ที่จะใช้ Google Maps API ในกล่้อง My web site ตามรูปครับ</p>
<p style="text-align: center;"><a href="http://www.tanomsak.com/wp-content/uploads/2008/12/googlemapapi.jpg"><img class="size-full wp-image-57 aligncenter" title="google maps api" src="http://www.tanomsak.com/wp-content/uploads/2008/12/googlemapapi.jpg" alt="" width="500" height="91" /></a></p>
<p>เช่นถ้าจะใช้ Google Maps API กับเวป ddproperty.com ก็ใส่ http://www.ddproperty.com ลงไปจะทำให้สามารถใช้ Google Maps API กับทุกๆหน้าภายใตั domain www.ddproperty.com ได้ (sub domain ไม่ได้นะครับ ต้องขอ API key อันใหม่)</p>
<p>ในช่วง development ที่ยังไม่ได้จด domain ก็ใส่ http://localhost/ ไปได้เลยครับ แล้วก็เข้าหน้าทดสอบผ่านทาง url localhost เอา</p>
<p>สามารถขอได้หมายๆอันนะครับ ไม่ต้องกลัวหมด <img src='http://www.tanomsak.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ผมขอมาทดลองหลายอันแล้ว</p>
<h3>ขั้นตอนที่ 2: แปะ script สำหรับ Google Maps API และเรียกใช้งาน</h3>
<p>พอกด Generate API Key ในขั้นแรกแล้วก็จะได้ API Key มา พร้อมด้วยตัวอย่างการนำไปใช้ในเวปของเราตามรูปข่างล่าง</p>
<p style="text-align: center;"><img class="size-full wp-image-58 aligncenter" title="apikey" src="http://www.tanomsak.com/wp-content/uploads/2008/12/apikey.jpg" alt="" width="450" height="249" /></p>
<p style="text-align: left;">จริงๆแล้วเจ้า Google Maps API เนี้ยมันก็คือ javascript functions ชุดนึงที่ Google เขียนขึ้นเพื่อให้เราเรียกใช้เพื่อสร้างแผนที่ในเวปเรา จากตัวอย่างที่ได้มาจากการสร้าง API Key จะเห็นได้ว่าการเรียกใช้งาน Google Maps API เนี้ยแบ่งเป็น 4 ส่วนใหญ่ๆครับ</p>
<ol>
<li>การ include Google Maps API (external javascript จาก google) เข้ามาในหน้าเวปเรา ตาม script ข้างล่างโดย v=2 หมายถึง API version 2 ซึ่งเป็นเวอร์ชั่นหลักในปัจจุบัน และ key=api_key ก็คือค่า API Key ของเราถ้าพัฒนาเสร็จแล้วก็ไปขอ API Key ใหม่โดยใช้ domain name ของจริงแล้วก็นำมาแทนที่ตรงนี้ครับ</li>
<pre class="brush: jscript;">
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;amp;amp;v=2&amp;amp;amp;amp;amp;amp;amp;amp;amp;key=ABQIAAAAeNsNnRXUdrpgSw3qfvhz5hT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQKXEKxoc7nW6rPe_Qv-bqip6q6Kw&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<li>เขียน javascript เพื่อเรียกใช้งาน Google Maps API จาก script จะเห็นการเรียก function GBrowserIsCompatible() เพื่อเป็นการตรวจสอบว่า browser รองรับหรือเปล่าก่อนจะสร้าง object map อันนี้เป็น pattern ในการเริ่มสร้าง map เลยครับ ที่อยากให้สังเกตุอีกอันนึงคือ GMap2(document.getElementById(<strong>&#8220;map&#8221;</strong>)); parameter ที่ใช้ในการสร้าง object GMap2 เป็นชื่อของ DIV Element ที่จะให้ google ใช้เป็นพื้นที่ของแผนที่</li>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;// &lt;![CDATA[

//&lt;![CDATA[

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById(&quot;map&quot;));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
}
}

// ]]&gt;&lt;/script&gt;
</pre>
<li>ต่อไปก็เป็นส่วนเรียกใช้ function load() ที่เขียนเอาไว้ โดยจากตัวอย่างของ Google เค้าเขียนง่ายๆ โดยการผูกกับ Event onload ของ Page body ส่วน GUnload() ที่ผูกไว้กับ Event onunload เป็น function ของ Google Maps ครับ เอาไว้ release memory ป้องกันพวก memory leak ประมาณนั้น ใส่ไว้กันเหนียว</li>
<pre class="brush: jscript;">
</pre>
<li>จาก script ในข้อ 3 อยากให้สังเกตุ DIV Element ที่มี id=&#8221;map&#8221; ครับ พื้นที่ตรงนี้แหละครับที่จะถูกแสดงแผนที่ ตามที่เรากำหนดไว้ใน function load() ในส่วนที่ 2 เราสามารถกำหนดขนาดเล็กใหญ่ของแผนที่ได้ โดยกำหนด style ให้กับ DIV Element อันนี้ครับ</li>
</ol>
<p>เท่านี้ก็เป็นอันเสร็จการเพิ่มแผนที่ Google Maps เข้าไปในเวปของเราแล้วครับ ลองดู<a href="http://www.tanomsak.com/tutorial-1.htm ">ผลงานจากตัวอย่าง</a> เขียนไปเขียนมาทำไมมันยาวจัง แล้วตอนต่อไปมันจะยาวขนาดไหนเนี้ย <img src='http://www.tanomsak.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ผมเขียนแล้วอ่านรู้เรื่องไหมครับ แนะนำและแสดงความคิดเห็นใน comment นะครับ แล้วจะนำไปปรับปรุงสำหรับตอนต่อๆไปครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tanomsak.com/index.php/2008/12/google-maps-tutorial-1/feed/</wfw:commentRss>
		<slash:comments>67</slash:comments>
		</item>
	</channel>
</rss>
