設定地圖

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

選取平台: Android iOS

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

總覽

在應用程式中新增地圖後,您可以進行地圖的初始和執行階段設定。如要進一步瞭解如何加入地圖容器,請參閱加入地圖

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

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

地圖類型

你可以用幾種地圖類型中的一種自定義地圖。地圖類型會影響地圖的整體表示法。舉例來說,圖集通常包含聚焦至顯示界線的政治地圖,以及顯示所有城市或區域的所有道路的道路地圖。Maps SDK for iOS 提供以下類型的地圖:

地圖類型
正常
值:kGMSTypeNormal
典型的路線圖。顯示道路、部分人造地圖項目,以及河流等重要自然特徵。也顯示道路和功能標籤。
混合式
值:kGMSTypeHybrid
與道路地圖衛星照片數據添加。道路和功能標籤也會顯示。
衛星
值:kGMSTypeSatellite
衛星照片數據。道路和功能標籤不會顯示。
地形
值:kGMSTypeTerrain
地形數據。地圖包含顏色、輪廓線和標籤,以及視角陰影。也顯示部分道路和地圖項目標籤。
值:kGMSTypeNone
沒有地圖圖塊。該基地地圖圖塊不會被渲染。這種模式可與圖塊圖層搭配使用。如果將地圖類型設為「無」,系統就會停用顯示車流量資料。

變更地圖類型

如要設定地圖類型,請將新值指派給 GMSMapView.mapType 屬性。例如,要顯示的衛星地圖類型:

Swift

let camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.mapType = .satellite
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.mapType = kGMSTypeSatellite;
      

以下選擇工具會顯示相同地點的地形、一般和混合地圖比較:

室內地圖

在高倍縮放時,Maps SDK for iOS 會顯示室內空間 (例如機場、購物中心、大型零售商店和轉運站) 的平面圖。室內平面圖整合至「#39;normal'地圖類型」(kGMSTypeNormal) 的預設地圖圖塊中;使用者放大地圖時,系統會自動啟用室內平面圖,並在地圖縮小時淡出。

如要停用室內地圖,請將 GMSMapViewindoorEnabled 屬性設為 NO

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

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

正在新增平面圖

平面圖可在選定的位置 。如果無法取得要在應用程式中醒目顯示的建築物資料,您可以:

  • 直接在 Google 地圖中新增樓層平面圖。如此一來,所有 Google 地圖使用者都能存取你的方案。
  • 顯示一個平面圖作為地面覆蓋 。這樣一來,只有您的應用程式使用者才能查看您的平面圖。

路況圖層

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

顯示路況圖層的 Google 地圖

無障礙功能

默認情況下,在地圖上可訪問的元素是隱藏的。將 GMSMapViewaccessibilityElementsHidden 屬性設為 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 提示使用者存取這項資料。在這種情況下,不會顯示任何值。

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 控制項會從容器的邊緣偏移,偏移點數。

設計與地圖中特定部分重疊的使用者介面時,邊框間距是頗為實用的功能。舉例來說,在下方圖片中,地圖的頂部邊緣和右邊緣都設有邊框間距。可見地圖控制項和法律文字將沿著設有邊框間距區域的邊緣顯示,以綠色表示;地圖將繼續填滿整個容器,以藍色表示。在這個範例中,您可以讓選單浮動在地圖右側,且不對地圖控制項做模糊處理。

地圖邊框間距

如要在地圖中加入邊框間距,請建立 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;