我在keizersgracht
的{{1}}拍了张照片。我正在构建一个功能,如果照片的位置与Foursquare场地之间存在严格的匹配,我会在拍摄照片的位置添加一个位置。否则,我希望结果为Amsterdam
。
我可以在此处找到我正在制作的Foursquare API调用的文档:https://developer.foursquare.com/docs/venues/search
由于我不知道拍摄照片的场地类型,因此我无法添加nil
参数,该参数会从选项中排除query
。作为解决方法,我选择使用intent=match
并将几乎所有intent=checkin
添加到请求中。
我的请求现在看起来像这样:
categoryId's
方法//latitude & longitude are taken as parameters to the method
NSString *clientId = @"redacted";
NSString *clientSecret = @"redacted";
NSString *version =@"20140806";
NSString *limit = @"1";
NSString *radius = @"1";
NSString *categoryId = @"4d4b7104d754a06370d81259,4bf58dd8d48988d1b4941735,4bf58dd8d48988d1b2941735,4bf58dd8d48988d1a8941735,4bf58dd8d48988d1ad941735,4d4b7105d754a06373d81259,4d4b7105d754a06374d81259,4d4b7105d754a06376d81259,4d4b7105d754a06377d81259,4d4b7105d754a06375d81259,4e67e38e036454776db1fb3a,4d4b7105d754a06378d81259,4d4b7105d754a06379d81259"; //almost all the cat id's
NSDictionary *venueResponse = [self getDataFrom:[NSString stringWithFormat:@"https://api.foursquare.com/v2/venues/search?client_id=%@&client_secret=%@&v=%@&ll=%@,%@&m=foursquare&limit=%@&radius=%@&intent=checkin&categoryId=%@", clientId, clientSecret, version, lat, lng, limit, radius, categoryId]];
NSLog(@"%@",venueResponse);
是关于发出一个简单的GET请求。
然而,当我在阿姆斯特丹市中心经过一个位置时,我得到了半径结果,如下所示:(片段)
getDataFrom
这很奇怪,因为我特意添加了半径为1。
可能导致这种情况的原因是什么,我该怎么办呢?
答案 0 :(得分:1)
结果上的距离值是距该位置中心的距离。在阿姆斯特丹的情况下,位置足够大,部分位于距离您所在地不到1英里的地方。想想重叠的圆圈。中心之间的距离可能大于1,但是从圆圈到该位置任何部分的距离实际上是0。
我猜你得到的结果集包含多个地方。我会仔细检查结果并选择距离最短的场地,这样可以为您提供最准确的场地。
答案 1 :(得分:1)
我建议抛弃radius参数。您的设备有一个位置。而不是构建具有如此小半径的请求(您的iPhone不太可能在其位置具有1米的准确度)以及如此多的类别,您可以询问可能的附近位置(意图=签入的位置)并简单地枚举返回的数据,找到离设备位置最近距离的地方(如@Acey提到的那样)。您可以使用Core Location中提供的API或使用每个紧凑场地返回的距离自行计算。如果不使用radius参数,则不需要包含categoryIds或查询。 (另外,因为iPhone上的位置准确性可能会有所不同,你肯定会有一些案例需要解决!):)
此外,如果该应用仅适用于某个特定类别的地方(例如咖啡店)的照片,那么在您的GET请求中请求该categoryId是有意义的。除非我误解,否则你似乎只是因为你认为需要包含一个我认为不必要的半径参数而包含categoryIds。
如果您想要特定用户的“最佳”匹配,则需要允许用户使用其Foursquare帐户进行身份验证。然后Foursquare将返回“最佳”匹配,以便为该用户个性化,至少可能是基于他们的签到历史记录。
此外,如果您要在应用中保留此数据并且不想向Foursquare提供身份验证,则可以使用用户的累积数据在设备上创建自己的算法,以帮助确定用户所处的位置当他们拍摄未来的照片时。
祝你好运构建应用程序。看起来像一个巧妙的想法,需要思考一些好的挑战。