Google Maps SDK — คือชุดเครื่องมือจาก Google สำหรับผสานแผนที่แบบโต้ตอบ การระบุพิกัดภูมิศาสตร์ การนำทาง และการค้นหาสถานที่เข้ากับแอปมือถือและเว็บ SDK ประกอบด้วย Maps SDK สำหรับ Android และ iOS, Places API สำหรับการทำงานกับข้อมูลภูมิศาสตร์ และ Directions API สำหรับการสร้างเส้นทาง บริการแผนที่ Google ประมวลผลมากกว่า 1 แสนล้านคำขอต่อวัน ทำให้ Maps SDK เป็นหนึ่งในโซลูชันแผนที่ที่มีประสิทธิภาพสูงสุด ตามข้อมูลของGoogle Maps Platform Documentation, 2025 SDK ถูกใช้ใน 60% ของแอปมือถือทั้งหมดที่มีแผนที่
สาระสำคัญ
Google Maps SDK — คือแพลตฟอร์มแบบครบวงจรสำหรับนักพัฒนา ที่มีเครื่องมือสำหรับการทำงานกับข้อมูลภูมิศาสตร์ในแอป แพลตฟอร์มประกอบด้วย API หลายรายการ: Maps SDK (การแสดงแผนที่), Routes API (เส้นทาง), Places API (การค้นหาสถานที่และข้อมูลภูมิศาสตร์) และ Geocoding API (การแปลงที่อยู่เป็นพิกัด) แต่ละ SDK จะถูกผสานรวมแยกกันและมีรูปแบบการเรียกเก็บเงินของตัวเอง
ต่างจาก Apple MapKit Google Maps SDK ให้ชุดข้อมูลที่กว้างขวางกว่า: ข้อมูลสถานที่ 250 ล้านแห่ง ข้อมูลการจราจรแบบเรียลไทม์ พาโนรามา Street View และ Indoor Maps สำหรับอาคารภายใน ตามข้อมูลของStatista (2025) Google Maps Platform ครองตลาด SDK แผนที่ในแอปมือถือถึง 75% ข้อได้เปรียบสำคัญ — คีย์ API เดียวสำหรับทุกบริการของแผนที่ Google และการผสานรวมข้ามแพลตฟอร์ม (Android, iOS, เว็บ)
คีย์ API — องค์ประกอบที่จำเป็นสำหรับการทำงานกับ Google Maps SDK คีย์จะถูกสร้างใน Google Cloud Console และผูกกับโปรเจกต์เฉพาะ สำหรับ Android ต้องระบุ SHA-1 ของใบรับรองแอปเพิ่มเติม สำหรับ iOS — Bundle Identifier Google แนะนำให้จำกัดการใช้คีย์ API ด้วยที่อยู่ IP, HTTP-referrer หรือแพ็กเกจแอป เพื่อป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต
Maps SDK สำหรับ Android — คือไลบรารีที่แสดงแผนที่ Google แบบโต้ตอบภายในแอป Android ผ่าน MapView หรือ SupportMapFragment SDK รองรับ: สไตล์แผนที่แบบกำหนดเอง มาร์กเกอร์พร้อมหน้าต่างข้อมูล โพลีกอนและโพลีไลน์ เลเยอร์การจราจรและการขนส่ง รวมถึงเหตุการณ์การสัมผัสและท่าทาง (ซูม หมุน เอียง) แผนที่ใช้ OpenGL สำหรับการเรนเดอร์ ให้ 60 FPS บนอุปกรณ์สมัยใหม่
การผสานรวมเริ่มต้นด้วยการเพิ่ม dependency ใน build.gradle และตั้งค่าคีย์ API ผ่าน AndroidManifest.xml Google Maps SDK สำหรับ Android ต้องมี Google Play Services บนอุปกรณ์ หากไม่มี Google Play Services (เช่น บนอุปกรณ์ Huawei ที่ไม่มีบริการของ Google) แผนที่จะไม่แสดง ในกรณีเช่นนี้ Google แนะนำให้ใช้โซลูชันทางเลือกหรือ WebView พร้อม JavaScript Maps API
// AndroidManifest.xml — เมตาดาต้าของคีย์ API
// <meta-data android:name="com.google.android.geo.API_KEY"
// android:value="YOUR_API_KEY"/>
// แฟรกเมนต์แผนที่ใน Activity
class MapActivity : AppCompatActivity(),
OnMapReadyCallback {
private lateinit var map: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
val sydney = LatLng(-33.8688, 151.2093)
map.addMarker(MarkerOptions().position(sydney)
.title("Sydney"))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(sydney, 12f))
}
}Google Maps SDK บน Android รองรับ Indoor Maps — การแสดงแผนผังอาคาร (สนามบิน ศูนย์การค้า) หากต้องการเปิดใช้งาน เพียงตั้งค่าmap.isIndoorEnabled = true เลเยอร์การจราจร (Traffic Layer) แสดงความหนาแน่นของถนนแบบเรียลไทม์ — ข้อมูลจะอัปเดตทุก 2-5 นาที เลเยอร์การขนส่ง (Transit Layer) แสดงเส้นทางขนส่งสาธารณะในเมืองที่รองรับ
Maps SDK สำหรับ iOS — ให้ความสามารถเดียวกันกับเวอร์ชัน Android แต่ปรับให้เข้ากับแพลตฟอร์ม Apple การผสานรวมทำผ่าน Swift Package Manager หรือ CocoaPods Maps SDK สำหรับ iOS ใช้เซิร์ฟเวอร์ของ Google ในการเรนเดอร์แผนที่ แต่สามารถทำงานร่วมกับ Apple MapKit สำหรับการนำทางแบบเนทีฟ SDK รองรับ iOS 15 ขึ้นไป รวมถึง SwiftUI ผ่าน UIViewRepresentable
จุดเด่นของเวอร์ชัน iOS — การตั้งค่า Info.plist ที่จำเป็น โดยต้องระบุคีย์ API และเพิ่ม URL scheme สำหรับแผนที่ Google ต่างจาก Android iOS SDK ไม่ต้องใช้ Google Play Services แต่ต้องติดตั้งแอปแผนที่ Google สำหรับบางฟังก์ชัน (เช่น การเปิดแผนที่ในการนำทาง) สำหรับโปรเจกต์ข้ามแพลตฟอร์ม Google แนะนำให้ใช้คีย์ API เดียวต่อโปรเจกต์ โดยเปิดใช้งานสำหรับทั้งสองแพลตฟอร์ม
import GoogleMaps
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(
withLatitude: 55.7558,
longitude: 37.6173,
zoom: 10
)
let mapView = GMSMapView.map(
withFrame: view.frame,
camera: camera
)
self.view = mapView
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(
latitude: 55.7558,
longitude: 37.6173
)
marker.title = "Moscow"
marker.map = mapView
}
}บน iOS Google Maps SDK รองรับสไตล์แบบกำหนดเองผ่านไฟล์ JSON ในรูปแบบ Google Maps Styling สไตล์ช่วยให้เปลี่ยนสีของถนน น้ำ สวนสาธารณะ และอาคารให้สอดคล้องกับการออกแบบแอป นอกจากนี้ยังรองรับ Heatmap Layer สำหรับการแสดงความหนาแน่นของข้อมูล KML และ GeoJSON สำหรับการนำเข้าข้อมูลภูมิศาสตร์จากแหล่งภายนอก
Places API — คือบริการของ Google Maps Platform สำหรับการรับข้อมูลเกี่ยวกับสถานที่ทางภูมิศาสตร์: ที่อยู่ พิกัด คะแนน เวลาเปิดทำการ รูปภาพ และรีวิว Places API ทำงานในสองโหมด: Place Search (การค้นหาสถานที่ตามข้อความหรือรัศมี) และ Place Details (การรับข้อมูลโดยละเอียดเกี่ยวกับสถานที่เฉพาะตาม Place ID) SDK พร้อมใช้งานสำหรับ Android, iOS และในรูปแบบ REST API
Places SDK สำหรับ Android และ iOS ช่วยให้ฝังการเติมที่อยู่ให้อัตโนมัติ (Place Autocomplete) ลงในช่องข้อความของแอปได้โดยตรง นี่คือฟังก์ชันสำคัญสำหรับแอปจัดส่ง แท็กซี่ และโลจิสติกส์ — ผู้ใช้เริ่มพิมพ์ที่อยู่ และ SDK เสนอตัวเลือกจากฐานข้อมูลแผนที่ Google Place Autocomplete ลดจำนวนข้อผิดพลาดในการกรอกที่อยู่ได้ 80% เมื่อเทียบกับการกรอกด้วยตนเอง การเรียกเก็บเงิน Places API: $2.83 ต่อ 1,000 คำขอ Place Details, Place Search — $4.71 ต่อ 1,000
// การค้นหาสถานที่ตามข้อความบน Android
val placesClient = Places.createClient(context)
val request = FindCurrentPlaceRequest.builder(
listOf(Place.Field.NAME, Place.Field.ADDRESS)
).build()
placesClient.findCurrentPlace(request)
.addOnSuccessListener { response ->
for (placeLikelihood in response.placeLikelihoods) {
Log.d("สถานที่", "${placeLikelihood.place.name} - ${placeLikelihood.likelihood}")
}
}Geocoding API — การระบุพิกัดภูมิศาสตร์แบบย้อนกลับ (พิกัด → ที่อยู่) และแบบตรง (ที่อยู่ → พิกัด) ใช้สำหรับแปลงที่อยู่ที่ผู้ใช้กรอกเป็นพิกัดเพื่อแสดงบนแผนที่ Geocoding API มีการคิดค่าใช้จ่ายแยกต่างหาก: $4.71 ต่อ 1,000 คำขอ Google ให้คำขอฟรี 200 ครั้งต่อวันต่อบัญชีสำหรับการทดสอบ
Directions API — บริการสำหรับคำนวณเส้นทางระหว่างจุดสองจุดขึ้นไป โดยคำนึงถึงรูปแบบการเดินทาง (รถยนต์ เดินเท้า จักรยาน ขนส่งสาธารณะ) API ส่งคืนเส้นทางทางเลือกหลายเส้นทาง พร้อมระบุระยะทาง เวลาเดินทาง คำแนะนำทีละขั้น และโพลีไลน์สำหรับวาดเส้นทางบนแผนที่ Directions API พร้อมใช้งานเป็น REST API และผ่าน SDK ของไคลเอนต์
ฟังก์ชันเพิ่มเติม — Routes API (API ใหม่ที่ Google แนะนำตั้งแต่ปี 2024) Routes API ให้การกำหนดเส้นทางที่ดียิ่งขึ้น โดยคำนึงถึงการจราจรแบบเรียลไทม์ รอยเท้าทางนิเวศ (eco-friendly routing) และการวิเคราะห์เวลาถึงจุดหมายแบบคาดการณ์ ตามข้อมูลของ Google Routes API คำนวณเวลาเดินทางในสภาพเมืองแม่นยำขึ้น 20% เมื่อเทียบกับ Directions API แบบดั้งเดิม การเรียกเก็บเงิน Routes API: $5.00 ต่อ 1,000 คำขอ
// คำขอเส้นทางผ่าน Routes API
val client = OkHttpClient()
val requestBody = """
{
"origin": {"location": {"latLng": {"latitude": 55.75, "longitude": 37.61}}},
"destination": {"location": {"latLng": {"latitude": 55.79, "longitude": 37.79}}},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE"
}
""".trimIndent()
val request = Request.Builder()
.url("https://routes.googleapis.com/directions/v2:computeRoutes")
.header("X-Goog-Api-Key", apiKey)
.header("Content-Type", "application/json")
.post(requestBody.toRequestBody())
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
Log.d("เส้นทาง", response.body?.string() ?: "")
}
})Directions API รองรับจุดกลาง (waypoints) สูงสุด 25 จุดต่อเส้นทาง จุดกลางสามารถระบุเป็นพิกัดหรือ Place ID หากต้องการปรับลำดับจุดให้เหมาะสม (traveling salesman problem) ให้ใช้พารามิเตอร์ optimize:true การเรียกเก็บเงิน: Directions API — $4.71 ต่อ 1,000 คำขอ (สูงสุด 10 จุด) แต่ละจุดเพิ่มเติมคิดเพิ่ม 50% ของค่าใช้จ่ายคำขอ
Google Maps SDK มีความสามารถในการปรับแต่งที่หลากหลาย: การเปลี่ยนชุดสีของแผนที่ผ่านสไตล์ JSON การเพิ่มมาร์กเกอร์แบบกำหนดเอง (รวมถึงแบบเคลื่อนไหว) หน้าต่างข้อมูล (InfoWindow) ที่มีเนื้อหาอิสระ และการวางเลเยอร์กราฟิก (GroundOverlay, Circle, Polygon) การปรับแต่งช่วยให้ปรับแผนที่ให้เข้ากับแบรนด์ของแอปและปรับปรุงประสบการณ์ผู้ใช้
การจัดสไตล์แผนที่ ทำผ่าน Google Maps Styling Wizard หรือไฟล์ JSON ในรูปแบบ Map Style คุณสามารถเปลี่ยนสีของถนน (featureType: road) น้ำ (water) สวนสาธารณะ (poi.park) อาคาร (building) และองค์ประกอบอื่น ๆ สำหรับแผนที่ในธีมมืดของแอป ให้ใช้สไตล์กลางคืนที่มีพื้นหลังสีเข้มและสีที่ลดความสดใส แผนที่ Google รองรับกฎสไตล์สูงสุด 100 กฎในไฟล์ JSON ไฟล์เดียว
| องค์ประกอบการปรับแต่ง | เมธอด/คลาส | คำอธิบาย |
|---|---|---|
| มาร์กเกอร์ | MarkerOptions.icon(BitmapDescriptor) | ไอคอนมาร์กเกอร์แบบกำหนดเองจากทรัพยากรหรือ URL |
| โพลีไลน์ | PolylineOptions.color(width) | เส้นสำหรับแสดงเส้นทางด้วยสีที่กำหนดเอง |
| โพลีกอน | PolygonOptions.fillColor(strokeColor) | การเติมพื้นที่ด้วยความโปร่งใสและเส้นขอบ |
| InfoWindow | GoogleMap.setInfoWindowAdapter | เนื้อหาที่กำหนดเองของหน้าต่างข้อมูล (View ใดก็ได้) |
| GroundOverlay | GroundOverlayOptions.image(BitmapDescriptor) | รูปภาพที่วางซ้อนบนพื้นที่ของแผนที่ |
Clustering — การรวมมาร์กเกอร์เป็นคลัสเตอร์เมื่อมีจุดจำนวนมากบนแผนที่ Google Maps SDK สำหรับ Android และ iOS มียูทิลิตี้การจัดกลุ่มในตัว (com.google.maps.android:android-maps-utils) Clustering ป้องกันไม่ให้แผนที่เต็มไปด้วยมาร์กเกอร์ที่ระดับซูมต่ำกว่าค่าที่กำหนด เมื่อซูม คลัสเตอร์จะถูกแยกออกเป็นมาร์กเกอร์แต่ละตัวโดยอัตโนมัติ ตามข้อมูลของ Google การจัดกลุ่มช่วยปรับปรุงประสิทธิภาพของแผนที่ได้ 40% เมื่อมีมาร์กเกอร์ 1000+ ตัว
ตัวอย่างที่สมบูรณ์ของการแสดงแผนที่พร้อมมาร์กเกอร์แบบกำหนดเอง โพลีไลน์เส้นทาง และหน้าต่างข้อมูล แอปแสดงแผนที่มอสโกพร้อมจุดที่น่าสนใจและเส้นทางจากใจกลางเมืองไปยังจุดนั้น โค้ดนี้แสดงความสามารถหลักของ Google Maps SDK: การเพิ่มมาร์กเกอร์ การวาดโพลีไลน์ การเลื่อนกล้อง และการจัดการคลิก
class MapDemoActivity : AppCompatActivity(), OnMapReadyCallback {
override fun onMapReady(map: GoogleMap) {
val kremlin = LatLng(55.7513, 37.6189)
val gorkyPark = LatLng(55.7311, 37.6116)
map.addMarker(MarkerOptions()
.position(kremlin)
.title("เครมลิน")
.icon(BitmapDescriptorFactory.defaultMarker(
BitmapDescriptorFactory.HUE_RED)))
map.addPolyline(PolylineOptions()
.add(kremlin, gorkyPark)
.width(5f)
.color(Color.parseColor("#2196F3")))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(kremlin, 13f))
map.setOnInfoWindowClickListener { marker ->
Toast.makeText(this,
"${marker.title} ถูกคลิก",
Toast.LENGTH_SHORT).show()
}
}
}คำแนะนำด้านประสิทธิภาพ: ใช้การโหลดมาร์กเกอร์แบบ async ผ่านClusterManager เมื่อมีจุดมากกว่า 200 จุด จำกัดจำนวนโพลีไลน์ที่แสดง (Google แนะนำไม่เกิน 100 พร้อมกัน) ใช้ Lite Mode สำหรับแผนที่ที่ไม่ต้องใช้ฟังก์ชันเต็มรูปแบบ (เลื่อนโดยไม่เปลี่ยนซูม) Lite Mode ลดการใช้หน่วยความจำ 50% และเร่งการโหลดแผนที่ได้ 2 เท่า
Google Maps Platform ใช้รูปแบบการชำระเงิน Pay-as-you-go พร้อมวงเงินฟรีรายเดือน $200 แต่ละ API คิดค่าใช้จ่ายแยกกัน: Maps SDK — $2.83 ต่อการโหลดแผนที่ 1,000 ครั้ง, Places API — $4.71 ต่อ 1,000 คำขอ, Directions API — $4.71 ต่อ 1,000 เส้นทาง, Routes API (แนะนำ) — $5.00 ต่อ 1,000 คำขอ วงเงินฟรี $200 โดยปกติครอบคลุมการโหลดแผนที่สูงสุด 70,000 ครั้งต่อเดือน
สำหรับโปรเจกต์ที่มีการใช้งานสูง Google เสนอส่วนลดเมื่อปริมาณเกิน 500,000 คำขอต่อเดือน Google Maps SDK ไม่คิดค่าใช้จ่ายสำหรับการแสดงแผนที่พื้นฐานโดยไม่มีการโต้ตอบ — คิดค่าบริการเฉพาะการโหลด (map load) ทุกครั้งที่ผู้ใช้เปิดหน้าจอที่มีแผนที่ จะถือว่าเป็นการโหลดหนึ่งครั้ง การปรับให้เหมาะสม: การแคชไทล์แผนที่ช่วยลดจำนวนการโหลดเมื่อเปิดซ้ำ
ข้อจำกัด: 300 คำขอต่อนาทีสำหรับ Places API (เพิ่มได้ถึง 3000 ผ่านโควตาใน Cloud Console) สำหรับ Directions API — 100 คำขอต่อนาที การเกินขีดจำกัดจะส่งคืนข้อผิดพลาด OVER_QUERY_LIMIT Google แนะนำให้ใช้การหน่วงเวลาแบบเลขชี้กำลัง (exponential backoff) สำหรับคำขอซ้ำ การตรวจสอบการใช้งานมีให้ใน Google Cloud Console โดยมีความล่าช้าสูงสุด 5 นาที
คำถามที่พบบ่อย
Google Maps SDK คิดค่าใช้จ่ายตามรูปแบบ pay-as-you-go: $2.83 ต่อการโหลดแผนที่ 1,000 ครั้ง ทุกเดือน Google มอบเครดิตฟรี $200 ซึ่งครอบคลุมการโหลดสูงสุด 70,000 ครั้ง Places API และ Directions API คิดค่าใช้จ่ายแยกต่างหาก สำหรับโปรเจกต์ขนาดเล็กที่มีผู้ใช้ไม่เกิน 10,000 คน ค่าใช้จ่ายโดยปกติอยู่ที่ $10-50 ต่อเดือน
ได้ Google Maps SDK รองรับแผนที่ออฟไลน์ผ่านการแคชไทล์ SDK แคชไทล์สูงสุด 1,000 ไทล์โดยอัตโนมัติ (ประมาณพื้นที่ 10x10 กม.) สำหรับการรองรับออฟไลน์เต็มรูปแบบ ให้ใช้ Google Maps Offline API สำหรับ Android ซึ่งช่วยให้ดาวน์โหลดแผนที่ทั้งภูมิภาคได้ แผนที่ออฟไลน์ไม่รองรับการจราจร เส้นทาง และ Places API
Google Maps SDK มีชุดข้อมูลที่กว้างขวางกว่า: สถานที่ 250 ล้านแห่ง การจราจรแบบเรียลไทม์ Street View Indoor Maps Apple MapKit ฟรี แต่มีข้อมูลน้อยกว่านอกสหรัฐอเมริกาและยุโรป Google SDK ต้องใช้คีย์ API และชำระเงิน ส่วน Apple MapKit — ไม่ต้อง สำหรับโปรเจกต์ข้ามแพลตฟอร์ม Google Maps SDK ดีกว่าเพราะใช้ API เดียวบนทั้งสองแพลตฟอร์ม
คีย์ API ถูกสร้างใน Google Cloud Console ผ่านส่วน APIs & Services → Credentials สำหรับการเปิดใช้งานต้องผูกคีย์กับบัญชีการชำระเงิน แต่ Google มอบเครดิตฟรี $200 ทุกเดือน คีย์สามารถจำกัดด้วย IP, HTTP-referrer หรือแพ็กเกจ Android/iOS Bundle ID สำหรับการทดสอบไม่จำเป็นต้องกรอกข้อมูลบัตรธนาคาร
ได้ Google Maps SDK รองรับการจัดกลุ่มผ่านไลบรารีandroid-maps-utils (Android) และ Google-Maps-iOS-Utils (iOS) ClusterManager รวมมาร์กเกอร์ที่อยู่ใกล้กันเป็นคลัสเตอร์พร้อมตัวบ่งชี้ตัวเลขโดยอัตโนมัติ เมื่อซูม คลัสเตอร์จะแยกออกเป็นมาร์กเกอร์แต่ละตัว การจัดกลุ่มจำเป็นเมื่อมีมาร์กเกอร์ 200+ ตัวเพื่อรักษาประสิทธิภาพของแผนที่
บทสรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม