เพิ่มสถานที่อัตโนมัติ (ใหม่)

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

นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (EEA)

บริการเติมข้อความอัตโนมัติ (ใหม่) คือ API ของ iOS ที่ แสดงคำแนะนำสถานที่เพื่อตอบสนองต่อคำขอ ในคำขอ ให้ระบุ สตริงการค้นหาข้อความและขอบเขตทางภูมิศาสตร์ที่ควบคุมพื้นที่ค้นหา

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

คำแนะนำสถานที่คือสถานที่ต่างๆ เช่น ธุรกิจ ที่อยู่ และจุดที่น่าสนใจ โดยอิงตามสตริงข้อความที่ป้อนและพื้นที่ค้นหาที่ระบุ

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

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

คุณสามารถผสานรวมฟังก์ชันการเติมข้อความอัตโนมัติ (ใหม่) เข้ากับแอปได้ 2 วิธีหลักๆ ดังนี้

รับการคาดคะเนสถานที่โดยใช้โปรแกรม

คำขอเติมข้อความอัตโนมัติ (ใหม่)

สร้างคำขอเติมข้อความอัตโนมัติโดยเรียกใช้เมธอดใน GMSPlacesClient คุณส่งพารามิเตอร์ในออบเจ็กต์ GMSAutocompleteRequest ได้ การตอบกลับจะแสดงคำแนะนำในการเติมข้อความอัตโนมัติภายในออบเจ็กต์ GMSAutocompletePlaceSuggestion

ต้องระบุคีย์ API และพารามิเตอร์ query คุณยังระบุ GMSAutocompleteSessionToken เพื่อเชื่อมโยงคำขอกับเซสชันการเรียกเก็บเงิน และ GMSAutocompleteFilter เพื่อใช้กับผลลัพธ์ได้ด้วย

เวอร์ชัน Places Swift SDK

สร้างคำขอเติมข้อความอัตโนมัติโดยเรียกใช้เมธอดใน PlacesClient คุณส่งพารามิเตอร์ในออบเจ็กต์ AutocompleteRequest ได้ การตอบกลับจะแสดงคำแนะนำในการเติมข้อความอัตโนมัติภายในออบเจ็กต์ AutocompletePlaceSuggestion

ต้องระบุคีย์ API และพารามิเตอร์ query คุณยังระบุ AutocompleteSessionToken เพื่อเชื่อมโยงคำขอกับเซสชันการเรียกเก็บเงิน และ AutocompleteFilter เพื่อใช้กับผลลัพธ์ได้ด้วย

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

Places Swift SDK

let center = (37.3913916, -122.0879074)
let northEast = (37.388162, -122.088137)
let southWest = (37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  // Handle suggestions.
case .failure(let placesError):
  // Handle error.
}

Swift

let token = GMSAutocompleteSessionToken()

let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051)
let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds)

let request = GMSAutocompleteRequest(query:"Spagh")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137);
CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ kGMSPlaceTypeRestaurant ];
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

ตอบกลับโดยใช้การเติมข้อความอัตโนมัติ (ใหม่)

ฟีเจอร์เติมข้อความอัตโนมัติจะแสดงผลอาร์เรย์ของอินสแตนซ์สูงสุด 5 รายการ GMSAutocompleteSuggestion อาร์เรย์ประกอบด้วย

  • placeID
  • types: ประเภทที่ใช้กับสถานที่นี้
  • distanceMeters: ระยะทางจากต้นทาง
  • attributedFullText: ข้อความที่มนุษย์อ่านได้ทั้งหมดของคำแนะนำ
  • attributedPrimaryText: ข้อความหลักของคำแนะนำที่มนุษย์อ่านได้
  • attributedSecondaryText: ข้อความรองของคำแนะนำที่มนุษย์อ่านได้
  • structuredFormat: ชื่อที่เฉพาะเจาะจงและข้อความที่ช่วยแยกความแตกต่าง เช่น เมืองหรือภูมิภาค

พารามิเตอร์ที่จำเป็น

query

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

พารามิเตอร์ที่ไม่บังคับ

sessionToken

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

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

Places Swift SDK

let token = AutocompleteSessionToken()
let filter = AutocompleteFilter(origin: CLLocationCoordinate2DMake(39.7, -94.5))
let request = AutocompleteRequest(query: "Piz", sessionToken: token, filter: filter)

PlacesClient.shared.fetchAutocompleteSuggestions(request: request) {
    case .success(let suggestions):
      ...
    case .failure(let placesError):
      print(placesError) 
}

// pass token's string format to use with a service that is not a part of iOS SDK.
print("token: \(token)")

Objective-C

GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Piz"];
GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init];
request.sessionToken = token;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.origin = [[CLLocation alloc] initWithLatitude:39.7 longitude:-94.5];
filter.locationBias = GMSPlaceRectangularLocationOption(topLocation, bottomLocation);

request.filter = filter;
 [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request
                     callback:^(NSArray<GMSAutocompleteSuggestion *> *_Nullable results,
                                NSError *_Nullable error) {
  ...
}];

// pass token's string format to use with a service that is not a part of iOS SDK.
NSLog(@"%@", token.description);

ดูข้อมูลเพิ่มเติมได้ที่โทเค็น เซสชัน

พารามิเตอร์ AutocompleteFilter ที่ไม่บังคับ

ประเภท

สถานที่หนึ่งๆ จะมีประเภทหลักเดียวจากประเภทตาราง กหรือตาราง ขที่เชื่อมโยงได้ เช่น ประเภทหลักอาจเป็น mexican_restaurant หรือ steak_house

โดยค่าเริ่มต้น API จะแสดงสถานที่ทั้งหมดตามพารามิเตอร์ input โดยไม่คำนึงถึงค่าประเภทหลักที่เชื่อมโยงกับสถานที่ จำกัดผลลัพธ์ ให้เป็นประเภทหลักบางประเภทโดยส่งพารามิเตอร์ types

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

คำขอจะถูกปฏิเสธพร้อมข้อผิดพลาด INVALID_REQUEST ในกรณีต่อไปนี้

  • ระบุประเภทมากกว่า 5 ประเภท
  • ระบุประเภทที่ไม่รู้จัก

เช่น หากต้องการจำกัดผลการค้นหาให้แสดงเฉพาะร้านขายอุปกรณ์กีฬา ให้ระบุประเภทดังกล่าวในAutocompleteFilter

Places Swift SDK

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
  

Swift

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]
  

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];

ประเทศ

รวมเฉพาะผลลัพธ์จากรายการภูมิภาคที่ระบุ ซึ่งระบุเป็นอาร์เรย์ ของค่า ccTLD ("โดเมนระดับบนสุด") แบบ 2 อักขระได้สูงสุด 15 รายการ หากละเว้น ระบบจะไม่ใช้ข้อจำกัดใดๆ กับการตอบกลับ เช่น หากต้องการจำกัดภูมิภาคเป็นเยอรมนีและฝรั่งเศส ให้ทำดังนี้

Places Swift SDK

let filter = AutocompleteFilter(countries: ["DE", "FR"])
  

Swift

let filter = GMSAutocompleteFilter()
filter.countries = ["DE", "FR"]

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.countries = @[ @"DE", @"FR" ];

หากคุณระบุทั้ง locationRestriction และ countries ผลลัพธ์จะอยู่ในพื้นที่ที่การตั้งค่าทั้ง 2 รายการตัดกัน

inputOffset

ออฟเซ็ตอักขระ Unicode ที่เริ่มจาก 0 ซึ่งระบุตำแหน่งเคอร์เซอร์ใน input ตำแหน่งเคอร์เซอร์อาจส่งผลต่อการคาดคะเนที่แสดง หาก ว่างเปล่า ค่าเริ่มต้นจะเป็นความยาวของ input

locationBias หรือ locationRestriction

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

  • locationBias ระบุพื้นที่ที่จะค้นหา ตำแหน่งนี้ทำหน้าที่เป็นไบแอส ซึ่งหมายความว่าระบบจะแสดงผลการค้นหาที่อยู่รอบๆ ตำแหน่งที่ระบุ รวมถึง ผลการค้นหาที่อยู่นอกพื้นที่ที่ระบุ

  • locationRestriction ระบุพื้นที่ที่จะค้นหา ระบบจะไม่แสดงผลลัพธ์ที่อยู่นอก พื้นที่ที่ระบุ

ระบุภูมิภาค locationBias หรือ locationRestriction เป็นวิวพอร์ตสี่เหลี่ยม หรือเป็นวงกลม

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

เช่น

Places Swift SDK

let center = CLLocationCoordinate2DMake(40.477398, -74.259087)

let bias = CircularCoordinateRegion(center: center, radius: 1000.0)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Swift

let center = CLLocationCoordinate2DMake(40.730610, -73.935242)
let radius = 1000.0

filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242);
radius = 1000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);

สี่เหลี่ยมผืนผ้าคือวิวพอร์ตละติจูดลองจิจูด ซึ่งแสดงเป็นจุด low และ high ที่อยู่ตรงข้ามกันในแนวทแยง ระบบจะถือว่าวิวพอร์ตเป็นภูมิภาคปิด ซึ่งหมายความว่ารวมถึงขอบเขตของวิวพอร์ตด้วย ขอบเขตละติจูดต้องอยู่ระหว่าง -90 ถึง 90 องศา และขอบเขตลองจิจูดต้องอยู่ระหว่าง -180 ถึง 180 องศา

  • หาก low = high วิวพอร์ตจะประกอบด้วยจุดเดียว
  • หาก low.longitude > high.longitude ช่วงลองจิจูดจะกลับด้าน (วิวพอร์ตตัดผ่านเส้นลองจิจูด 180 องศา)
  • หาก low.longitude = -180 องศาและ high.longitude= 180 องศา วิวพอร์ตจะรวมลองจิจูดทั้งหมด
  • หาก low.longitude = 180 องศาและ high.longitude = -180 องศา ช่วงลองจิจูดจะว่างเปล่า

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

ตัวอย่างเช่น Viewport นี้ครอบคลุมนิวยอร์กซิตี้ทั้งหมด

Places Swift SDK

let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087)
let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Swift

let high = CLLocationCoordinate2DMake(40.921628, -73.700051)
let low = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceRectangularLocationOption(high, low)

Objective-C

CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087);
CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceRectangularLocationOption(high, low);

origin

จุดต้นทางที่จะใช้คำนวณระยะทางเป็นเส้นตรงไปยัง จุดหมาย (แสดงผลเป็น distanceMeters) หากไม่ระบุค่านี้ ระบบจะไม่แสดงผล ระยะทางเป็นเส้นตรง ต้องระบุเป็นพิกัดละติจูดและ ลองจิจูด

Places Swift SDK

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
  

Swift

let filter = GMSAutocompleteFilter()
filter.origin =  CLLocation(latitude: 37.395804, longitude: -122.077023)
 

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];

filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];

regionCode

รหัสภูมิภาคที่ใช้จัดรูปแบบการตอบกลับ โดยระบุเป็นค่า ccTLD ("โดเมนระดับบนสุด") แบบ 2 อักขระ รหัส ccTLD ส่วนใหญ่จะเหมือนกับรหัส ISO 3166-1 โดยมีข้อยกเว้นที่สำคัญบางประการ ตัวอย่างเช่น ccTLD ของสหราชอาณาจักรคือ "uk" (.co.uk) ขณะที่รหัส ISO 3166-1 คือ "gb" (ในทางเทคนิคสำหรับนิติบุคคลของ "สหราชอาณาจักรบริเตนใหญ่และไอร์แลนด์เหนือ")

หากคุณระบุรหัสภูมิภาคที่ไม่ถูกต้อง API จะแสดงข้อผิดพลาด INVALID_ARGUMENT พารามิเตอร์นี้อาจส่งผลต่อผลลัพธ์ตามกฎหมายที่เกี่ยวข้อง

shouldIncludePureServiceAreaBusinesses

หาก true จะแสดงธุรกิจที่ให้บริการตามสถานที่เท่านั้นในอาร์เรย์การตอบกลับ ธุรกิจที่ให้บริการตามสถานที่อย่างแท้จริงคือธุรกิจที่บริการแบบถึงที่หรือออกให้บริการแก่ลูกค้าโดยตรง แต่ไม่ได้ให้บริการลูกค้า ณ ที่อยู่ธุรกิจ

เช่น

Places Swift SDK

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Swift

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.shouldIncludePureServiceAreaBusinesses = YES;

เพิ่มวิดเจ็ต Place Autocomplete

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

วิดเจ็ตการเติมข้อความอัตโนมัติของสถานที่

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

หากคุณไม่ได้ระบุโทเค็นเซสชัน วิดเจ็ตจะสร้างโทเค็นเซสชันการเติมข้อความอัตโนมัติ ให้คุณ ซึ่งคุณจะรับโทเค็นได้จากแฮนเดิล การเรียกกลับของ onSelection ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้โทเค็นเซสชันได้ที่เกี่ยวกับโทเค็น เซสชัน

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

พารามิเตอร์ของวิดเจ็ต Place Autocomplete

นอกจากพารามิเตอร์ที่ใช้ได้ แบบเป็นโปรแกรมแล้ว วิดเจ็ตการเติมข้อความอัตโนมัติของสถานที่ยังมีพารามิเตอร์ต่อไปนี้ด้วย

แสดง

show ระบุว่าจะแสดงวิดเจ็ตหรือไม่

onSelection

การปิดเพื่อเรียกใช้เมื่อมีการเลือกสถานที่

onError

การปิดเพื่อเรียกใช้เมื่อเกิดข้อผิดพลาด ระบบจะส่ง PlacesError หากเกิดข้อผิดพลาด

การปรับแต่งเนื้อหาและธีม

พารามิเตอร์ AutocompleteUICustomization จะระบุการปรับแต่ง UI ที่จะใช้กับวิดเจ็ต ตัวเลือกการปรับแต่งมีดังนี้

  • AutocompleteListDensity พารามิเตอร์นี้ช่วยให้คุณเลือกความหนาแน่นของรายการคำแนะนำได้ ไม่ว่าจะเป็น multiLine หรือ twoLine
  • AutocompleteUIIcon พารามิเตอร์นี้ช่วยให้คุณเลือกว่าจะแสดงไอคอนเริ่มต้นสำหรับแต่ละ รายการในลิสต์หรือไม่
  • theme พารามิเตอร์นี้ระบุธีมที่กำหนดเองซึ่งลบล้างแอตทริบิวต์รูปแบบ เริ่มต้น คุณปรับแต่งสี การจัดรูปแบบข้อความ ระยะห่าง เส้นขอบ และมุมของคอมโพเนนต์การเติมข้อความอัตโนมัติของสถานที่ได้ ค่าเริ่มต้นคือ PlacesMaterialTheme แอตทริบิวต์ธีมที่ไม่ได้ลบล้างจะใช้ รูปแบบเริ่มต้น

ดูตัวอย่างโค้ดแบบเต็ม

ตัวอย่างการเติมข้อความอัตโนมัติ (ใหม่)

ใช้ locationRestriction และ locationBias

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

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

Places Swift SDK

let center = (37.775061, -122.419400)
let radius = 5000.0
let restriction = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionRestriction: restriction)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

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

Places Swift SDK

let center = (37.775061, -122.419400)
let radius = 5000.0
let bias = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionBias: bias)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

ประเภทการใช้งาน

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

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

Places Swift SDK

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
    

Swift

let token = GMSAutocompleteSessionToken()

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]

let request = GMSAutocompleteRequest(query:"Soccer")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

ใช้ต้นทาง

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

ตัวอย่างนี้ตั้งค่าต้นทางเป็นใจกลางซานฟรานซิสโก

Places Swift SDK

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194))
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let origin = CLLocation(latitude: 37.7749, longitude: -122.4194)

let filter = GMSAutocompleteFilter()

filter.origin =  origin

let request = GMSAutocompleteRequest(query:"Amoeba")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
      }
    }
}];

ปรับแต่งเนื้อหาและธีม

Swift

let uiCustomization = AutocompleteUICustomization(
    listDensity: .multiLine,
    listItemIcon: .noIcon,
    theme: PlacesMaterialTheme()
)

เพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติของ Places (โค้ดทั้งหมด)

Places Swift SDK

struct PlaceAutocompleteDemoView: View {

  @State private var fetchedPlace: Place?
  @State private var placesError: PlacesError?
  @State private var showWidget = false

  public var body: some View {
    VStack {
      Button("Search for a place") {
        showWidget.toggle()
      }
      .placeAutocomplete(
        show: $showWidget,
        onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in
          Task {
            let placesClient = await PlacesClient.shared
            let fetchPlaceRequest = FetchPlaceRequest(
              placeID: autocompletePlaceSuggestion.placeID,
              placeProperties: [.displayName, .formattedAddress],
              sessionToken: autocompleteSessionToken
            )

            switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
            case .success(let place):
              print("Fetched place: \(place)")
              self.fetchedPlace = place
            case .failure(let placesError):
              print("Failed to fetch place: \(placesError)")
              self.placesError = placesError
            }
          }
        },
        onError: { placesError in
          self.placesError = placesError
        }
      )
    }
  }
}