Google Maps SDK — 什么是谷歌地图与开发API

作者: IT Sectr 发布日期: 2026-04-30 阅读时间: 10 分钟

Google Maps SDK 是Google提供的一套工具,用于将交互式地图、地理编码、路线和地点搜索集成到移动和Web应用程序中。SDK包括适用于Android和iOS的Maps SDK、用于处理地理数据的Places API以及用于构建路线的Directions API。Google地图服务每天处理超过1000亿次请求,使Maps SDK成为最高效的地图解决方案之一。根据Google Maps Platform Documentation, 2025,该SDK被60%的具有地图功能的移动应用程序使用。

要点

  • Google Maps SDK — 用于将地图、地理数据和导航集成到应用程序中的平台
  • Maps SDK — 显示交互式地图,支持自定义样式和图层
  • Places API — 搜索地点、地理编码和获取场所信息
  • Directions API — 为不同交通方式构建路线
  • 计费 — 根据请求数量支付API使用费用(每1000次请求2-10美元)

什么是Google Maps SDK?

Google Maps SDK 是一个面向开发者的综合平台,提供在应用程序中处理地理数据的工具。该平台包括多个API:Maps SDK(地图显示)、Routes API(路线)、Places API(地点搜索和地理数据)和Geocoding API(地址到坐标的转换)。每个SDK独立集成,并拥有自己的计费模式。

与Apple MapKit不同,Google Maps SDK提供更广泛的数据集:2.5亿个地点的信息、实时交通、Street View全景图和室内地图Indoor Maps。根据Statista(2025)的数据,Google Maps平台占据移动应用中地图SDK市场75%的份额。关键优势是 — 所有Google地图服务的统一API密钥和跨平台集成(Android、iOS、Web)。

API密钥与安全配置

API密钥 是使用Google Maps SDK的必需元素。密钥在Google Cloud Console中创建,并绑定到特定项目。对于Android,需要提供应用程序证书的SHA-1;对于iOS,需要提供Bundle Identifier。Google建议根据IP地址、HTTP引荐来源或应用程序包限制API密钥的使用,以防止未经授权的访问。

Android版Maps SDK:集成与功能

Android版Maps SDK 是一个库,通过MapView或SupportMapFragment在Android应用程序内显示交互式Google地图。SDK支持:自定义地图样式、带信息窗口的标记、多边形和折线、交通和运输图层,以及触摸事件和手势(缩放、旋转、倾斜)。地图使用OpenGL进行渲染,在现代设备上提供60 FPS。

集成从在build.gradle中添加依赖项和通过AndroidManifest.xml配置API密钥开始。Google Maps SDK for Android要求在设备上安装Google Play Services。如果缺少Google Play Services(例如,在没有Google服务的华为设备上),地图将不会显示。对于这种情况,Google建议使用替代解决方案或带有JavaScript Maps API的WebView。

kotlin
// 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)显示支持的城市中的公共交通路线。

iOS版Maps SDK:配置与使用

iOS版Maps SDK 提供与Android版本相同的功能,但针对Apple平台进行了适配。集成通过Swift Package Manager或CocoaPods完成。iOS版Maps SDK使用Google服务器进行地图渲染,但可以与Apple MapKit配合进行原生导航。SDK支持iOS 15及更高版本,以及通过UIViewRepresentable支持SwiftUI。

iOS版本的特殊性 — 必须配置Info.plist,指定API密钥并添加Google Maps的URL方案。与Android不同,iOS SDK不需要Google Play Services,但某些功能(例如,在导航中打开地图)需要安装Google Maps应用程序。对于跨平台项目,Google建议为项目使用一个统一的API密钥,并为两个平台激活。

swift
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:地点搜索与地理编码

Places API 是Google Maps平台的服務,用于获取有关地理地点的信息:地址、坐标、评级、营业时间、照片和评论。Places API有两种模式:Place Search(按文本或半径搜索地点)和Place Details(按Place ID获取特定地点的详细信息)。该SDK适用于Android、iOS,并作为REST API提供。

适用于Android和iOS的Places SDK允许将地址自动完成(Place Autocomplete)直接嵌入到应用程序的文本字段中。这是配送、出租车和物流应用程序的关键功能 — 用户开始输入地址,SDK从Google Maps数据库提供选项。Place Autocomplete 与手动输入相比,可将地址输入错误减少80%。Places API计费:Place Details每1000次请求2.83美元,Place Search每1000次4.71美元。

kotlin
// 在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("Places", "${placeLikelihood.place.name} - ${placeLikelihood.likelihood}")
        }
    }

Place Autocomplete:地址自动完成

Geocoding API — 反向地理编码(坐标→地址)和正向(地址→坐标)。用于将用户输入的地址转换为坐标以在地图上显示。Geocoding API单独计费:每1000次请求4.71美元。Google为每个账户每天提供200次免费请求用于测试。

Directions API:路线构建

Directions API — 用于计算两个或多个点之间路线的服务,考虑交通方式(汽车、步行、自行车、公共交通)。API返回多条备选路线,包括距离、行驶时间、逐步指引和用于在地图上绘制路线的折线。Directions API可作为REST API和通过客户端SDK使用。

扩展功能 — Routes API(Google自2024年起推荐的新API)。Routes API提供改进的路线规划,考虑实时交通、生态足迹(环保路线)和到达时间的预测分析。据Google称,与经典Directions API相比,Routes API在城市条件下计算行驶时间的准确度提高了20%。Routes API计费:每1000次请求5.00美元。

kotlin
// 通过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("Route", response.body?.string() ?: "")
    }
})

Directions API 支持一条路线最多25个中途点(waypoints)。中途点可以指定为坐标或Place ID。要优化点的顺序(旅行商问题),请使用optimize:true参数。计费:Directions API — 每1000次请求4.71美元(最多10个点),每增加一个点,请求成本增加50%。

地图自定义:样式、标记和信息窗口

Google Maps SDK 提供广泛的自定义功能:通过JSON样式更改地图的配色方案、添加自定义标记(包括动画)、带任意内容的信息窗口(InfoWindow)和图形图层覆盖(GroundOverlay、Circle、Polygon)。自定义允许将地图适配到应用程序品牌并改善用户体验。

地图样式 通过Google Maps Styling向导或Map Style格式的JSON文件完成。可以更改道路(featureType: road)、水域(water)、公园(poi.park)、建筑物(building)等元素的颜色。对于深色主题的应用程序地图,请使用带有深色背景和柔和颜色的夜间样式。Google Maps支持一个JSON文件中最多100条样式规则。

自定义元素方法/类描述
标记MarkerOptions.icon(BitmapDescriptor)来自资源或URL的自定义标记图标
折线PolylineOptions.color(width)用于显示路线的自定义颜色线条
多边形PolygonOptions.fillColor(strokeColor)带透明度和描边的区域填充
InfoWindowGoogleMap.setInfoWindowAdapter信息窗口的自定义内容(任意View)
GroundOverlayGroundOverlayOptions.image(BitmapDescriptor)放置在地图区域上的图像

Clustering:性能优化之标记聚类

Clustering — 当地图上点数众多时将标记合并到簇中。适用于Android和iOS的Google Maps SDK包含内置的聚类工具(com.google.maps.android:android-maps-utils)。聚类防止在低于特定级别的缩放时地图被标记填满。缩放时,簇自动分解为单个标记。据Google称,在1000+标记的情况下,聚类可将地图性能提升40%。

代码示例:Kotlin中带标记的地图

显示带自定义标记、路线折线和信息窗口的地图的完整示例。应用程序显示莫斯科地图,包含一个兴趣点以及从市中心到该点的路线。代码演示了Google Maps SDK的基本功能:添加标记、绘制折线、移动摄像头和处理点击事件。

kotlin
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} clicked",
                Toast.LENGTH_SHORT).show()
        }
    }
}

性能建议:当点数超过200时,通过ClusterManager使用标记的异步加载,限制可见折线的数量(Google建议同时不超过100条),对不需要完整功能的地图使用Lite Mode(滚动而不改变缩放)。Lite Mode将内存消耗减少50%,并将地图加载速度提高2倍。

Google Maps平台的定价与限制

Google Maps平台 采用按需付费模式,每月免费额度为200美元。每个API单独计费:Maps SDK — 每1000次地图加载2.83美元,Places API — 每1000次请求4.71美元,Directions API — 每1000条路线4.71美元。Routes API(推荐)— 每1000次请求5.00美元。200美元的免费额度通常每月可覆盖多达70,000次地图加载。

对于高负载项目,Google针对每月500,000次请求以上的量提供折扣。Google Maps SDK 不因显示无交互的基本地图而收费 — 仅对加载(map load)收费。每次用户打开带有地图的屏幕,计为一次加载。优化:缓存地图瓦片可减少重新打开时的加载次数。

限制:Places API每分钟300次请求(可通过Cloud Console中的配额增加到3,000次)。Directions API — 每分钟100次请求。超出限制返回OVER_QUERY_LIMIT错误。Google建议对重复请求使用指数退避(exponential backoff)。使用监控在Google Cloud Console中可用,延迟最多5分钟。

常见问题

在移动应用程序中使用Google Maps SDK需要多少费用?

Google Maps SDK 按按需付费模式计费:每1000次地图加载2.83美元。Google每月提供200美元的免费额度,可覆盖多达70,000次加载。Places API和Directions API单独计费。对于受众在10,000用户以内的小型项目,费用通常为每月10-50美元。

能否在没有互联网的情况下使用Google Maps SDK?

可以,Google Maps SDK通过缓存瓦片支持离线地图。SDK自动缓存最多1000个瓦片(约10x10公里区域)。要获得完整的离线支持,请使用适用于Android的Google Maps Offline API,该API允许下载整个区域的地图。离线地图不支持交通、路线和Places API。

Google Maps SDK与Apple MapKit有什么区别?

Google Maps SDK 提供更广泛的数据集:2.5亿个地点、实时交通、Street View、室内地图。Apple MapKit免费,但在美国和欧洲以外的数据较少。Google SDK需要API密钥和付费,而Apple MapKit则不需要。对于跨平台项目,Google Maps SDK因在两个平台上使用统一的API密钥而更具优势。

如何获得Google Maps的免费API密钥?

API密钥在Google Cloud Console的APIs & Services → Credentials部分创建。要激活,需要将密钥关联到付款账户,但Google每月提供200美元的免费额度。密钥可以根据IP、HTTP引荐来源或Android包/iOS Bundle ID进行限制。测试时无需输入银行卡信息。

Google Maps SDK是否支持标记聚类?

是的,Google Maps SDK通过android-maps-utils(Android)和Google-Maps-iOS-Utils(iOS)库支持聚类。ClusterManager自动将附近的标记合并到带有数字指示器的簇中。缩放时,簇分解为单个标记。在200+标记的情况下,为保持地图性能必须进行聚类。

总结

  • Google Maps SDK — 用于将地图、地理数据和导航集成到移动应用程序中的平台
  • 适用于Android和iOS的Maps SDK 显示交互式地图,支持样式、标记和图层
  • Places API — 为具有地理数据的应用程序提供地点搜索、地址自动完成和地理编码
  • Directions API / Routes API — 考虑交通情况的路线构建,最多25个中途点
  • 自定义 包括JSON样式、自定义标记、InfoWindow、聚类和GroundOverlay
  • 定价 — 按需付费,每1000次加载2.83美元起,每月免费额度200美元
  • API密钥 是必需的,在Google Cloud Console中绑定到项目,并按平台限制

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读