GoogleKit 是用于 Google Maps API 的 Objective-C 封装库。你要为 X 创建一个类似于 Uber 的应用吗?那么,GoogleKit 就是你的不二选择!
支持 iOS 7 和以上版本,要求自动引用计数(ARC)。
简单地将 GoogleKit.h
导入您的控制器或 .pch 文件。
APIs & auth -> Credentials
。Public API access
部分查找并点击 Create a new key
按钮,然后选择 iOS key
。确保在 APIs & auth -> APIs
部分启用了 Geocoding API 和 Places API。在 iOS key
出现问题时,请使用 Browser key
。
为每个请求全局提供 API 密钥
[GKQuery provideAPIKey:GOOGLE_API_KEY];
或为不同的请求使用不同的密钥
GKQuery *query = [GKQuery query];
query.key = @"key";
启用日志记录以检查原始请求和响应。
[GKQuery loggingEnabled:YES];
地理编码功能可以将地址(例如“加州山景城1600阿姆菲瑟特路”)转换为地理坐标(例如纬度 37.423021 和经度 -122.083739),您可用这些坐标放置标记或定位地图。有关详细信息,请查阅官方 Google 文档。
GKGeocoderQuery *query = [GKGeocoderQuery query];
// required parameters
query.key = @"key"; // or client and signature parameters if you are using Maps for Work
query.address = @"some address";
// optional parameters
query.language = @"en";
query.region = @"us";
query.components = @[ @"country:US" ];
// perform query
[query lookupLocation:^(NSArray *results, NSError *error) {
GKGeocoderPlace *place = [results firstObject];
//place.formattedAddress;
}];
逆向地理编码可以将地图上的位置转换为可读地址。有关详细信息,请查阅官方 Google 文档。
GKGeocoderQuery *query = [GKGeocoderQuery query];
// required parameters
query.key = @"key";
query.coordinate = CLLocationCoordinate2DMake(0.0f, 0.0f);
// optional parameters
query.language = @"en";
query.resultType = @[ @"street_address" ];
query.locationType = @[ @"ROOFTOP" ];
query.postalCode = @"000000";
// perform query
[query lookupAddress:^(NSArray *results, NSError *error) {
GKGeocoderPlace *place = [results firstObject];
}];
地点自动补全提供基于位置的自动补全功能。有关详细信息,请查阅官方 Google 文档。
GKPlaceAutocompleteQuery *query = [GKPlaceAutocompleteQuery query];
// required parameters
query.key = @"key";
query.input = @"wall street";
// optional parameters
query.coordinate = CLLocationCoordinate2DMake(55.738407f, 37.612306f); // New York City
query.types = @[ @"geocode" ];
query.components = @[ @"country:us" ];
query.radius = 10000;
query.offset = 3;
query.language = @"en";
// perform query
[query fetchPlaces:^(NSArray *results, NSError *error) {
GKPlaceAutocomplete *place = [results firstObject];
}];
GKPlaceAutocompleteQuery
内置了缓存,所以您不需要担心具有相同输入的查询。
周边搜索允许您在指定的区域内搜索地点。您可以通过提供关键词或指定要搜索地点的类型来细化您的搜索请求。请参阅官方谷歌文档。
GKPlacesNearbySearchQuery *query = [GKPlacesNearbySearchQuery query];
// required parameters
query.key = @"key";
query.coordinate = CLLocationCoordinate2DMake(40.71448f, -74.00598f); // New York City
query.rankByDistance = NO; // if rankByDistance sets to YES radius will be ignored
query.radius = 3000;
// optional parameters
query.language = @"en";
query.keyword = @"keyword";
query.minprice = 0;
query.maxprice = 4;
query.name = @"name";
query.opennow = YES;
query.types = @[ @"library" ];
query.nextPageToken = @"token";
// perform query
[query searchPlaces:^(NSArray *results, NSString *nextPageToken, NSError *error) {
GKPlace *place = [results firstObject];
}];
文本搜索根据字符串返回一组地点的信息,例如 "纽约的披萨" 或 "渥太华附近的鞋店"。该服务会响应一个与文本字符串和任何设置的地点偏好匹配的地点列表。搜索响应将包括地点列表,您可以为响应中的任何地点发送地点详细信息请求以获取更多信息。请参阅官方谷歌文档。
GKPlacesTextSearchQuery *query = [GKPlacesTextSearchQuery query];
// required parameters
query.key = @"key";
query.text = @"pizza in New York";
// optional parameters
query.language = @"en";
query.coordinate = CLLocationCoordinate2DMake(40.71448f, -74.00598f);
query.radius = 3000;
query.minprice = 0;
query.maxprice = 4;
query.opennow = YES;
query.types = @[ @"cafe" ];
// perform query
[query searchPlaces:^(NSArray *results, NSError *error) {
GKPlace *place = [results firstObject];
}];
雷达搜索允许您一次性搜索最多 200 个地点,但比文本搜索或周边搜索请求通常返回的细节要少。请参阅官方谷歌文档。
GKPlacesRadarSearchQuery *query = [GKPlacesRadarSearchQuery query];
// required parameters
query.key = @"key";
query.coordinate = CLLocationCoordinate2DMake(40.71448f, -74.00598f); // New York City
query.radius = 3000;
// optional parameters
query.language = @"en";
query.keyword = @"";
query.minprice = 0;
query.maxprice = 4;
query.name = @"";
query.opennow = YES;
query.types = @[ @"library" ];
// perform query
[query searchPlaces:^(NSArray *results, NSError *error) {
GKPlace *place = [results firstObject];
// place.place_id
}];
一旦您从地点搜索中获得了 place_id,您可以通过启动地点详细信息请求来请求更多关于特定机构或兴趣点的详细信息。地点详细信息请求返回关于指定地点更全面的信息,例如其完整地址、电话号码等。请参阅官方谷歌文档。
GKPlaceDetailsQuery *query = [GKPlaceDetailsQuery query];
// required parameters
query.placeId = @"id";
// optional parameters
query.language = @"en";
query.extensions = @"review_summary";
// perform query
[query fetchDetails:^(GKPlaceDetails *place, NSError *error) {
}];
如果您遇到问题,请随时提交问题。
GoogleKit 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。