因此我使用Google Places API(在浏览器中输入网址显示结果),但实际地图上没有显示任何结果。为什么是这样?我使用的是网络密钥,而不是iOS,我知道这是一个常见错误,所以不是那样。
代码:
-(void) queryGooglePlaces: (NSString *) googleType {
NSString* url = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=REMOVED FOR STACKOVERFLOW&radius=5000&types=atm&sensor=true&key=REMOVEDFORSTACKOVERFLOW"];
//Formulate the string as a URL object.
NSURL *googleRequestURL=[NSURL URLWithString:url];
// Retrieve the results of the URL.
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL: googleRequestURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
-(void)fetchedData:(NSData *)responseData {
//parse out the json data
NSError* error;
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
//The results from Google will be an array obtained from the NSDictionary object with the key "results".
NSArray* places = [json objectForKey:@"results"];
//Write out the data to the console.
NSLog(@"Google Data: %@", places);
}
答案 0 :(得分:0)
Google Places API只能用于查询庞大的Google数据库中的地点。然而,地图并没有显示所有这些地方(有数百万个地方),而且您成功查询其中一个地点的事实并不意味着它应该添加到地图中。因此,解决方案是,一旦获得了添加标记的位置坐标。
在Google地图应用上查询后,您可以看到一个标记,其中包含您所查询地点的代表,这是Google地图应用的一项功能,它构建于Google Places API + Google Map SDK之上,在查询添加自己的标记之后。
所以算法是: 1)进行搜索(Google Places API) 2)获取地点坐标和类型(一个地方可以有多个类型;该列表作为GMSPlace类引用中的链接提供:https://developers.google.com/places/supported_types) 3)在右坐标上添加正确的标记(取决于类型)。
作为最后一点,您会注意到即使您没有查找,Google地图仍然会显示某些地方:这是Google的选择,可能是为了显示被视为相关的地方。但最后你不应该认为你在谷歌地图应用程序中看到的内容将是你在谷歌地图SDK地图上看到的内容:一个是建立在另一个之上但很难在第一眼看到信息来自哪里(当然谷歌在应用程序和SDK之间使用了连贯的图形!)。您唯一能看到这种差异的方法是使用Google Maps SDK并排比较Google地图应用中的同一地图的一部分和您的应用。