You are on page 1of 19

บทที่ 13 การเขียนโปรแกรมเรี ยกระบุตาแหน่ ง (location) และแผนที่ (map) จากกูเกิล

(google)

สาระบทเรียน

1. ความรู้พื ้นฐานเกี่ยวกับ GPS Map


2. การขอ API Key สาหรับ Google Maps
3. แสดงแผนที่บนหน้ าจอ

รูปที่ 13-1 บริการแผนที่จากกูเกิล

จากรูปที่ 13-1 แสดงหนึง่ ในบริการของกูเกิลที่ได้ รับความนิยมเป็ นอย่างสูงในปั จจุบนั นัน่ คือ ระบบ
แผนที่ที่มีความสามารถที่เกี่ยวข้ องกับเส้ นทางหรื อการเดินทางซึ่งทางานร่วมกับระบบแผนที่ ในกรณีนี ้เรา
ต้ องการพัฒนา Android Apps ร่วมกับระบบแผนที่ของกูเกิลเรี ยกว่า Google Maps Android V2
Google Maps คือ บริ การแผนที่ของ กูเกิล ซึ่งให้ บริ การ Services ที่เกี่ยวข้ องกับแผนที่ทงหมด ั้
โดยในปั จจุบนั แผนที่ของกูเกิ ้ลนันมี
้ อยู่หลากหลายประเภทมาก อาทิเช่นที่เราใช้ บริ การแผนที่บนเว็บไซต์
หรื อ App บนสมาร์ ตโฟน (Smartphone) และทางช่องทางอื่นๆ อีกมากมายนับไม่ถ้วน โดย Services
เหล่านี ้เราสามารถเรี ยกใช้ งานได้ ฟรี ในกรณีที่ผ่านแอพฯทัว่ ๆ ไป แต่ถ้าในกรณีที่เราจะมีการเรี ยกใช้ งานใน
เว็บไซต์หรื อแอพฯที่พฒ ั นาขึ ้นเอง Google Maps ก็จะมี API ให้ ใช้ งานได้ เช่นเดียวกัน แต่เซอร์ วิส
(Services) ต่างๆของกูเกิลนันมี้ ข้อจากัดในการใช้ งาน แต่ถ้าหากต้ องการใช้ ในบริ มาณที่สงู ขึ ้น ก็จะต้ องซื ้อ
แพ็กเกจ (Package) ที่ทาง Google Maps มีมาให้ ซึง่ โดยปกติจะมีการจากัดจานวนครัง้ ที่เรี ยกใช้ งาน
316

ความรู้ พนื ้ ฐานเกี่ยวกับ GPS Map

ระบบกาหนดตาแหน่งบนโลกหรื อ GPS (Global Positioning System) เป็ นระบบระบุตาแหน่งบนพื ้น


โลกโดยคานวณจากค่าสัญญาณนาฬิกาที่สง่ มาจากดาวเทียมที่โคจรอยูร่ อบโลก ทาให้ ทราบตาแหน่งที่
แน่นอนจึงสามารถระบุตาแหน่งต่างๆ ของอุปกรณ์รับสัญญาณต่างๆ ได้ อย่างถูกต้ องดาวเทียม GPS เป็ น
ดาวเทียมที่ใช้ บนวงโคจรระดับกลาง หรื อ MEO (Medium Earth Orbit) ซึง่ โดยทัว่ ไปนันจะมี
้ วงโคจรที่
ระดับความสูงประมาณ 20,000 กิโลเมตรซึง่ การยืนยันตาแหน่งต่างๆ จะอาศัยค่าพิกดั จากดาวเทียมอย่าง
น้ อย 4 ดวง โดยปกติแล้ วดาวเทียมแต่ละดวงจะใช้ เวลาโคจรรอบโลกเป็ นเวลา 12 ชัว่ โมงต่อหนึง่ รอบ โดยมี
ความเร็วประมาณ 4 กิโลเมตร/วินาที(km/s)และการโคจรในแต่ละรอบนันจะแบ่
้ งออกเป็ น 6 ระนาบ ซึง่ แต่
ละระนาบจะมีดาวเทียมจานวน 4 ดวงโดยทามุมที่ 55 องศา (Degree) ดังนัน้ โดยรวมแล้ วทังระบบจะต้
้ อง
มีดาวเทียมอย่างน้ อยจานวน 24 ดวงทังนี
้ ้โดยทัว่ ไปแล้ วอุปกรณ์รับสัญญาณในปั จจุบนั จะผนวกเข้ ากับ
ระบบแผนที่เพื่อใช้ ระบุรายละเอียดของสถานที่ตา่ งๆ รวมไปถึงสามารถนามาประยุกต์ใช้ ในการนาทางได้
อีกด้ วย

ตัวอย่ างการสร้ างโปรเจ็กต์ เกี่ยวการระบุตาแหน่ ง

1. สร้ าง Project โดยมี Application name = GooglemapKuKps

ให้ ตงชื
ั ้ ่อเสร็จแล้ ว กด Next
317

กด Next
2. สร้ างแอกติวิตี ้ควรเลือกสร้ างเป็ น Google Maps Activity เพราะเราจะใช้ Google Maps

เลือกแล้ วกด Next หน้ าสุดท้ ายก็จะเป็ นการตังชื


้ ่อแอกติวิตี ้เสร็จแล้ วกด Finish ต่อมาจะเป็ นหน้ าแรกของ
โปรเจ็กต์
318

เมื่อเสร็จแล้ วก็จะแสดงตามภาพดังนี ้

ในภาพจะมีคา่ ของ YOUR_KEY_HERE ซึง่ เป็ น URL ที่ต้อง copy ไปใส่ใน Browser เพื่อที่จะไป
สร้ าง Key—API
319

การขอ API Key สาหรับ Google Maps

การขอ API Key นันอาจจะมี


้ ขนตอนยุ
ั้ ง่ ยากเล็กน้ อย แต่ก็ต้องทาเพราะว่า API Key เป็ นสิ่งที่ทางกูเกิล
ใช้ ระบุวา่ แอพฯของนักพัฒนาคนไหนมีการเรี ยกใช้ งาน Google Maps บ้ าง ถึงแม้ วา่ Google Maps จะให้
ใช้ งานฟรี สาหรับฟี เจอร์ เบื ้องต้ น (ฟี เจอร์ พิเศษจะต้ องเสียเงิน)
โดย API Key นันจะสั
้ มพันธ์กบั ชุดการเข้ ารหัสแบบ SHA1 ใน Keystore ที่ใช้ Build แอพฯตัวนันๆและ ้
สัมพันธ์กบั แพคเกจ (Package) ของแอพฯที่เรี ยกใช้ งาน ดังนัน้ API Key นี ้จะผูกกับแอพฯตัวเดียวเท่านัน้
ไม่สามารถนาไปใช้ กบั แอพฯตัวอื่นได้ (ทาหลายแอพฯก็ต้องขอทุกตัว)
ต่อมาให้ เข้ าไปที่ https://console.developers.google.com/ และสร้ างโปรเจ็กต์(หากยังไม่มี) ถ้ ายังไม่
มีบญ ั ชีของกูเกิลให้ สมัครและ Login เสียก่อน จากนันตั ้ งชื
้ ่อโปรเจ็กต์ตามที่ต้องการ (องค์กรจะเลือกหรื อไม่
เลือกก็ได้ )แล้ วให้ พิมพ์ชื่อโปรเจ็กต์ตามภาพ

ต่อมาจะแสดงส่วนหน้ าหลักของ Google APIs


320

กด “เปิ ดใช้ ” หลังจากนันจะมี


้ ปมด้ ุ่ านขวาให้ สร้ าง “ข้ อมูลรับรอง” กดสร้ างเพื่อให้ ได้ ข้อมูลคีย์ จากนันให้

คัดลอก (copy) คีย์ API นี ้ไว้ แล้ วกดเสร็จสิ ้น

แล้ วจะได้ หน้ าจอภาพที่ขึ ้นมาว่า ยินดีย้อนรับสูไ่ ลบรารี่ ใหม่ พร้ อมกับให้ ดทู ี่แผนที่ แล้ วให้ สงั เกตุคาว่า
Google Maps Android API
321

เมื่อกดแล้ วก็จะสูห่ น้ า Google Maps Android API พร้ อมกันแสดงข้ อมูลรายละเอียดต่างๆ จากนันให้

เลือกคาว่า “จัดการ”

จากหน้ าจอที่ได้ จะสังเกตุได้ วา่ มีการเรี ยกเปิ ดใช้ สว่ นที่เป็ น googleMap Android API เรี ยบร้ อยแล้ ว
322

ลาดับต่อมา เลือกปุ่ มคาว่า “ข้ อมูลรับรอง” แล้ วเลือกไปที่ สร้ างข้ อมูลรับรอง พร้ อมเลื่อนคาว่า คีย์ API

ถัดไปจะเป็ นส่วนที่บอกว่าสร้ างคีย์ API แล้ ว ใช้ คีย์นี ้ในแอปพลิเคชันของคุณโดยการส่งผ่านด้ วย


พารามิเตอร์ key=API_KEY โดยในที่นี ้ key เป็ น
IzaSyCDAN2uOhN2NzH9dHRXX8KamhNBYLqay9o (ทุก key จะไม่ซ ้ากัน) ทาการคัดลอกแล้ วกด
ปิ ด
323

ก็จะพบได้ วา่ มีการสร้ าง API แล้ ว แต่ยงั ไม่สามารถเรี ยกใช้ key ในแอนดรอยด์ได้ ซึง่ ต้ องเลือกที่ส่วนแก้ ไข
ตามภาพ

ก็จะพบเข้ าสูห่ น้ าแก้ ไข โดยคีย์ API นี ้สามารถใช้ ได้ ในโครงการนี ้และกับ API อื่นๆ ที่สนับสนุน หาก
ต้ องการใช้ คีย์นี ้ในแอพฯของคุณ ให้ สง่ ผ่านคีย์นี ้ด้ วยพารามิเตอร์ key=API_KEY
324

โดยส่วนการจากัดคีย์จะให้ คณ ุ ระบุเว็บไซต์ ที่อยู่ IP หรื อแอพฯที่จะสามารถใช้ คีย์นี ้ได้ ความหมายว่าการ


เรี ยกใช้ API Key นันจะสั
้ มพันธ์กบั ชุดรหัส SHA1 ใน Keystore ในที่นี ้ให้ เลือก ส่วนที่เป็ นแอพฯแอนดรอยด์
พร้ อมกับเลือกคาว่า + เพิ่ม ชื่อแพ็กเกจและลายมือ

ชุดรหัส SHA1 จาก Keystore

ชุดรหัส SHA1 จาก Keystore ที่ใช้ เพื่อขอ API Key นันจะมี


้ อยูส่ องแบบด้ วยกันคือ SHA1 ของ
Debug Keystore และ Signed Keystore โดยมีเงื่อนไขอยูว่ า่
• ใช้ SHA1 จาก Debug Keystore ในขณะที่กาลังพัฒนาแอพฯอยูแ่ ละยังไม่ได้ สง่ แอพฯ ขึ ้น Google
Play Store หรื อ 3rd Party App Store แบบสาธารณะ (Public)
325

• ใช้ SHA1 จาก Signed Keystore เมื่อพัฒนาแอพฯเสร็จแล้ ว และพร้ อมจะส่งแอพฯขึ ้น Google


Play Store หรื อ 3rd Party App Store แบบสาธารณะ (Public)
เนื่องจาก เพราะไม่ร้ ูวา่ API Key ต้ องใช้ คนละตัวกันเวลาทดสอบแอพฯกับตอนส่งแอพฯขึ ้น Google
Play Store หรื อ 3rd Party App Store แบบสาธารณะ (Public)

ตาแหน่ งการเก็บ Debug Keystore กับ Signed Keystore

Debug Keystore จะอยูท่ ี่


OS X หรื อ Linux
~/.android/debug.keystore
Windows
C:\Users\<your_user_name>\.android\debug.keystore

ส่วน Signed Keystore ไม่กาหนดที่อยู่ตายตัว เพราะมันคือไฟล์ Keystore ที่จะสร้ างเพื่อใช้ Export


แอปพลิเคชันเป็ น APK ได้

การอ่ านชุดรหัส SHA1 จาก Keystore

จะต้ องทาผ่าน Terminal (OS X หรื อ Linux) หรื อ Command Prompt (Windows) ดังนี ้

keytool -list -v -keystore <keystore_file_path> -alias <alias_name> -storepass <alias_pass> -


keypass <keystore_pass>

• keystore_file_path คือที่อยูข่ องไฟล์ Keystore ที่ต้องการอ่าน SHA1


• alias_name Alias Name ของ Keystore นันๆ ้
• alias_pass รหัสผ่านสาหรับ Alias Name
• keystore_pass รหัสผ่านสาหรับ Keystore
ถ้ าเป็ น Debug Keystore ทาง กูเกิล ก็ได้ กาหนดตายตัวไว้ ตงแต่
ั ้ แรกแล้ ว
• Alias Name คือ androiddebugkey
• Alias Password คือ android
• Keystore Password คือ android
ยกตัวอย่างเช่น ต้ องการ SHA1 ของ Debug Keystore ก็จะต้ องใช้ คาสัง่ ดังนี ้
326

keytool -list -v -keystore ~/.android/ -alias androiddebugkey -storepass android -keypass


android

โดยให้ เข้ าไปที่ start พร้ อมค้ นหาคาว่า cmd

และพิมพ์คาส่งตามนี ้
cd c:\ กด enter ลงมา
c:\>cd C:\Program Files\Java\jre7\bin กด enter ลงมา
แล้ วพร้ อมใส่ >keytool -list -v -keystore C:\Users\[ชื่อของเครื่ อง]\.android/debug.keystore -alias
androiddebugkey -storepass android -keypass android
327

เช่น >keytool -list -v -keystore C:\Users\Pongploy2017\.android/debug.keystore -alias


androiddebugkey -storepass android -keypass android
ตามภาพ

ก็จะได้ เลข SHAI ที่ต้องการ จะเห็นตรงแถว SHA1 มีชดุ รหัสแสดงอยู่ 20 ชุดด้ วยกัน ให้ เอา SHA1 ที่ได้ จาก
ตรงนี ้นี่แหละไปขอ API Key จาก Google Developer Console สามารถ copy เอาไปในเว็บ google map
api ที่ได้ ตงไว้
ั้
328

และเมื่อได้ เลข SHA-1 ให้ วาง (paste) ค่าลายนิ ้วมือสาหรับใบรับรอง SHA-1 พร้ อมใส่ชื่อแพ็กเกจตามภาพ

แล้ วกดบันทึก คราวนี ้ก็จะสามารถใช้ Google Map API เต็มรูปแบบแล้ ว สามารถสังเกตุได้ ตามภาพ
329

และให้ ใส่คาว่า AIzaSyCDAN2uOhN2NzH9dHRXX8KamhNBYLqay9o ที่ได้ มาแทน


YOUR_KEY_HERE พร้ อมรัน
เมื่อสร้ างแล้ วแอนดรอยด์สตูดโิ อจะทาการสร้ างไฟล์ชื่อว่า google_map_api.xml ให้ เราอัตโนมัติ ให้ นา
คีย์ API ที่เรา copy ไว้ ในขันตอนก่
้ อนหน้ านี ้มาใส่ในไฟล์นี ้

ถ้ าหากเราเข้ าไปดูที่ไฟล์ build.gradle (Module: app) จะเห็นได้ วา่ แอนดรอยด์สตูดิโอจะเพิ่ม


dependency ของ google play service ที่มี Google Map API ใส่ไว้ ให้ เราเรี ยบร้ อยโดยไม่ต้องเพิ่มเอง
330

ตัวอย่ างการเขียนโปรแกรมโดยใช้ งาน Google Maps API

1. การแสดงแผนที่บนหน้ าจอ (Hello Map)

เปิ ดไฟล์ MapsActivity.java และ activity_maps.xml จะเห็นว่าแอนดรอยด์สตูดิโอได้ ใส่คาสัง่ สาหรับแสดง


แผนที่ไว้ ให้ เราเรี ยบร้ อยแล้ วตามภาพ

อธิบายเพิ่มเติม
331

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()


.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

คือการไปค้ นหาแฟล็กเมนต์จาก xml เหมือนกับการ findViewById() นัน่ เอง เมื่อได้ mapFragment


แล้ วจึงสัง่ getMapAsync() ซึง่ จะทาให้ เมธอด onMapReady() ด้ านล่างนันท
้ างาน

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;

// Add a marker in Sydney and move the camera


LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

ซึง่ คลาส MapsActivity นันได้


้ อิมพลีเมนต์ (implements) อินเตอร์ เฟสชื่อว่า OnMapReadyCallback
ซึง่ ต้ อง Override เมธอดชื่อว่า onMapReady() นัน่ เอง โดยในเมธอดนี ้จะทาการปั กหมุด (Marker) ที่
Latitude -34 Longitude 151 และใส่ title ชื่อ “Marker in Sydney”
และสุดท้ ายสัง่ ให้ แผนที่ขยับมุมมองไปที่ตาแหน่ง Latitude, Longitude เดียวกันโดยใช้ คาสัง่
“mMap.moveCamera()”
ก็จะแสดงหน้ าแผนที่ตามภาพด้ านล่าง *แนะนาให้ ใช้ เครื่ องจริงในการรันเพราะต้ องใช้ ฟีเจอร์ หลายๆอย่างที่
ตัว emulator นันไม่ ้ มี หรื อมี (Genymotion) ก็ไม่สมมบูรณ์เท่าเครื่ องจริง
332
333

แบบฝึ กหัดท้ ายบท

1. จงให้ ความหมายของคาว่า google map

2. จงให้ ความหมายคาสัง่ ที่ให้ สว่ นนี ้ พร้ อมกับอธิบายความหมาย

keytool -list -v -keystore <keystore_file_path> -alias <alias_name> -


storepass <alias_pass> -keypass <keystore_pass>

3. ให้ นสิ ิตศึกเอกสารคูม่ ือพร้ อมเขียนคาสัง่ พร้ อมกับทาตามเอกสารเพื่อให้ ได้ ผลลัพธ์ ที่ได้ เป็ นดังภาพ
ต่อไปนี ้ พร้ อมกับแสดงสถานที่ของมหาลัยของเรา

You might also like