本總覽說明如何使用 Maps SDK for iOS,設定已加進 iOS 應用程式的地圖。
總覽
在應用程式中加入地圖後,您可以進行地圖的初始選項和執行階段設定。如要進一步瞭解如何加入地圖容器,請參閱「新增地圖」一文。
初始地圖設定包括下列項目:
- The camera position, including: location, zoom, bearing and tilt. 如要進一步瞭解相機位置,請參閱「相機和檢視畫面」。
- 地圖背景顏色。
- 地圖類型。
- 要顯示的 UI 元件,例如縮放按鈕和指南針。
- 要啟用的手勢。
您可以藉由更新 GMSMapView
物件,在執行階段調整這些設定和一些其他設定。
地圖選項
初始化地圖檢視時,系統會透過 GMSMapViewOptions
設定設定選項。選項屬性包括 frame
、camera
、mapID
、backgroundColor
或 screen
。
地圖選項 | |
---|---|
相框 | 值:
CGRect 地圖頁框。預設值為 CGRectZero。
|
相機 | 值:
GMSCameraPosition 預設地圖攝影機位置。
|
mapID | 值:
GMSMapID Google mapID. 選用參數。
|
backgroundColor | 值:
UIColor 預設為 UIColor.lightGray
|
螢幕 | 值:
UIScreen 此為 CarPlay 的必要條件。隱含主畫面的預設值。
|
設定地圖選項
您可以設定自己的選項屬性,或是將含有預設值的 GMSMapViewOptions
執行個體化 GMSMapViewOptions
直接傳遞至 GMSMapView
。
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
以下範例可將包含預設值的 GMSMapViewOptions
物件直接傳遞至 GMSMapView
。
Swift
let options = GMSMapViewOptions() let mapView = GMSMapView(options:options) //initialized with default values
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; //initialized with default values
設定背景顏色
在深色模式或切換地圖檢視時,建議您覆寫預設地圖背景顏色。設定地圖選項 backgroundColor
屬性即可達成。
Swift
let options = GMSMapViewOptions() options.backgroundColor = UIColor.yellowColor let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.backgroundColor = UIColor.yellowColor; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
地圖類型
你可以用幾種地圖類型中的一種自定義地圖。地圖的類型決定了地圖的整體表示法。例如,圖集通常包含著重於顯示邊界的政治地圖,以及顯示特定城市或地區所有道路的道路地圖。Maps SDK for iOS 提供以下類型的地圖:
地圖類型 | |
---|---|
正常 | 值:
kGMSTypeNormal 典型的路線圖。顯示道路、部分人造設施,以及河流等重要自然景觀,也顯示道路和地圖項目標籤。
|
混合式活動 | 值:
kGMSTypeHybrid 與道路地圖衛星照片數據添加。也顯示道路和地圖項目標籤。 |
人造衛星 | 值:
kGMSTypeSatellite 衛星照片數據。不會顯示道路和地圖項目標籤。
|
地形 | 值:
kGMSTypeTerrain 地形數據。這種地圖包含顏色、輪廓線和標籤,以及透視陰影。也顯示部分道路和地圖項目標籤。
|
無 | 值:
kGMSTypeNone 沒有地圖圖塊。該基地地圖圖塊不會被渲染。這個模式適用於搭配圖塊圖層使用。當地圖類型設為「無」時,就無法顯示車流量資料。 |
變更地圖類型
如要設定地圖類型,請將新的值指派給 GMSMapView.mapType
屬性。例如,要顯示的衛星地圖類型:
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options) mapView.mapType = .satellite
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; mapView.mapType = kGMSTypeSatellite;
下方的選擇器會顯示同一位置的地形、一般和混合地圖比較:
室內地圖
高倍縮放時,Maps SDK for iOS 會顯示室內空間 (例如機場、購物中心、大型零售商店和轉運站) 的平面圖。室內平面圖已整合至「一般」地圖類型 (kGMSTypeNormal
) 的預設地圖圖塊,而且會在使用者放大地圖時自動啟用,並在縮小地圖時逐漸消失。
您可以將 GMSMapView
的 indoorEnabled
屬性設為 NO
,藉此停用室內地圖。
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
您也可以只停用樓層挑選器控制項。
新增平面圖
平面圖僅於特定位置提供。如果無法取得您想要在應用程式中突顯的建築物平面圖資料,您可以:
路況圖層
您可以讓使用者查看疊加在地圖上的車流量資訊,清楚呈現當地的路況。您可以透過呼叫 trafficEnabled
方法來開啟或關閉車流量圖層。以下範例顯示路況圖層在地圖上的可能顯示方式。
無障礙功能
默認情況下,在地圖上可訪問的元素是隱藏的。只要將 GMSMapView
的 accessibilityElementsHidden
屬性設為 NO
,即可啟用無障礙功能。這會導致系統為疊加層物件 (例如 GMSMarker
和資訊視窗、GMSPolyline
等) 產生無障礙元素。
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
此屬性是按照非正式的 UIAccessibility
通訊協定而定,不過 Maps SDK for iOS 中的預設值為 YES
。
我的位置
根據預設,地圖不會顯示任何位置資料。您可以在 GMSMapView
上設定 myLocationEnabled
,啟用藍色的「我的位置」點和指南針方向。
Swift
mapView.isMyLocationEnabled = true
Objective-C
mapView.myLocationEnabled = YES;
啟用這項功能會透過 myLocation
屬性提供使用者目前的位置。系統可能無法立即提供這項資源,例如 iOS 提示使用者允許存取這項資料時。在這種情況下,它會是 nil
。
Swift
print("User's location: \(String(describing: mapView.myLocation))")
Objective-C
NSLog(@"User's location: %@", mapView.myLocation);
3D 建築物
許多城市的地圖在近距離查看時,會顯示 3D 建築物,如下方西雅圖的圖片所示。

您可以在 Swift 或 Objective-C 中設定對應的 GMSMapView
屬性,藉此停用 3D 建築物,如下所示:
Swift
mapView.isBuildingsEnabled = false
Objective-C
[mapView setBuildingsEnabled:NO];
地圖邊框間距
Google 地圖的設計會填滿 GMSMapView
定義的整個區域。地圖的部分顯示方式和行為模式取決於檢視區塊的維度:
- 相機的目標反映設有邊框間距的區域中心。
- 地圖控制項是依地圖邊緣決定其相對位置。
- 版權聲明之類的法律資訊或是 Google 標誌,則沿著地圖的底部邊緣顯示。
您可以使用 GMSMapView
.padding
屬性。地圖會持續填滿整個容器,但文字和控制項位置、地圖手勢及相機動作,會像地圖放在較小的空間中一樣。這會產生下列變更:
- 使用 API 呼叫或按下按鈕 (例如「指南針」,我的位置) 產生的相機動作會以相對於設有邊框間距區域的方式進行。
GMSMapView
.projection
會傳回只包含設有邊框間距區域的投影。- UI 控制項會從容器的邊緣偏移,偏移距離為指定的點數。
設計與地圖中特定部分重疊的使用者介面時,邊框間距是頗為實用的功能。例如在圖片中,地圖的頂部邊緣和右邊緣都設有邊框間距。可見地圖控制項和法律文字會顯示在設有邊框間距區域的邊緣 (綠框部分),地圖則繼續填滿整個容器 (藍框部分)。在這個範例中,您可以讓選單浮動在地圖右側,且不對地圖控制項做模糊處理。
如要在地圖中加入邊框間距,請建立 UIEdgeInsets
物件並傳遞至 GMSMapView
。padding
屬性。
Swift
// Insets are specified in this order: top, left, bottom, right let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0) mapView.padding = mapInsets
Objective-C
// Insets are specified in this order: top, left, bottom, right UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0); mapView.padding = mapInsets;