ตัวอย่าง และ โค้ด ต่อไปนี้
เป็นการใช้งาน การค้นหาสถานที่ ใน google map แบบแสดง
ตัวเลือกการค้นหา ลักษณะ autocomplete ใช้คุณสมบัติจาก
google place ไลบรารี่
ปรับปรุงการเรียกใช้งาน google map api เล็กน้อย จากการใช้งานปกติ
โดยมีการ เรียกใช้ place ไลบรารี่
<script type="text/javascript"> $(function(){ // โหลด สคริป google map api เมื่อเว็บโหลดเรียบร้อยแล้ว // ค่าตัวแปร ที่ส่งไปในไฟล์ google map api // v=3.2&sensor=false&language=th&callback=initialize // v เวอร์ชัน่ 3.2 // sensor กำหนดให้สามารถแสดงตำแหน่งทำเปิดแผนที่อยู่ได้ เหมาะสำหรับมือถือ ปกติใช้ false // language ภาษา th ,en เป็นต้น // callback ให้เรียกใช้ฟังก์ชันแสดง แผนที่ initialize $("<script/>", { "type": "text/javascript", src: "//maps.google.com/maps/api/js?v=3.2&sensor=false&language=th&callback=initialize&libraries=places" }).appendTo("body"); }); </script>
ตัวอย่าง
โค้ดทั้งหมดและคำอธิบาย
<!doctype html> <html> <head> <title></title> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> </head> <body> <style type="text/css"> /* css สำหรับ div คลุม google map อีกที */ #contain_map{ position:relative; width:650px; height:400px; margin:auto; } /* css กำหนดความกว้าง ความสูงของแผนที่ */ #map_canvas { top:0px; width:100%; height:400px; margin:auto; } /*css กำหนดรูปแบบ ของ input สำหรับพิมพ์ค้นหา effect */ .controls_tools { margin-top: 16px; 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); } /*css กำหนดรูปแบบ ของ input สำหรับพิมพ์ค้นหา*/ #pac-input { background-color: #fff; padding: 0 11px 0 13px; width: 60%; font-family: Roboto; font-size: 15px; font-weight: 300; text-overflow: ellipsis; } /*css กำหนดรูปแบบ ของ input สำหรับพิมพ์ค้นหา ขณะ focus*/ #pac-input:focus { width: 60%; border-color: #4d90fe; margin-left: -1px; padding-left: 14px; /* Regular padding-left + 1. */ } </style> <br /> <br /> </p> <div id="contain_map"> <input id="pac-input" class="controls_tools" type="text"placeholder="Enter a location"> <div id="map_canvas"> </div> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> var geocoder; // กำหนดตัวแปรสำหรับ เก็บ Geocoder Object ใช้แปลงชื่อสถานที่เป็นพิกัด var map; // กำหนดตัวแปร map ไว้ด้านนอกฟังก์ชัน เพื่อให้สามารถเรียกใช้งาน จากส่วนอื่นได้ var my_Marker; // กำหนดตัวแปรสำหรับเก็บตัว marker var GGM; // กำหนดตัวแปร GGM ไว้เก็บ google.maps Object จะได้เรียกใช้งานได้ง่ายขึ้น var inputSearch; // กำหนดตัวแปร สำหรับ อ้างอิง input สำหรับพิมพ์ค้นหา var infowindow;// กำหนดตัวแปร สำหรับใช้แสดง popup สถานที่ ที่ค้นหาเจอ var autocomplete; // กำหนดตัวแปร สำหรับเก็บค่า การใช้งาน places Autocomplete function initialize() { // ฟังก์ชันแสดงแผนที่ GGM=new Object(google.maps); // เก็บตัวแปร google.maps Object ไว้ในตัวแปร GGM geocoder = new GGM.Geocoder(); // เก็บตัวแปร google.maps.Geocoder Object // กำหนดจุดเริ่มต้นของแผนที่ var my_Latlng = new GGM.LatLng(13.761728449950002,100.6527900695800); var my_mapTypeId=GGM.MapTypeId.ROADMAP; // กำหนดรูปแบบแผนที่ที่แสดง // กำหนด DOM object ที่จะเอาแผนที่ไปแสดง ที่นี้คือ div id=map_canvas var my_DivObj=$("#map_canvas")[0]; // กำหนด Option ของแผนที่ var myOptions = { zoom: 13, // กำหนดขนาดการ zoom center: my_Latlng , // กำหนดจุดกึ่งกลาง จากตัวแปร my_Latlng mapTypeId:my_mapTypeId // กำหนดรูปแบบแผนที่ จากตัวแปร my_mapTypeId }; map = new GGM.Map(my_DivObj,myOptions); // สร้างแผนที่และเก็บตัวแปรไว้ในชื่อ map inputSearch = $("#pac-input")[0]; // เก็บตัวแปร dom object โดยใช้ jQuery // จัดตำแหน่ง input สำหรับการค้นหา ด้วย คำสั่งของ google map map.controls[GGM.ControlPosition.TOP_LEFT].push(inputSearch); // เรียกใช้งาน Autocomplete โดยส่งค่าจากข้อมูล input ชื่อ inputSearch autocomplete = new GGM.places.Autocomplete(inputSearch); autocomplete.bindTo('bounds', map); infowindow = new GGM.InfoWindow();// เก็บ InfoWindow object ไว้ในตัวแปร infowindow // เก็บ Marker object พร้อมกำหนดรูปแบบ ไว้ในตัวแปร my_Marker my_Marker = new GGM.Marker({ map: map, anchorPoint: new GGM.Point(0, -29) }); // เมื่อแผนที่มีการเปลี่ยนสถานที่ จากการค้นหา GGM.event.addListener(autocomplete, 'place_changed', function() { infowindow.close();// เปิด ข้อมูลตัวปักหมุด (infowindow) my_Marker.setVisible(false);// ซ่อนตัวปักหมุด (marker) var place = autocomplete.getPlace();// เก็บค่าสถานที่จากการใช้งาน autocomplete ไว้ในตัวแปร place if (!place.geometry) {// ถ้าไม่มีข้อมูลสถานที่ return; } // ถ้ามีข้อมูลสถานที่ และรูปแบบการแสดง ให้แสดงในแผนที่ if (place.geometry.viewport) { map.fitBounds(place.geometry.viewport); } else { // ให้แสดงแบบกำหนดเอง map.setCenter(place.geometry.location); map.setZoom(17); // แผนที่ขยายที่ขนาด 17 ถือว่าเหมาะสม } my_Marker.setIcon(/** // กำหนดรูปแบบของ icons การแสดงสถานที่ */({ url: place.icon, size: new GGM.Size(71, 71), origin: new GGM.Point(0, 0), anchor: new GGM.Point(17, 34), scaledSize: new GGM.Size(35, 35) })); // ปักหมุด (marker) ตำแหน่ง สถานที่ที่เลือก my_Marker.setPosition(place.geometry.location); my_Marker.setVisible(true);// แสดงตัวปักหมุด จากการซ่อนในการทำงานก่อนหน้า // สรัางตัวแปร สำหรับเก็บชื่อสถานที่ จากการรวม ค่าจาก array ข้อมูล 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(' '); } // แสดงข้อมูลในตัวปักหมุด (infowindow) infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address); infowindow.open(map, my_Marker);// แสดงตัวปักหมุด (infowindow) }); } $(function(){ // โหลด สคริป google map api เมื่อเว็บโหลดเรียบร้อยแล้ว // ค่าตัวแปร ที่ส่งไปในไฟล์ google map api // v=3.2&sensor=false&language=th&callback=initialize // v เวอร์ชัน่ 3.2 // sensor กำหนดให้สามารถแสดงตำแหน่งทำเปิดแผนที่อยู่ได้ เหมาะสำหรับมือถือ ปกติใช้ false // language ภาษา th ,en เป็นต้น // callback ให้เรียกใช้ฟังก์ชันแสดง แผนที่ initialize $("<script/>", { "type": "text/javascript", src: "//maps.google.com/maps/api/js?v=3.2&sensor=false&language=th&callback=initialize&libraries=places" }).appendTo("body"); }); </script> </body> </html>