Category: Google Apps

  • การแสดงเส้นทางระหว่างพิกัดจุดบนแผนที่ Google Map APIs ด้วย DirectionsService ในเบื้องต้น

              หลังจากที่ก่อนหน้านี้ ผู้เขียนเคยได้มีโอกาสศึกษาบทความเกี่ยวกับความสามารถของ Google Map APIs มาบ้างแล้วนั้น ผู้เขียนเห็นว่าเรื่องเกี่ยวกับแผนที่นับเป็นอีกหัวข้อที่น่าสนใจในการพัฒนาเว็บไซต์ในปัจจุบัน โดยเฉพาะเว็บไซต์ที่มีส่วนเกี่ยวข้องกับสถานที่ และที่ตั้ง เพราะถือเป็นการเพิ่มลูกเล่นให้มีความตื่นตาตื่นใจยิ่งขึ้น โดยความสามารถของแผนที่ที่ใน Google Map APIs มีมาให้ใช้กันได้ในหลายรูปแบบ ขึ้นอยู่กับความต้องการของผู้พัฒนาแต่ละคน อาทิ การกำหนดพิกัดจุด การแสดงเส้นทาง การค้นหาละติจูด-ลองจิจูดจากการคลิกบนแผนที่ หรือจนกระทั่งการดึงพิกัดมาจากฐานข้อมูลเพื่อมาแสดงผล เป็นต้น โดยในความเป็นจริงแล้ว ลูกเล่นเกี่ยวกับการทำงานกับแผนที่ยังมีอีกมากมาย แต่ในบทความนี้ ผู้เขียนจะขอพูดถึงในส่วนของการแสดงเส้นทางระหว่างจุดสองจุดในแบบเบื้องต้นเพื่อทำความเข้าใจก่อนนำไปประยุกต์ใช้ ดังนี้

    การแสดงเส้นทางโดยเบื้องต้นเมื่อทราบจุดพิกัดละติจูด-ลองจิจูดบนแผนที่

    1. อ้างอิงไฟล์ที่ใช้ในการทำงานร่วมกับ Google Map APIs
      <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&language=en" async defer></script>
      
    2. ส่วนของ Javascript ที่ใช้ในการแสดงเส้นทางระหว่างพิกัด 2 จุดบนแผนที่
      <script type="text/javascript">
      /////////การกำหนดค่าละติจูด-ลองจิจูดระหว่าง 2 ตำแหน่ง ในที่นี้คือ มหาวิทยาลัยสงขลานครินทร์ และสวนสาธารณะหาดใหญ่
      var markers = [
       {
       "title": 'มหาวิทยาลัยสงขลานครินทร์',
       "lat": '7.006941', 
       "lng": '100.498412',
       "description": '<b>มหาวิทยาลัยสงขลานครินทร์:</b> (อังกฤษ: Prince of Songkla University; อักษรย่อ: ม.อ.) เป็นมหาวิทยาลัยแห่งแรกในภาคใต้ของประเทศไทย ตาม พระราชบัญญัติมหาวิทยาลัยสงขลานครินทร์ พ.ศ. ๒๕๑๑ ก่อตั้งในปี พ.ศ. 2510 ต่อมา พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดชได้พระราชทานชื่อเมื่อวันที่ 22 กันยายน พ.ศ. 2510 จึงถือว่าวันที่ 22 กันยายนของทุกปี เป็นวันสงขลานครินทร์'
       }
       ,
       {
       "title": 'สวนสาธารณะหาดใหญ่',
       "lat": '7.042899', 
       "lng": '100.507664',
       "description": '<b>สวนสาธารณะเทศบาลนครหาดใหญ่:</b> เป็นแหล่งพักผ่อนหย่อนใจของคนเมืองแห่งนี้ มีทัศนียภาพที่สวยงาม เต็มไปด้วยด้วยแมกไม้เขียวขจี มีอ่างเก็บน้ำขนาดใหญ่ สัตว์น้ำนานาชนิดมากมาย สมบูรณ์ด้วยธรรมชาติอันบริสุทธิ์ ที่รอคอยต้อนรับนักท่องเที่ยวให้ได้สัมผัสกับความร่มรื่นของพรรณไม้นานาชนิด'
       }
       
       ];
      ///////เป็นการกำหนดค่าต่างๆตอนที่ฟอร์มมีการโหลด
      
      window.onload = function () {
      
      //////กำหนดค่ากึ่งกลางการแสดงผลแผนที่ ระยะใกล้ และชนิดการแสดงผลของแผนที่
       var mapOptions = {
       center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
       zoom: 10,
       mapTypeId: google.maps.MapTypeId.ROADMAP
       };
      
      //////ประกาศ Element ที่จะใช้ในการแสดงผล
       var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
       var infoWindow = new google.maps.InfoWindow();
      
       var lat_lng = new Array(); ///สร้างตัวแปรอาร์เรย์เพื่อเก็บค่าละติจูด-ลองจิจูด
       var latlngbounds = new google.maps.LatLngBounds();
      
      /// วนพื่อเก็บค่าละติจูด-ลองจิจูดในตัวแปรอาร์เรย์ และเก็บค่าในการพิกัดจุดของแต่ละจุดที่มี
       for (i = 0; i < markers.length; i++) {
       var data = markers[i]
       var myLatlng = new google.maps.LatLng(data.lat, data.lng);
       lat_lng.push(myLatlng);
      
      
       var marker = new google.maps.Marker({
       position: myLatlng,
       map: map,
       title: data.title
       });
      
       latlngbounds.extend(marker.position);
      
      //////กำหนดเมื่อมีอีเวนต์คลิก ให้แสดงผลรายละเอียดที่กำหนดไว้ในตัวแปรของ marker ที่กำหนดไว้ในแต่ละตำแหน่ง
       (function (marker, data) {
       google.maps.event.addListener(marker, "click", function (e) {
       infoWindow.setContent(data.description);
       infoWindow.open(map, marker);
       });
       })(marker, data);
       }
       map.setCenter(latlngbounds.getCenter());
       map.fitBounds(latlngbounds);
       
       //***********ส่วนของการแสดงเส้นทาง****************//
       
       //ประกาศ Path Array
       var path = new google.maps.MVCArray();
       
       //ประกาศการใช้งาน Direction Service
       var service = new google.maps.DirectionsService();
       
       //กำหนดสีของเส้นทางที่ต้องการ
       var poly = new google.maps.Polyline({ map: map, strokeColor: '#4986E7' });
       
       //วนลูปเพื่อวาดเส้นทางระหว่างจุดที่มีในแผนที่
       for (var i = 0; i < lat_lng.length; i++) {
       if ((i + 1) < lat_lng.length) {
       var src = lat_lng[i];
       var des = lat_lng[i + 1];
       path.push(src);
       poly.setPath(path);
       service.route({
       origin: src,
       destination: des,
       travelMode: google.maps.DirectionsTravelMode.DRIVING
      /////กำหนด Mode ในการแสดงผลเส้นทาง(จะกล่าวเพิ่มเติมในภายหลัง)
       }, function (result, status) {
       if (status == google.maps.DirectionsStatus.OK) {
       for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++) 
      {
       path.push(result.routes[0].overview_path[i]);
       }
       }
       });
       }
       }
      
      </script>
    3. ส่วนของ body ในการแสดงผล
      <body>
       <form id="form1" runat="server">
      <div id="dvMap" style="width: 500px; height: 500px">
      </div>
       </form>
      </body>
    4. ตัวอย่างผลลัพธ์ที่ได้ หมายเหตุ: หากต้องการเปลี่ยนสีเส้นทางในการแสดงผล สามารถทำได้โดยการกำหนดสี จากโค้ดดังตัวอย่าง คือ
      var poly = new google.maps.Polyline({ map: map, strokeColor: ‘#4986E7‘ }); ซึ่งสามารถเปลี่ยน strokeColor ในส่วนของตัวอักษรสีน้ำเงินให้เป็นสีที่ท่านต้องการได้

              เอาล่ะค่ะ เราก็ได้เห็นวิธีการและตัวอย่างการแสดงเส้นทางระหว่างจุดพิกัดบนแผนที่กันไปพอหอมปากหอมคอกันแล้วนะคะ หวังว่าผู้อ่านแต่ละท่านจะสามารถนำเกร็ดเล็กเกร็ดน้อยเหล่านี้ไปประยุกต์ใช้งานต่อได้ไม่มากก็น้อย หากมีข้อผิดพลาดประการใดผู้เขียนขออภัยไว้ ณ ที่นี้ด้วยนะคะ ไว้เจอกันใหม่บทความหน้าเกี่ยวกับเรื่อง “การปรับเปลี่ยนรูปแบบการแสดงผลเส้นทางระหว่างพิกัดจุดบนแผนที่ Google Map APIs ด้วย DirectionsTravelMode” นะคะ ขอบคุณค่ะ ^^

    หมายเหตุ: หากผู้ใดสนใจบทความอื่นๆเกี่ยวกับการพัฒนาโปรแกรมด้วยแผนที่ Google Map APIs ที่ผู้เขียนเคยเขียนไว้ก่อนหน้านี้ สามารถติดตามได้จากลิงค์ต่อไปนี้ค่ะ
    1) ทำอย่างไรให้สามารถกำหนดจุดพิกัดบนแผนที่ Google map แบบจุดเดียวและหลายจุดจากฐานข้อมูลได้ด้วย ASP.NET C#
    2) ทำอย่างไรให้สามารถกำหนดจุดพิกัดบนแผนที่ Google map แบบจุดเดียวและหลายจุดจากฐานข้อมูลได้ด้วย ASP.NET C# (ภาคต่อ)
    3) การดึงค่าละติจูดและลองจิจูดของสถานที่ด้วย Places search box บน Google Maps
    4) การค้นหาสถานที่ด้วย Places search box และแสดงผลภาพจากข้อมูล Street View บน Google Maps


แหล่งข้อมูลอ้างอิง :

 

  • [GAFE] ใช้ Google Forms เพื่อ Upload ไฟล์ได้แล้ว

    Google Forms เป็นเครื่องมือในการสร้างแบบสำรวจ แบบสอบถาม และแบบทดสอบที่ใช้งานได้ง่าย ใช้งานได้อย่างกว้างขวาง

    แต่ที่ผ่านมา ก็มีข้อจำกัดที่ยังด้อยกว่าการสร้าง Web Form นั่นคือ การใช้งาน Google Forms เพื่อ Upload ไฟล์ เช่น แบบฟอร์มการรับสมัคร แล้วต้องการให้ผู้ใช้ ส่งสำเนาบัตรประชาชนมาด้วย

    และแล้ว … ปลายปี 2559 Google Forms ก็เพิ่มความสามารถนี้เข้ามา แต่ “ให้ใช้เฉพาะ Google Apps” เท่านั้น หมายความว่า ผู้ที่ใช้ Free Gmail Account จะไม่สามารถใช้งานได้

    ขั้นตอนการใช้งาน

    1. สร้าง Google Forms ด้วย Google Apps Account
    2. สร้างคำถามตามปรกติ
      แล้วในส่วนของการ Upload ไฟล์ คลิก Option ของชนิดของคำถามแล้วเลือกเป็น File Upload
    3. จากนั้นยอมรับเงื่อนไข โดยคลิก Continue
    4. จากนั้น สามารถ กำหนดขนาดสูงสุดของไฟล์ได้
    5. กำหนดชนิดของไฟล์ก็ได้ คลิก แล้ว Apply
    6. กำหนดจำนวนของไฟล์ที่จะ Upload ก็ได้
    7. เมื่อมีผู้ส่งไฟล์เข้ามา
      ก็จะเก็บไว้ใน Google Drive ขึ้นต้นด้วยชื่อไฟล์ แล้ว มีชื่อ (ตาม Email address)  ของผู้ส่ง
    8. แต่ไม่ต้องห่วง หากมีการส่งชื่อไฟล์ซ้ำกัน จากคนๆเดียวกัน
      ไฟล์ใน Google Drive จะแยกจากกันด้วย Unique ID เราสามารถเห็นความแตกต่างได้จากเวลา
    9. และในส่วนของ Response ก็จะมองเห็นว่า ใครส่งไฟล์อะไรมา

    ครับ

  • การค้นหาสถานที่ด้วย Places search box และแสดงผลภาพจากข้อมูล Street View บน Google Maps

           ความเดิมจากตอนที่แล้วของบทความ “การดึงค่าละติจูดและลองจิจูดของสถานที่ด้วย Places search box บน Google Maps” เพื่อแก้ปัญหาในการดึงค่าละติจูด-ลองจิจูดจากชื่อสถานที่ที่ผู้ใช้พิมพ์ค้นหาไว้ โดยมีการนำ “Places search box” มาใส่ไว้ในแผนที่ที่เราต้องการแทนนั้น ถือเป็นตัวช่วยให้กับผู้ใช้ในระดับหนึ่ง  แต่สำหรับในบทความนี้ ผู้เขียนจะขอต่อยอดความรู้ดังกล่าว โดยได้ศึกษาและนำวิธีการแสดงผลภาพจากข้อมูล Street view มาประยุกต์ใช้ร่วมด้วย เพื่อให้ผู้ใช้สามารถมองเห็นสถานที่จริงที่เลือกได้จากแผนที่ได้ด้วย ซึ่งจะยิ่งช่วยอำนวยความสะดวกให้กับผู้ใช้ ทำให้ผู้ใช้สามารถตรวจสอบได้ว่าสถานที่ดังกล่าวเป็นสถานที่ที่ต้องการจะดึงค่าละติจูด-ลองจิจูดจริงหรือไม่ได้อีกทางหนึ่งนั่นเอง ซึ่งวิธีการบางส่วนจะขอยกยอดมาจากบทความก่อนหน้านี้ เกี่ยวกับเรื่องการดึงค่าละติจูด-ลองจิจูดจากการค้นหาโดยใช้ Places search box และจะขอเพิ่มเติมความสามารถในการแสดงผลภาพ Street View  รวมทั้งสามารถคลิกจุดพิกัดใหม่บนแผนที่ เพื่อค้นหาตำแหน่ง สถานที่ตั้ง และรายละเอียด รวมถึงภาพจาก Street View ได้อีกด้วย เพื่อให้การดึงค่าพิกัดใกล้เคียงความจริงมากที่สุด โดยมีวิธีการดังนี้

    • ส่วนของสไตล์ชีทในการแสดงผล ขึ้นกับการตกแต่งของผู้พัฒนาแต่ละท่าน
    <!—ส่วนของ Style Sheets->
    <style>
    html, body {
     height: 100%;
     margin: 0;
     padding: 0;
    }
    #map {
     width: 100%;
     height: 400px;
    }
    .controls {
     margin-top: 10px;
     border: 1px solid transparent;
     border-radius: 2px 0 0 2px;
     box-sizing: border-box;
     -moz-box-sizing: border-box;
     height: 32px;
     outline: none;
     box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
    }
    #searchInput {
     background-color: #fff;
     font-family: Roboto;
     font-size: 15px;
     font-weight: 300;
     margin-left: 12px;
     padding: 0 11px 0 13px;
     text-overflow: ellipsis;
     width: 80%;
    }
    #searchInput:focus {
     border-color: #4d90fe;
    }
    
    </style>
    
    • ส่วนของการอ้างอิง libraries เพื่อใช้งาน Google API
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCRbMoDPc_mTv3D3QPqe0Ar84nSvRhA8nk&libraries=places&callback=initMap" async defer></script>
    
    • ส่วนของการประกาศค่าเริ่มต้นและตัวแปร รวมถึงการเรียกใช้งานฟังก์ชั่นเพื่อใช้ในการแสดงผล
      • ฟังก์ชั่น initMap() ซึ่งจะเรียกใช้งานตอนเริ่มต้นโหลดหน้าจอขึ้นมา
    <script>
     var panorama;
     var map;
     var markers = [];
    /***** function ในการประกาศค่าเริ่มต้นให้กับแผนที่*****/
     function initMap() {
    
    /***** ประกาศตำแหน่งพิกัดกึ่งกลางให้กับการแสดงผลแผนที่ ในที่นี้กำหนดเป็นกรุงเทพมหานคร*****/
     var center_point = { lat: 13.7563309, lng: 100.50176510000006 };
     var sv = new google.maps.StreetViewService();
    
    /***** เป็นส่วนของการแสดงผลภาพจาก Street View *****/
     panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));
    
     /***** กำหนดรายละเอียดคุณสมบัติของแผนที่*****/
     var map = new google.maps.Map(document.getElementById('map'), {
     center: {lat: center_point.lat, lng: center_point.lng},
     zoom: 13,
     streetViewControl: false // เป็นส่วนที่ Set เพิ่มเติมจากปกติ
     });
    
    sv.getPanorama({ location: center_point, radius: 50 }, processSVData);
    
    /***** กำหนด event เมื่อมีการคลิกแผนที่*****/
     map.addListener('click', function(event) {
     
    /***** ล้างข้อมูลการกำหนดจุด เพื่อให้มีการกำหนดจุดพิกัดเพียงจุดเดียว*****/
     for (i = 0; i < markers.length; i++) {
     markers[i].setMap(null);
     }
    
    /***** ดึงค่าข้อมูลจาก Street View ตามพิกัดที่คลิกบนแผนที่ *****/
     sv.getPanorama({ location: event.latLng, radius: 50 }, processSVData);
     var geocoder = new google.maps.Geocoder();
     geocoder.geocode({
     'latLng': event.latLng
     }, function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
    
    /***** แสดงผลข้อมูลรายละเอียดสถานที่*****/
     if (results[0]) {
        var place = results[0];
         for (var i = 0; i < place.address_components.length; i++) {
           if (place.address_components[i].types[0] == 'postal_code') {
             document.getElementById('postal_code').innerHTML = place.address_components[i].long_name;
          }
     if (place.address_components[i].types[0] == 'country') {
     document.getElementById('country').innerHTML = place.address_components[i].long_name;
        }
      }
     document.getElementById('location').innerHTML = results[0].formatted_address;
     document.getElementById('lat').innerHTML = results[0].geometry.location.lat();
     document.getElementById('lon').innerHTML = results[0].geometry.location.lng();
        }
       }
     });
     });
     /***** กำหนดตำแหน่งที่ตั้งของ control ที่จะวางในแผนที่*****/
     var input = document.getElementById('searchInput');
     map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
    
     /***** เพิ่ม Feature ให้กับ textbox ให้สามารถพิมพ์ค้นหาสถานที่ได้*****/
     var autocomplete = new google.maps.places.Autocomplete(input);
     autocomplete.bindTo('bounds', map);
    
     var infowindow = new google.maps.InfoWindow();
     
     /***** กำหนดคุณสมบัติให้กับตัวพิกัดจุดหรือ marker *****/
     var marker = new google.maps.Marker({
     map: map,
     anchorPoint: new google.maps.Point(0, -29)
     });
    markers.push(marker); //เก็บค่าการกำหนดจุดพิกัดไว้ในตัวแปร markers เพื่อใช้ล้างข้อมูลการกำหนดจุดได้
    
     /***** ทำงานกับ event place_changed หรือเมื่อมีการเปลี่ยนแปลงค่าสถานที่ที่ค้นหา*****/
     autocomplete.addListener('place_changed', function() {
     infowindow.close();
     marker.setVisible(false);
     var place = autocomplete.getPlace();
     if (!place.geometry) {
     window.alert("ไม่ค้นพบพิกัดจากสถานที่ดังกล่าว");
     return;
     }
    
     /***** แสดงผลบนแผนที่เมื่อพบข้อมูลที่ต้องการค้นหา *****/
     if (place.geometry.viewport) {
     map.fitBounds(place.geometry.viewport);
     } else {
     map.setCenter(place.geometry.location);
     sv.getPanorama({ location: place.geometry.location, radius: 50 }, processSVData);
     map.setZoom(17);
     }
     marker.setIcon(({
     url: place.icon,
     size: new google.maps.Size(71, 71),
     origin: new google.maps.Point(0, 0),
     anchor: new google.maps.Point(17, 34),
     scaledSize: new google.maps.Size(35, 35)
     }));
     marker.setPosition(place.geometry.location);
     marker.setVisible(true);
     
     /***** แสดงรายละเอียดผลลัพธ์การค้นหา *****/
     var address = '';
     if (place.address_components) {
     address = [
     (place.address_components[0] && place.address_components[0].short_name || ''),
     (place.address_components[1] && place.address_components[1].short_name || ''),
     (place.address_components[2] && place.address_components[2].short_name || '')
     ].join(' ');
     }
     /***** แสดงรายละเอียดผลลัพธ์การค้นหาเป็น popup โดยมีชื่อและสถานที่ดังกล่าว *****/
     infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
     infowindow.open(map, marker);
    
     /***** แสดงรายละเอียดผลลัพธ์การค้นหา ซึ่งประกอบด้วย ที่อยู่ รหัสไปรษณีย์ ประเทศ ละติจูดและลองจิจูด *****/
     for (var i = 0; i < place.address_components.length; i++) {
     if(place.address_components[i].types[0] == 'postal_code'){
     document.getElementById('postal_code').innerHTML = place.address_components[i].long_name;
     }
     if(place.address_components[i].types[0] == 'country'){
     document.getElementById('country').innerHTML = place.address_components[i].long_name;
     }
     }
     document.getElementById('location').innerHTML = place.formatted_address;
     document.getElementById('lat').innerHTML = place.geometry.location.lat();
     document.getElementById('lon').innerHTML = place.geometry.location.lng();
     });
    }
    </script>
    
    • ฟังก์ชั่น processSVData() เป็นฟังก์ชั่นที่ใช้ในการนำค่าของ Street view มาแสดงผล
    <script>
    function processSVData(data, status) {
     if (status === 'OK') {
     
      marker = new google.maps.Marker({
     position: data.location.latLng,
     map: map,
     title: data.location.description
     });
     markers.push(marker);
     panorama.setPano(data.location.pano);
     panorama.setPov({
     heading: 270,
     pitch: 0
     });
     panorama.setVisible(true);
    
     marker.addListener('click', function() {
     
     var markerPanoID = data.location.pano;
     // Set the Pano to use the passed panoID.
     panorama.setPano(markerPanoID);
     panorama.setPov({
     heading: 270,
     pitch: 0
     });
     panorama.setVisible(true);
     });
     } else {
     console.error('ไม่พบข้อมูล Street view ตามสถานที่ดังกล่าว');
     }
     }
    </script>
    
    • ส่วนของการแสดงผล (ใน tag body)
    <body>
    
    <!--ส่วนของการแสดงรายละเอียดผลลัพธ์ที่ได้->
     <table style="width: 100%">
     <tr>
     <td>
    <!--ส่วนของ Element ที่ใช้ในการแสดงผล->
     <input id="searchInput" class="controls" type="text" placeholder="Enter a location">
    <div id="map" style="width: 60%;height:360px;float:left"></div>
    <div id="pano" style="width: 40%;height:360px; float:left"> </div><br />
     </td>
     
     </tr>
     <tr>
     <td>
     <div id="Div1" style="width: 100%;" >
     <ul id="geoData">
     <li>ที่อยู่: <span id="location"></span></li>
     <li>รหัสไปรษณีย์ : <span id="postal_code"></span></li>
     <li>ประเทศ: <span id="country"></span></li>
     <li>ละติจูด: <span id="lat"></span></li>
     <li>ลองจิจูด: <span id="lon"></span></li>
    </ul>
    </div>
    
     </td>
     </tr>
     
     </table>
     <!--ส่วนของการประกาศค่าเริ่มต้นและตัวแปร รวมถึงการเรียกใช้งานฟังก์ชั่นเพื่อใช้ในการแสดงผลที่กล่าวไว้ก่อนหน้านี้-> <script> /***** function ในการประกาศค่าเริ่มต้นให้กับแผนที่ และอื่นๆตามที่กล่าวไว้แล้วข้างต้น*****/ </script> <!--สิ้นสุดส่วนของการประกาศค่าเริ่มต้นและตัวแปร รวมถึงการเรียกใช้งานฟังก์ชั่นเพื่อใช้ในการแสดงผล-> </body>

    ผลลัพธ์ที่ได้

    1. เมื่อเปิดหน้าจอขึ้นมา จะแสดงพิกัดที่จังหวัดกรุงเทพมหานครเป็นค่าตั้งต้น และฝั่งขวาเป็นภาพที่ดึงข้อมูลมาได้จากพิกัดดังกล่าวจากข้อมูล Street Views

    2. พิมพ์ค้นหาชื่อสถานที่ และเลือกสถานที่ที่ต้องการ

    3. เมื่อเลือกสถานที่เรียบร้อย จะมีการกำหนดพิกัดจุดตามชื่อสถานที่ที่เลือกไว้ และแสดงผลภาพจาก Street View รวมทั้งแสดงรายละเอียดในส่วนล่างของหน้าจอ ดังภาพ

           นอกจากการค้นหาพิกัดและข้อมูลภาพจาก Street View โดยใช้วิธีการพิมพ์ค้นหาแล้วนั้น ผู้ใช้ยังสามารถค้นหาพิกัดใหม่ได้จากการคลิกบนแผนที่ได้อีกด้วย ซึ่งจะแสดงผลลัพธ์ได้เช่นกัน ดังภาพ

           ผู้เขียนหวังเป็นอย่างยิ่งว่า บทความนี้จะช่วยเพิ่มประสิทธิภาพและเป็นอีกหนึ่งทางเลือกให้กับผู้พัฒนาได้หยิบยกวิธีการดึงค่าละติจูด-ลองจิจูดและการแสดงผลข้อมูลไปประยุกต์ใช้กับงานของแต่ละท่าน และอาจถือเป็นการเพิ่มลูกเล่นให้กับเว็บไซต์ของท่านให้มีความสามารถที่หลากหลายมากขึ้นเกี่ยวกับการใช้งานร่วมกับแผนที่ Google Maps หากผู้อ่านท่านใดมีข้อเสนอแนะหรือแนะนำวิธีเพิ่มเติมเกี่ยวกับเรื่องดังกล่าว ผู้เขียนยินดีเป็นอย่างยิ่งที่จะรับฟังและร่วมแบ่งปันความรู้ร่วมกันค่ะ หากบทความนี้มีส่วนผิดพลาดประการใด ผู้เขียนขออภัยไว้ ณ ที่นี้ด้วยค่ะ ^^

    แหล่งข้อมูลอ้างอิง :  

    https://www.tutorialspoint.com/google_maps/google_maps_symbols.htm

    http://www.codexworld.com/autocomplete-places-search-box-google-maps-javascript-api/

          https://developers.google.com/maps/documentation/javascript/examples/streetview-service

  • วิธีการตั้งค่า Google Apps/Gmail บน Microsoft Outlook 2016

    ก่อนจะตั้งค่า Microsoft Outlook 2016 ให้สามารถใช้งานกับ Google Apps/Gmail Account ได้ต้องดำเนินการตามนี้ก่อน (เพราะ Microsft Outlook 2016 ยังไม่รองรับการยืนยันตัวตนด้วย OAuth 2.0 ซึ่งมีความปลอดภัย)

    แบ่งเป็น 2 กรณีครับ

    1. ถ้าไม่ได้ใช้ 2-Step Verification ต้องไปที่
    https://myaccount.google.com/security
    แล้วคลิก Allow less secure apps: ให้เป็น On ครับ
    i1
    2. กรณีใช้ 2-Step Verification ให้ทำการสร้าง Apps Password โดยไปที่
    https://security.google.com/settings/security/apppasswords?pli=1
    เลือก Mail > Windows Computer แล้วคลิก Generate
    จากนั้นเอารหัสผ่านที่แสดงขึ้นมาใหม่ ไปใช้งานครับ
    i2
    i3
    จากนั้น จึงใส่รหัสผ่านใน Outlook ครับ
    2559-12-06-15_08_18
    UPDATE: หากจะใช้ OAuth 2.0 จริงๆ ก็ทำได้ แต่ต้อง Tweak แก้ registry กันเลย ตามนี้ครับ
  • วิธีใช้ Google Sites เพื่อแสดงรายงานผลการลงทะเบียนจาก Google Form

    ปัจจุบันการสร้างแบบฟอร์มการรับลงทะเบียนออนไลน์สามารถทำได้ง่ายๆโดยใช้ Google Form โดยวันนี้มีโจทย์ว่า ต้องการรับลงทะเบียนผู้ที่จะร่วมเดินทาง กำหนดว่า ต้องการเดินทางกับรถบัสหมายเลขใด (มี 3 คัน) และต้องการแสดงผลทันทีว่า แต่ละคันมีจำนวนคนเท่าไหร่แล้ว และ ใครบ้างที่เดินทางไปในรถบัสคันนั้น

    วิธีการคือ

    1. สร้าง Google Form เพื่อทำระบบรับลงทะเบียนตามปรกติ
      2559-11-03-10_08_062559-11-03-10_08_22-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
      2559-11-03-10_08_37-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
      2559-11-03-10_08_37-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
    2. ในส่วนของการสร้างแบบฟอร์ม ให้คลิกที่ RESPONSES แล้วคลิกที่รูป สี่เหลี่ยมสีเขียว (Google Sheets) 
      2559-11-03-14_21_05
    3. แล้วจัดรูปแบบให้เรียบร้อย เช่นต้องการจะซ่อน Column ใดบ้าง (จะใส่สี ก็ได้นะ)
      เสร็จแล้ว คลิกที่ปุ่ม Share
      2559-11-03-14_25_27
    4. กำหนดให้ Anyone with Link “Can View” แล้วคลิก Done
      2559-11-03-14_30_28
    5. สร้าง Google Sites และสร้างโครงสร้าง Page ต่างๆตามต้องการ
      2559-11-03-10_10_02-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    6. ในตัวอย่างนี้ จะสร้าง Page “รายชื่อ” เพื่อไว้ใช้แสดงผลการลงทะเบียน ว่า รถหมายเลขใด มีจำนวนกี่คนแล้ว และใครบ้าง
      ให้เลือก Insert > More gadgets
      แล้วคลิกที่ Public > Include gadget (Iframe)
      2559-11-03-14_39_23-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence 2559-11-03-14_39_45-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence 2559-11-03-14_39_55-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    7. จากนั้น มาใส่ URL กัน
      2559-11-03-14_40_09-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    8. ใส่ URL ตามนี้https://spreadsheets.google.com/tq?tqx=out:html&tq=select  L,count(B) group by L  label count(B) ‘จำนวน’&key=XXXXXXXXXXXXXXXXXX

      เพื่อให้แสดงผลว่า รถบัสหมายเลขใด มีจำนวนคนเท่าไหร่
      โดยที่ tq เป็น Query เขียนว่า select L, count(B) group by L label count(B) ‘จำนวน’
      คือการแสดงคอลัมน์ L และ นับจำนวนโดยการ count โดยจัดกลุ่มตามคอลัมน์ L
      นอกจากนั้นยัง label คอลัมน์ count(B) เป็นคำว่า “จำนวน”2559-11-03-15_44_37-%e0%b9%82%e0%b8%84%e0%b8%a3%e0%b8%87%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%96%e0%b8%a7%e0%b8%b2%e0%b8%a2%e0%b8%84%e0%b8%a7%e0%b8%b2%e0%b8%a1%e0%b8%ad%e0%b8%b2%e0%b8%a5%e0%b8%b1%e0%b8%a2

      ผลที่ได้คือ
      2559-11-03-15_48_55-search

      และ key=XXXXXXXXXXX นั้น ให้เอาค่าจาก

      2559-11-03-15_51_51

    9. ต่อไปให้แสดงผลรายชื่อทั้งหมด โดยสามารถแยกรายชื่อแต่ละคัน โดย
      Insert > Drive > Spreadsheet
      2559-11-03-15_50_46-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolenceแล้วเลือก Google Sheet ที่ต้องการ
      2559-11-03-15_57_14-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    10. เมื่อดำเนินการเสร็จแล้ว ระบบก็จะสามารถแสดงผลการลงทะเบียนได้อัตโนมัติ
      2559-11-03-16_01_15-program-manager

     

  • การเชื่อมต่อ Thunderbird กับ Google Mail (ทั้ง Gmail และ Google Apps)

    ในอดีต Thunderbird และ Mail Client อื่นๆสามารถติดต่อกับ Google Mail ได้โดยตั้งค่า Mail Server ให้ถูกต้อง และ username/password ก็สามารถใช้งานได้ แต่ในปัจจุบัน Google หันไปใช้ระบบ OAuth 2.0 ซึ่งการ Authentication หรือการใส่ username/password ต้องทำที่ Google เท่านั้น รวมถึงการทำ 2-Step Verification ด้วย (การใส่ One-Time Password นอกเหนือจาก username/password เป็นต้น) ทำให้ Thunderbird และ Mail Client ที่ยังไม่รองรับ OAuth 2.0 ไม่สามารถใช้งานได้

    แต่ทาง Google Mail ยังเปิดให้สามารถใช้งานได้ โดยแบ่งเป็น 2 กรณีคือ ใช้หรือไม่ใช้ 2-Step Verification โดยตรวจสอบได้จาก

    0. วิธีตรวจสอบว่าใช้งาน 2-Step Verification หรือไม่ โดยการไปที่ https://myaccount.google.com/security
    หากไม่เปิดใช้ 2-Step Verification จะได้หน้าตาอย่างนี้
    2559-08-08 09_33_29-Program Manager
    หากเปิดใช้ 2-Step Verification จะได้หน้าตาอย่างนี้
    2559-08-08 09_34_04-Program Manager

    1. ผู้ใช้ที่ไม่ได้เปิดใช้งาน 2-Step Verification ให้ไปที่ https://myaccount.google.com/security#connectedapps
    ภายใต้หัวข้อ Allow less secure apps ให้เปิดใช้งาน ดังภาพ
    2559-08-08 09_40_49-Program Manager

    2. ผู้ใช้ที่เปิดใช้งาน 2-Step Verification ให้ไปที่ https://security.google.com/settings/security/apppasswords
    แล้วเลือก Mail และ Windows Computer แล้วคลิก Generate ดังภาพ
    2559-08-08 10_03_47-App passwords - Account Settings
    จะได้ Password ที่ใช้ครั้งเดียวทิ้ง (ไม่ต้องไปจำ) ดังภาพ
    2559-08-08 10_06_10-App passwords - Account Settings
    หากวันหลังต้องการเลิกใช้ ก็กดปุ่ม Revoke ภายหลังได้

    จากนั้น เปิดให้ Google Account ใช้งาน IMAP ได้ โดยไปที่ https://mail.google.com/mail/u/0/#settings/fwdandpop
    แล้วคลิก Enable IMAP ดังภาพ
    2559-08-08 10_17_17-Settings - Psu.ac.th Mail
    แล้วคลิก Save Change ด้านล่าง

    สุดท้าย ที่ Thunderbird ให้ตั้งค่า

    Password: สำหรับคนที่ไม่ใช้ 2-Step Verification ให้ใส่ Password ของ Google Account เดิมลงไป ส่วนคนที่ใช้ 2-Step Verification ให้เอา Password ที่ได้มาใหม่ใส่ลงไปแทน
    Incoming IMAP เป็น imap.gmail.com และ SSL เป็น SSL/TLS
    Outgoing SMTP เป็น smtp.gmail.com และ SSL เป็น SSL/TLS
    อย่าลืม ใส่ username ให้มี @gmail.com หรือ @psu.ac.th ในกรณีใช้ PSU GAFE ด้วย
    แล้วคลิกปุ่ม Done ดังภาพ

    2559-08-08 10_12_15-Mail Account Setup

    เท่านี้ก็สามารถใช้งาน Google Mail จาก Thunderbird ได้แล้ว

  • เทคนิคการวัดความเร็วในการตอบอีเมลลูกค้า

    ถ้ามี KPI ที่ต้องทำให้สำเร็จคือ “ร้อยละของปัญหาที่ตอบกลับลูกค้าภายใน 2 วันทำการ”
    แล้ว … ช่องทางที่รับปัญหาจากลูกค้าคือ ทางอีเมล (ในที่นี้เป็นบริการอีเมลบนระบบของ Google Mail หรือ Gmail)
    โดยการตอบกลับ คือ การ Reply กลับไปหาลูกค้า
    เวลาที่นับคือ นับตั้งแต่เวลาที่อีเมลเข้ามาถึง จนกระทั่งมีการตอบกลับไปหาลูกค้าทางอีเมลฉบับแรก

    สำหรับคนที่ใช้ Google Mail หรือ Gmail อยู่ สามารถใช้ Google Sheets ทำรายงานได้ ตามขั้นตอนต่อไปนี้
    1. ไปที่ drive.google.com (ให้ Login ด้วย Account ที่ต้องการด้วย)
    2. สร้าง Google Sheets แล้วตั้งชื่อตามต้องการ เช่น Report
    3. ไปที่เมนู Tools > Script Editor
    2559-08-04 11_20_00-My Drive - Google Drive
    4. ตั้งชื่อ Project ว่า report แล้ววางโค๊ดต่อไปนี้ลงไป

     

    function reportResponseTime() {
    // ถ้าจะทำรายงานทั้ง Inbox ให้ uncomment บรรทัดต่อไปแทน
    //var threads = GmailApp.getInboxThreads();

    // ถ้าจะทำรายงานเฉพาะ Lable ที่เตรียมไว้ ในที่นี้ใช้ Label “support-psuemail”
    var threads = GmailApp.search(‘label:support-psuemail ‘);

    for (var i = 0; i < threads.length; i++) { // วนลูปแต่ละ Thread
    if (threads[i].getMessageCount() > 1) { // สนใจเฉพาะ Thread ที่มีการตอบกลับเท่านั้น
    var messages = threads[i].getMessages(); // Subject ของอีเมล
    var d1= messages[0].getDate().getTime(); // เวลาที่อีเมลเข้ามา
    var d2= messages[1].getDate().getTime(); // เวลาที่ตอบกลับฉบับแรก
    var diff = (d2-d1)/(1000*60*60); // ระยะเวลาหน่วยเป็น ชั่วโมง

    // เขียนต่อท้าย Sheet ที่กำลังใช้งาน
    SpreadsheetApp.getActiveSheet().appendRow([messages[0].getSubject(), messages[0].getDate(), messages[1].getDate(), diff])
    }
    }
    }

     

     

    2559-08-04 11_24_42-Clipboard

    5. คลิก Run > reportResponseTime
    (หากมีหน้าจอ Consense ต่างๆขึ้นมาให้ Allow ไป)
    6. ผลจะปรากฏใน Sheet ที่เปิดไว้
    2559-08-04 11_34_18-Report - Google Sheets
    7. จากนั้นสามารถเอาผลไปคำนวนต่อ เช่น ร้อยละของอีเมลที่ตอบสนองภายใน 48 ชั่วโมงหรือ 2 วัน เป็นต้น และสามารถตอบคำถามได้ว่า ทำไมบางฉบับใช้เวลาเกิน 48 ชั่วโมง (อาจจะเป็นเพราะติดเสาร์อาทิตย์เป็นต้น)

    *** กรุณาอ้างอิงด้วยนะครับ หากนำไปเผยแพร่ต่อ ***

  • สร้าง Form ลงทะเบียนออนไลน์ด้วย Google Form (รูปแบบใหม่) ให้ตอบรับผ่านทางอีเมลโดยอัตโนมัติ พร้อมปิด Form อัตโนมัติเมื่อครบเต็มจำนวน

    จากที่ผมเคยได้เขียนวิธีการสร้างแบบฟอร์มลงทะเบียนออนไลน์ด้วย Google Form ให้ตอบรับผ่านทางอีเมลโดยอัตโนมัติ มาวันนี้ ทาง Google ได้เปลี่ยนรูปแบบการสร้าง Form ใหม่ทั้งหมด จึงทำให้วิธีการสร้างแบบฟอร์มออนไลน์แบบเก่านั้นใช้ไม่ได้อีกแล้ว

    ดังนั้นเรามาดูวิธีการสร้าง Google Form แบบใหม่กันดีกว่าว่าเป็นอย่างไร ซึ่งต้องขอบอกว่า “มันง่ายมากๆ”


    1. คลิก Google Forms  เพื่อสร้างแบบฟอร์มลงทะเบียนออนไลน์

    Screen Shot 2559-07-23 at 3.34.20 PM
    Screen Shot 2559-07-23 at 3.38.37 PM

    2. ใส่รายละเอียด ข้อมูล รูปแบบ ในแบบลงทะเบียนตามที่ต้องการ
    (รูปแบบใหม่สามารถใส่ภาพที่เราออกแบบไว้ได้แล้วนะครับ โปสเตอร์ แบนเนอร์ ต่างๆ)

    Screen Shot 2559-07-23 at 3.43.21 PM

    + เราสามารถแบ่ง Form ของเราออกแบบเป็นหลายๆ section ได้นะครับ กรณีที่มีข้อมูลให้ต้องกรอกจำนวนมาก

    Screen Shot 2559-07-23 at 3.44.34 PM

    3. ติดตั้ง Add ons…

    Add ons ที่ผมจะติดตั้งนั้น มีด้วยกัน 2 อย่าง ดังนี้

    A. Form Confirmation Emails  คือ ระบบตอบรับการลงทะเบียนผ่านทางอีเมลอัตโนมัติ เมื่อผู้ใช้ลงทะเบียนผ่านฟอร์มเรียบร้อยแล้ว ระบบจะส่งเมลตามที่เราตั้งค่าไว้ไปให้ทางอีเมลที่ระบุไว้

    B. FormLimiter  คือ การปิดแบบฟอร์มลงทะเบียนอัตโนมัติ เมื่อมีผู้ใช้ลงทะเบียนครบตามจำนวนที่กำหนดไว้

    Screen Shot 2559-07-23 at 2.52.19 PM
    Screen Shot 2559-07-23 at 2.54.35 PM
    Screen Shot 2559-07-23 at 2.55.28 PM
    Screen Shot 2559-07-23 at 2.56.03 PM
    Screen Shot 2559-07-23 at 2.56.23 PM

    เมื่อติดตั้งเสร็จเรียบร้อยจะมี icons เพิ่มขึ้นมา ดังภาพ

    Screen Shot 2559-07-23 at 2.59.47 PM

    4. กำหนดรูปแบบการส่งเมลตอบรับอัตโนมัติ

    แบบฟอร์มตัวอย่างที่นำเสนอนั้น มีช่องให้ใส่ข้อมูล 3 อย่าง ดังภาพ

    (แนะนำให้ตั้งชื่อ Field ให้เป็นภาษาอังกฤษครับผม)

    Screen Shot 2559-07-23 at 4.20.18 PM

    เริ่มต้นตั้งค่า
    คลิกเลือก Form Confirmation Emails > Configure confirmations

    Screen Shot 2559-07-23 at 3.01.38 PM
    จากนั้นจะมีกล่องขึ้นมาให้มุมล่างขวา เพื่อให้กำหนดค่าต่างๆ

    Collage_Fotor

    คลิกเลือก Send Confirmations  กำหนดชื่อผู้ส่ง และรูปแบบการส่งเป็น E-mail <คลิก Continue>

    Email subject กำหนดชื่อหัวข้อของเมลที่ต้องการส่ง

    Email body เป็นการกำหนดรูปแบบของข้อมูลที่จะส่งไป ซึ่งจะอยู่ในรูปแบบของ HTML
    (สามารถดูตัวอย่างจาก Code ด้างล่าง) ถ้าใครมีรูปแบบอื่นก็สามารถทำได้ครับ ผมทำแบบง่ายๆ

    เมื่อกำหนดรูปแบบเสร็จเรียบร้อยแล้ว กดปุ่ม Save เป็นอันเสร็จสิ้น

    <html>
      <head>
      <meta charset="UTF-8">
      <title>TELL ME MORE PSU</title>
      </head>
     <body>
      <p>เรียนคุณ: ${"Name-Surname"}</p>
      <p> <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ตามที่ท่านได้สมัครเข้าร่วมอบรม หลักสูตร TOEIC (เตรียมความพร้อมการสอบ)<br>
      <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #FF0004"><strong>กลุ่มที่ 2  หลักสูตร TOEIC นักศึกษาระดับปริญญาตรี และระดับบัณฑิตศึกษา<br>
      </strong></span><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ณ ห้องอบรม 1 ชั้น 8  อาคารศูนย์ทรัพยากรการเรียนรู้ (LRC1)</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #FF0004"><strong>เริ่มเรียน : 13 กรกฎาคม - 4 สิงหาคม 2559 (เวลา 13.30 - 15.30 น.)</strong></span><br><br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0099FF">เพื่อเป็นการยืนยันสิทธิ์เข้ารับการอบรม<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;กรุณาตอบกลับผ่านทาง E-mail :</span> tmmpsu@gmail.com</a> ด้วยค่ะ<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ภายในวันที่ 11 กรกฎาคม 2559 หรือจนกว่าครบตามจำนวนที่กำหนด) รับจำนวน 25 คนเท่านั้น <br>
      <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: #FF0004">ขอสงวนสิทธิ์ให้กับผู้ที่ได้ยืนยันสิทธิ์ในการเข้าอบรมผ่านทางอีเมลก่อน</strong><br>
      <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #FF0004"><strong>ติดตามการประกาศรายชื่อผู้มีสิทธิ์เข้าร่วมอบรมโครงการอีกครั้งได้ที่: </strong></span><a href="http://clpd.psu.ac.th/" target="_blank">http://clpd.psu.ac.th/</a><br>
      <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;หากมีข้อสงสัยใดๆ สามารถสอบถามเพิ่มเติมได้ที่ หมายเลขโทรศัพท์ 0-7428-9207<br>
      <br>
      <br>
      ขอบคุณสำหรับการเข้าร่วมโครงการค่ะ<br>
      <br>
      ศูนย์ส่งเสริมและพัฒนาการเรียนรู้ มหาวิทยาลัยสงขลานครินทร์<br>
      โทรศัพท์ : 0-7428-9207<br>
      E-mail : <a href="mailto:clpdpsu@gmail.com" target="_blank">tmmpsu@gmail.com</a></p>
      </body>
      </html>

    ภาพตัวอย่างจากการส่งเมล

    Screen Shot 2559-07-23 at 3.26.02 PM

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

    “ก่อนการใช้งานจริงทุกครั้ง”


    5. วิธีการปิดแบบฟอร์มออนไลน์อัตโนมัติ เมื่อครบเต็มจำนวน

    เหมาะสำหรับการลงทะเบียนจำนวนไม่มาก (ไม่เกิน 100 คน) และป้องกันการลงทะเบียนเกินจำนวนที่กำหนดไว้

    ซึ่งจริงๆ แล้วระบบอีเมลของ Google นั้นระบุเงื่อนไขในการส่งเมลออกใน 1 วันไว้ไม่เกิน 100 ฉบับ ดังนั้น ถ้ามีผู้ใช้มาลงทะเบียนผ่านแบบฟอร์มจำนวนมาก ๆ ก็จะถูกปิดระบบการส่งเมลออกไปโดยทันที่เนื่องจากเกินจำนวนที่ได้กำหนดไว้นั่นเอง

    เริ่มต้นไปที่ หน้า Google Form ของเราที่ได้สร้างไว้ คลิกแท็บ RESPONSES จากนั้นคลิกปุ่ม สีเขียว ดังภาพ

    Screen Shot 2559-07-23 at 4.46.46 PM

    แล้วทำการตั้งชื่อ Form (แนะนำว่าให้ตั้งชื่อให้เหมือนกัน แล้ววงเล็บไว้ว่า “Responses” ก็ได้ครับ)

    จากนั้นกดปุ่ม CREATE

    Screen Shot 2559-07-23 at 4.47.18 PM

    จากนั้นกำหนดชื่อคอลัมภ์ ให้เรียงลำดับตรงกันกับ Google Form ที่เราได้สร้างไว้ตอนแรก

    เพื่อที่เวลาบันทึกข้อมูลจะได้ไม่สับสน (ให้ใช้ชื่อที่เป็นภาษาอังกฤษเหมือนกันมาตั้งครับ)

    Screen Shot 2559-07-23 at 3.17.54 PM

    ภาพ Google Form

    Screen Shot 2559-07-23 at 4.20.18 PM

    ขั้นตอนต่อไป ให้สร้าง Sheet2 ขึ้นมาตรงแท็บด้านล่างครับ

    ชื่อของ Sheet อันแรก ให้กำหนดเป็น Form responses นะครับ ตามภาพ

    จากนั้นให้ใส่ Code ลงไปในช่อง A1 ดังนี้

    =COUNTUNIQUE('Form responses'!$B$2:$B$100)

    เป็นการกำหนดให้นับจำนวนในคอลัมภ์ B ของSheet Form responses
    ที่เป็นคอลัมภ์ B เพราะเป็นข้อมูล “ชื่อ-นามสกุล” ดังนั้น ถ้าลงทะเบียนซ้ำมาหลายๆ ครั้ง ก็จะนับแค่ 1 ครับ

    Screen Shot 2559-07-23 at 3.17.05 PM

    ตัวอย่างการนับจำนวน กรณีที่มีการลงทะเบียนแล้ว

    Screen Shot 2559-07-23 at 3.24.13 PM

    Screen Shot 2559-07-23 at 3.24.32 PM

    จากนั้นมากำหนดค่าใน FormLimiter ต่อครับ ในหน้าแรกของ Google Form
    คลิกเลือก FormLimiter > Set limit

    Screen Shot 2559-07-23 at 2.59.47 PM
    Screen Shot 2559-07-23 at 3.13.08 PM

    คลิกเลือก destination spreadsheet cell value

    (หัวข้อนี้จะไม่ปรากฎให้เห็นถ้าหากว่ายังไม่ได้สร้าง Sheet2 ขึ้นมาทีครับ)

    Screen Shot 2559-07-23 at 3.13.23 PM

    ให้ใส่ Sheet2!A1 ลงในช่องดังภาพ ตามcode ที่เราได้ระบบไว้เบื้องต้น

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

    จากนั้นกดปุ่ม Save and enable เป็นอันเสร็จสิ้น

    Screen Shot 2559-07-23 at 3.14.25 PM

    หมายเหตุ อย่าลืมทดสอบก่อนใช้งานจริงนะครับ

    เมื่อสร้างไฟล์ได้สักครั้งแล้ว เราสามารถ Copy ของเก่ามาแก้ไขได้นะครับ

    Screen Shot 2559-07-23 at 5.20.44 PM

    เมื่อสร้างไฟล์ทุกครั้ง จะมีด้วยกัน 2 ไฟล์ ดังภาพ

    ดังนั้นเวลา Copy ไฟล์ เพื่อสร้างแบบฟอร์มใหม่ ให้เลือก Copy เฉพาะ Google Form (สีม่วง) เท่านั้น

    แล้ว Google Sheets จะถูกสร้างขึ้นมาเองครับ

    ปล. หากมีข้อผิดพลาดประการใด ต้องขออภัยไว้ด้วยครับ และสามารถแจ้งเพื่อแก้ไขได้นะครับ

  • การสร้างภาพ 360 องศาเข้า Google Street View ด้วย Android device

    จากคราวที่แล้วนำเสนอเรื่อง การรับชมภาพสถานที่และเส้นทางในมอ. ผ่าน Google Street View ไปแล้วนะคับ วันนี้เลยอยากนำเสนอวิธีการสร้างภาพ 360 องศา ด้วยมือถือแอนดรอยด์ แล้วอัพเข้า Google Street View ใน Google Maps กันแบบง่ายๆ นะคับ

    **ทำไม่ยาก แต่ต้องอาศัยความเนียนในการเล็กภาพเพื่อให้เชื่อมต่อกันสนิท

    00

    ขั้นตอนการทำ

    1. ติดตั้งแอพ Google Street View จาก Play Store

    01

    2. เมื่อติดตั้งเสร็จแล้วก็เปิดแอพขึ้นมา ไปที่เมนู Explore > คลิกปุ่มวงกลมสีเหลือง (ตามรูป)

    02

    3. คลิกเลือก Camera เพื่อจะถ่ายรูป 360 องศา

    03

    4. แอพจะเตือนให้เราเปิด Location หรือ GPS เพื่อให้ Google ทราบตำแหน่งพิกัดที่เราอยู่ ณ ปัจจุบันที่จะถ่ายภาพ

    04

    5. เริ่มทำการถ่ายภาพ โดยจะมีลูกศรสามเหลี่ยมชี้นำทิศทางในการปรับมุมกล้องในการถ่ายแต่ละจุด

    05

    6. เลื่อนให้จุดวงกลมสีเหลือง เข้ามาซ้อนทับในวงกลมสีขาว แบบพอดีตรงกลาง เพื่อให้ได้ภาพรอยต่อที่เชื่อมต่อกันในแต่ละภาพ

    07

    6. เมื่อวงกลมทั้งสองอันมาซ้อนทับกันให้รอนิ่งๆสักครู่ อย่าเพิ่งขยับมือถือ **ระบบทำการประมวลภาพเก็บไว้

    06

    7. ทำตามขั้นตอนที่ 6 ไปเรื่อยๆจนครบทุกมุม ***จะมีปรากฎลูกศรสามเหลี่ยมชี้นำทิศทางเหมือนในขั้นตอนที่ 5

    จากนั้นคลิกปุ่มวงกลมสีเขียวที่มีเครื่องหมายถูก เพื่อสิ้นสุดการถ่ายภาพ

    08

    8. เมื่อระบบประมวลภาพเสร็จแล้วจะถูกนำเก็บไว้ใน gallery ของเรา > คลิกที่รูป แล้ว คลิก SELECT

    09

    9. คลิกที่รูป หรือ Add a place เพื่อเริ่มการอัพเข้า Google Street View

    10

    10. เราสามารถทำเบลอภาพ ณ จุดที่เราไม่ต้องการให้เผยแพร่ อาทิเช่น ผู้คน(เรื่องสิทธิส่วนบุคคล) ภาพอุจาดตา ฯลฯ โดยการลากกรอบสี่เหลี่ยมคลอบคลุมบริเวณจุดนั้นๆ จากนั้นคลิกเครื่องหมายถูก เพื่อเสร็จสิ้นการเบลอภาพ

    11 12

    11. คลิก Publish to Google Maps เพื่อทำการเผยแพร่ภาพบน Google Maps ในส่วนของ Google Street View

    14

    12. คลิก Publish เพื่อยืนยันการอัพภาพเข้า Google Maps

    13

    13. เปิด Browser > เข้า http://google.com/maps เพื่อดูภาพที่ได้ทำการอัพสำเร็จ

     

    หวังว่าจะเป็นประโยชน์สำหรับใครหลายๆคนที่อยากลองทำภาพอัพเข้า Google Street View ดูบ้างนะคับ และที่สำคัญ…..

    ช่วยๆกันอัพภาพบริเวณ ม.อ. ของเราให้เต็มพื้นที่ใน Google Maps เลยนะคับ ^______^

    *** หากคิดว่ารูปถ่ายหรือรูปภาพที่ตัวเองทำยังสวยไม่พอ ก็อย่าเพิ่ง Publish เลยนะคับ เพื่อที่ว่าประชากรโลกหรือชาวโลกจะได้รับชมเฉพาะภาพสวยๆ ของมหาวิทยาลัยสงขลานครินทร์ของเรา ^^