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

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

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

ภาพรวม

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

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

ขณะรันไทม์ คุณจะกำหนดการตั้งค่าเหล่านี้และการตั้งค่าเพิ่มเติมบางอย่างได้โดยการอัปเดตออบเจ็กต์ 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 สำหรับ 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 Maps ได้รับการออกแบบมาให้แสดงทั่วทั้งภูมิภาคที่ GMSMapView กำหนดไว้ โดยมิติข้อมูลของมุมมองจะเป็นตัวกำหนดลักษณะของแผนที่ที่ปรากฏและลักษณะการทำงานในหลายๆ ด้าน ดังนี้

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

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

  • การเคลื่อนที่ของกล้องโดยใช้การเรียก 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;