設定地圖

選取平台: Android iOS

本總覽說明如何使用 Maps SDK for iOS 設定加入至 iOS 應用程式的地圖。

總覽

將地圖新增至應用程式後,您可以設定地圖的初始選項和執行階段設定。如要進一步瞭解如何新增地圖容器,請參閱「新增地圖」。

初始地圖設定包括下列項目:

在執行階段,您可以更新 GMSMapView 物件,設定這些設定和其他設定。

地圖選項

初始化地圖檢視畫面時,會使用 GMSMapViewOptions 設定設定選項。選項屬性包括 framecameramapIDbackgroundColor

地圖選項
相框
值: CGRect
地圖框架。預設為 CGRectZero。
攝影機
值: GMSCameraPosition
預設地圖相機位置。
mapID
值: GMSMapID
Google 地圖 ID。選用參數。
backgroundColor
值: UIColor
預設為 UIColor.lightGray

設定地圖選項

您可以自行設定選項屬性,也可以將具有預設值的已例項化 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) 的預設地圖圖塊,並在使用者縮放時自動啟用,在縮小地圖時淡出。

您可以將 GMSMapViewindoorEnabled 屬性設為 NO,藉此停用室內地圖。

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

或者,您也可以只停用樓層選擇器控制項

新增樓層平面圖

部分地點提供平面圖。如果您想在應用程式中標示的建築物沒有提供平面圖資料,可以採取以下做法:

路況圖層

您可以讓使用者查看疊加在地圖上的車流量資訊,清楚呈現當地的路況。您可以呼叫 trafficEnabled 方法,開啟或關閉交通圖層。以下範例顯示路況圖層在地圖上的可能顯示方式。

顯示交通圖層的 Google 地圖

無障礙設定

默認情況下,在地圖上可訪問的元素是隱藏的。您可以將 GMSMapViewaccessibilityElementsHidden 屬性設為 NO,啟用無障礙功能。這會導致系統為疊加物件 (例如 GMSMarker 和資訊視窗 GMSPolyline 等) 產生無障礙元素。

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

這個屬性與非正式的 UIAccessibility 通訊協定相同,但 Maps SDK for iOS 中的預設值為 YES

我的位置

根據預設,地圖上不會顯示任何位置資料。您可以將 myLocationEnabled 設為 GMSMapView,啟用藍色「我的所在位置」點和指南針方向。

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 建築物,如下方華盛頓州西雅圖的圖片所示。

華盛頓州西雅圖的 3D 建築物地圖。

您可以在 Swift 或 Objective-C 中設定對應的 GMSMapView 屬性,藉此停用 3D 建築物,如下所示:

Swift

mapView.isBuildingsEnabled = false
      

Objective-C

[mapView setBuildingsEnabled:NO];
      

地圖邊框間距

Google 地圖會填滿 GMSMapView 定義的整個區域。地圖的部分顯示方式和行為模式取決於檢視畫面的維度:

  • 攝影機的目標會反映邊框區域的中心。
  • 地圖控制項會依地圖邊緣決定其相對位置。
  • 著作權聲明或 Google 標誌等法律資訊,沿著地圖的底部邊緣顯示。

您可以使用 GMSMapView.padding 屬性。地圖會繼續填滿整個容器,但文字和控制項位置、地圖手勢及攝影機動作會順應改變行為,有如地圖放在較小的空間中。這會導致以下變更:

  • 使用 API 呼叫或按鈕按下 (例如指南針、我的所在位置) 的相機動作,會相對於有空白區域的區域。
  • GMSMapView.projection 會傳回只包含邊框間距區域的投影。
  • UI 控制項從容器邊緣偏移,偏移距離為指定的點數。

在設計與地圖某些部分重疊的 UI 時,邊框間距會很有幫助。例如,在圖片中,地圖沿著頂部和右側邊緣有空白區域。可見的地圖控制項和法律聲明文字會沿著邊緣顯示在內填區域 (以綠色顯示),而地圖會繼續填滿整個容器 (以藍色顯示)。在這個範例中,您可以將選單浮動至地圖右側,而不會遮蔽地圖控制項。

地圖邊框間距

如要在地圖中加入邊框,請建立 UIEdgeInsets 物件並將其傳遞至 GMSMapViewpadding 屬性。

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;
      

地圖色彩配置

對於正常和地形地圖,您可以將地圖配色方案設為深色、淺色,或使用目前的系統設定。舉例來說,您可以根據時間或裝置的室內/外使用情形,將地圖配色方案調暗或調亮。

使用 GMSMapView overrideUserInterfaceStyle: 設定及更新地圖配色方案。

Swift

let options = GMSMapViewOptions()
// Map is init to use light mode by default.
let mapView = GMSMapView(options: options)
// Set map to use dark mode.
mapView.overrideUserInterfaceStyle = .dark
// Set map to use light mode.
mapView.overrideUserInterfaceStyle = .light
// Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle
mapView.overrideUserInterfaceStyle = .unspecified

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
// Map is init to always use light mode.
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
// Set map to use dark mode.
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
// Set map to use light mode.
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
// Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;