กําหนดค่าแผนที่

เลือกแพลตฟอร์ม Android iOS

ภาพรวมนี้อธิบายวิธีกำหนดค่าแผนที่ที่เพิ่มลงในแอป iOS โดยใช้ Maps SDK สำหรับ iOS

ภาพรวม

หลังจากเพิ่มแผนที่ลงในแอปแล้ว คุณจะกำหนดค่าตัวเลือกเริ่มต้นและการตั้งค่ารันไทม์ของแผนที่ได้ โปรดดูรายละเอียดเกี่ยวกับการเพิ่มคอนเทนเนอร์แผนที่ที่หัวข้อเพิ่มแผนที่

การตั้งค่าแผนที่เริ่มต้นมีดังนี้

คุณสามารถกําหนดการตั้งค่าเหล่านี้และการตั้งค่าเพิ่มเติมบางอย่างได้เมื่อรันไทม์โดยอัปเดตออบเจ็กต์ GMSMapView

ตัวเลือกแผนที่

เมื่อเริ่มต้นใช้งานมุมมองแผนที่ ระบบจะตั้งค่าตัวเลือกการกําหนดค่าด้วย GMSMapViewOptions พร็อพเพอร์ตี้ตัวเลือก ได้แก่ frame, camera, mapID หรือ backgroundColor

ตัวเลือกแผนที่
เฟรม
ค่า: CGRect
กรอบแผนที่ ค่าเริ่มต้นคือ CGRectZero
กล้อง
ค่า: GMSCameraPosition
ตำแหน่งเริ่มต้นของกล้องแผนที่
mapID
ค่า: GMSMapID
รหัสแผนที่ Google พารามิเตอร์ที่ไม่บังคับ
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 สำหรับ 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 สำหรับ iOS จะแสดงผังชั้นสำหรับพื้นที่ในอาคาร เช่น สนามบิน ห้างสรรพสินค้า ร้านค้าปลีกขนาดใหญ่ และสถานีขนส่งสาธารณะ แผนผังชั้นในอาคารผสานรวมอยู่ในไทล์แผนที่เริ่มต้นสำหรับแผนที่ประเภท "ปกติ" (kGMSTypeNormal) และจะเปิดใช้โดยอัตโนมัติเมื่อผู้ใช้ซูมเข้า และจะจางหายไปเมื่อซูมแผนที่ออก

คุณปิดใช้แผนที่ในอาคารได้โดยตั้งค่าพร็อพเพอร์ตี้ indoorEnabled ของ GMSMapView เป็น NO

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

หรือจะปิดใช้เฉพาะการควบคุมเครื่องมือเลือกชั้นก็ได้

การเพิ่มแปลนอาคาร

แผนผังชั้นมีให้บริการในบางสถานที่ หากไม่มีข้อมูลแผนผังชั้นสำหรับอาคารที่ต้องการไฮไลต์ในใบสมัคร คุณจะทำสิ่งต่อไปนี้ได้

  • เพิ่มผังชั้นลงใน Google Maps โดยตรง ซึ่งจะทำให้ผู้ใช้ Google Maps ทุกคนเห็นแผนของคุณ
  • แสดงผังอาคารเป็นการวางซ้อนพื้นที่ ซึ่งจะทำให้มีเพียงผู้ใช้แอปพลิเคชันเท่านั้นที่ดูผังพื้นได้

เลเยอร์การจราจร

คุณสามารถอนุญาตให้ผู้ใช้ดูแผนที่ที่มีข้อมูลความหนาแน่นของการจราจรวางซ้อนอยู่ด้านบน ซึ่งจะแสดงภาพรวมของสถานการณ์การจราจรในพื้นที่ คุณเปิดและปิดเลเยอร์การจราจรได้โดยเรียกใช้วิธี trafficEnabled ตัวอย่างต่อไปนี้แสดงลักษณะที่เลเยอร์การจราจรอาจปรากฏบนแผนที่

แผนที่ Google ที่แสดงเลเยอร์การจราจร

การช่วยเหลือพิเศษ

โดยค่าเริ่มต้น ระบบจะซ่อนองค์ประกอบการช่วยเหลือพิเศษในแผนที่ คุณสามารถเปิดใช้การช่วยเหลือพิเศษได้โดยการตั้งค่าพร็อพเพอร์ตี้ accessibilityElementsHidden ของ GMSMapView เป็น NO ซึ่งจะทําให้ระบบสร้างองค์ประกอบการช่วยเหลือพิเศษสําหรับออบเจ็กต์วางซ้อน (เช่น GMSMarker และหน้าต่างข้อมูล GMSPolyline ฯลฯ)

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

พร็อพเพอร์ตี้นี้เป็นไปตามโปรโตคอล UIAccessibility อย่างไม่เป็นทางการ ยกเว้นค่าเริ่มต้นใน Maps SDK สําหรับ 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);
      

สิ่งปลูกสร้าง 3 มิติ

เมืองหลายแห่งจะแสดงอาคาร 3 มิติเมื่อดูจากระยะใกล้ ดังที่เห็นในรูปภาพซีแอตเทิล รัฐวอชิงตันด้านล่าง

แผนที่ 3 มิติของอาคารในซีแอตเทิล รัฐวอชิงตัน

คุณปิดใช้อาคาร 3 มิติได้โดยการตั้งค่าพร็อพเพอร์ตี้ GMSMapView ที่เกี่ยวข้องใน Swift หรือ Objective-C ดังที่แสดงด้านล่าง

Swift

mapView.isBuildingsEnabled = false
      

Objective-C

[mapView setBuildingsEnabled:NO];
      

การเสริมพื้นที่ในแผนที่

Google Map ออกแบบมาเพื่อแสดงเต็มพื้นที่ทั้งภูมิภาคที่ระบุโดย GMSMapView มิติข้อมูลของมุมมองจะกําหนดลักษณะการปรากฏและลักษณะการทํางานของแผนที่ในหลายๆ ด้าน ดังนี้

  • เป้าหมายของกล้องแสดงถึงจุดศูนย์กลางของพื้นที่ที่มีเบาะ
  • การควบคุมแผนที่จะอยู่ในตำแหน่งที่สัมพันธ์กับขอบของแผนที่
  • ข้อมูลทางกฎหมาย เช่น ข้อความระบุลิขสิทธิ์หรือโลโก้ Google จะปรากฏที่ขอบด้านล่างของแผนที่

คุณสามารถเพิ่มระยะห่างจากขอบแผนที่ได้โดยใช้ GMSMapViewพร็อพเพอร์ตี้ padding แผนที่จะยังคงแสดงเต็มพื้นที่ของคอนเทนเนอร์ แต่การวางตำแหน่งข้อความและการควบคุม ท่าทางสัมผัสบนแผนที่ และการเคลื่อนไหวของกล้องจะทำงานเหมือนกับว่าวางอยู่ในพื้นที่ขนาดเล็ก การเปลี่ยนแปลงนี้ส่งผลให้มีการเปลี่ยนแปลงต่อไปนี้

  • การเคลื่อนไหวของกล้องโดยใช้การเรียก API หรือการกดปุ่ม (เช่น เข็มทิศ ตําแหน่งปัจจุบันของฉัน) จะสัมพันธ์กับพื้นที่ที่มีระยะขอบ
  • GMSMapView.projection แสดงผลโปรเจ็กชันที่มีเฉพาะภูมิภาคที่มีการถอดรหัส
  • ตัวควบคุม UI จะเลื่อนออกจากขอบของคอนเทนเนอร์ตามจำนวนจุดที่ระบุ

การเว้นระยะมีประโยชน์เมื่อออกแบบ 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;