SPGooglePlacesAutocomplete 1.0.6

SPGooglePlacesAutocomplete 1.0.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年5月

Chris Chen 维护。



  • Chris Chen

当前版本 - 1.0.5

待办事项

  1. 处理打开的合并请求和问题(抱歉让它们等得太久了!)
  2. 创建 Swift 版本

历史

SPGooglePlacesAutocomplete 由 Stephen Poletto 于 2012 年启动,但基本上是闲置的。

我在 2013 年找到了它,因为我的项目需要一个功能。添加了一些更新和 podspec 文件,我将它发布到了 Cocoapods 社区。不确定这是否是一个明智的决定,也许我一开始就应该联系 Stephen Poletto...

SPGooglePlacesAutocomplete

SPGooglePlacesAutocomplete 是一个围绕 Google 地点自动补全 API 的简单的 Objective-C 封装。

此 API 可用于提供基于文本的地理搜索的自动补全功能,通过返回用户键入时的业务、地址和兴趣点等地点。

SPGooglePlacesAutocomplete 还提供了将地点结果转换为 CLPlacemark 对象的支持,以便与 MKMapView 进行轻松的地图绘制。

屏幕截图

待办事项

  1. 添加单元测试
  2. 创建 Swift 版本

如何使用它

需求

SPGooglePlacesAutocomplete 需要 iOS 6.0 或更高版本的部署目标和 ARC。

安装

CocoaPods 是将 SPGooglePlacesAutocomplete 添加到项目的推荐方法。

  1. 在 Podfile 中添加 pod 条目 pod 'SPGooglePlacesAutocomplete'
  2. 运行 pod installpod update
  3. 使用 #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即可。任何挂起的请求将自动取消,并发出一个新的带有更新属性的请求。

解析地点到 CLPlacemarks

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);
        }];
    }
}];

当搜索“geocode”(地址)地点时,库会使用 CLGeocoder 将地址地理编码。当搜索“establishment”(商业)地点时,库将自动ping Google 地点 API 来获取地理定位商业所需的信息。

示例代码

有关如何使用 SPGooglePlacesAutocomplete 的示例,请参阅所附示例项目。我在项目中放置了一个功能性的 Google API密钥,请不要在其他地方使用它!

请注意,使用地点自动完成 API 与 Apple 地图一起使用违反了 Google 的服务条款。根据 文档:“您甚至不需要地图就可以使用地点自动完成。如果您显示地图,它必须是 Google 地图。当您在没有地图的情况下显示地点自动完成服务的预测时,您必须包括‘由 Google 提供’的标志。”