本總覽說明如何設定已加進 iOS 應用程式的地圖 或是使用 Maps SDK for iOS
總覽
在應用程式中加入地圖後,您可以設定初始選項和執行階段 的地圖設定。如要進一步瞭解如何加入地圖容器,請參閱「新增地圖」一文。
初始地圖設定包括下列項目:
- The camera position, including: location, zoom, bearing and tilt. 詳情請見 攝影機和檢視畫面:進一步瞭解攝影機位置。
- 地圖背景顏色。
- 地圖類型。
- 要顯示的 UI 元件,例如縮放按鈕和 指南針
- 要啟用的手勢。
在執行階段中,您可以選取
更新
GMSMapView
敬上
物件。
地圖選項
初始化地圖檢視時,設定選項會設為
GMSMapViewOptions
。選項屬性包括 frame
、camera
、mapID
或
backgroundColor
。
地圖選項 | |
---|---|
相框 | 值:
CGRect 地圖頁框。預設為 CGRectZero。
|
攝影機 | 值:
GMSCameraPosition 預設地圖攝影機位置。
|
mapID | 值:
GMSMapID Google mapID。選用參數。
|
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
),且在
使用者放大,而縮小地圖時淡出。
只要設定 indoorEnabled
屬性,即可停用室內地圖
GMSMapView
到 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
。
我的位置
根據預設,地圖上不會顯示任何位置資料。您可以啟用藍色的「我的
位置」設定 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 建築物 (僅供檢視) 如下圖所示
只需設定對應的
GMSMapView
敬上
,如下所示:
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;
地圖色彩配置
對於「一般」和「地形」類型的地圖,您可以將地圖色彩配置設為深色、淺色,或使用目前的系統設定。例如,您可以調暗或 根據時段或室內/室外使用時間,調亮地圖的色彩配置 完整連結
使用 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;