SPGooglePlacesAutocomplete 是 Google 地点自动补全 API 的一个简单 Objective C 封装。该 API 可以通过返回商业、地址和兴趣点等地点来提供基于文本的地理搜索的自动补全功能,当用户输入时作为结果返回。SPGooglePlacesAutocomplete 还提供将地点结果转换为 CLPlacemark 对象以使用 MKMapView 进行简单映射的支持。
SPGooglePlacesAutocomplete 需要 iOS 6.0 或更高版本的部署目标以及 ARC。
CocoaPods 是向项目添加 SPGooglePlacesAutocomplete 的推荐方式。
pod 'SPGooglePlacesAutocomplete'
添加到 Podfile。pod install
或 pod update
。#import "SPGooglePlacesAutocomplete.h"
在需要的地方包含 SPGooglePlacesAutocomplete。实例化一个新的 SPGooglePlacesAutocompleteQuery 并填写您想要指定的属性。
#import "SPGooglePlacesAutocomplete.h"
...
SPGooglePlacesAutocompleteQuery *query = [[SPGooglePlacesAutocompleteQuery alloc] initWithApiKey:@"YourGoogleAPIKey"];
query.input = @"185 berry str"; // search key word
query.location = CLLocationCoordinate2DMake(37.76999, -122.44696); // user's current location
query.radius = 100.0; // search addresses close to user
query.language = @"en"; // optional
query.types = SPPlaceTypeGeocode; // Only return geocoding (address) results.
请记住,为浏览器应用提供 GoogleAPIKey,而不是为 iOS 应用提供。
然后,调用 -fetchPlaces 以 ping Google 的 API 并获取结果。返回的数组将返回 SPGooglePlacesAutocompletePlace 类的对象。
[query fetchPlaces:^(NSArray *places, NSError *error) {
NSLog(@"Places returned %@", places);
}];
如果您需要更新查询(例如,当用户输入时),只需更新适当的属性并再次调用 -fetchPlaces。任何悬而未决的请求将被自动取消,并将发出一个带有更新属性的新请求。
Google 地点自动补全 API 将返回与您查询匹配的地点名称。然而,它不会返回这些结果的经纬度信息。SPGooglePlacesAutocomplete 通过将地点结果解析为地标来处理这个问题。只需在一个 SPGooglePlacesAutocompletePlace 上调用 -resolveToPlacemark 即可。
[query fetchPlaces:^(NSArray *places, NSError *error) {
SPGooglePlacesAutocompletePlace *place = [places firstObject];
if (place) {
[place resolveToPlacemark:^(CLPlacemark *placemark, NSString *addressString, NSError *error) {
NSLog(@"Placemark: %@", placemark);
}];
}
}];
在搜索“地理编码”(地址)地点时,库使用CLGeocoder地理编码地址。在搜索“机构”(商业)地点时,库将自动ping谷歌地点API以获取地理定位商业所需的详细信息。
关于如何使用SPGooglePlacesAutocomplete的示例,请参阅附带的示例项目。我在项目中放置了一个功能齐全的谷歌API密钥,请勿在其他地方使用它!