OGeek|极客世界-中国程序员成长平台

标题: ios - Foursquare field 搜索 API 返回超出范围的结果 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 11:18
标题: ios - Foursquare field 搜索 API 返回超出范围的结果

我在 Amsterdamkeizersgracht 拍了一张照片。我正在构建一个功能,如果照片的位置和 Foursquare field 之间存在严格匹配,我会包含一个拍摄照片的位置。否则,我希望结果为 nil

我正在进行的 Foursquare API 调用的文档可以在这里找到:https://developer.foursquare.com/docs/venues/search

由于我不知道图片是在什么地点拍摄的,所以我无法添加 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);

getDataFrom 方法是关于发出一个简单的 GET 请求。

但是,当我经过阿姆斯特丹市中心的某个位置时,我得到了超出半径范围的结果,如下所示片段)

cc = NL;
                    city = Amsterdam;
                    country = Netherlands;
                    distance = 24;
                    formattedAddress =                     (
                        Amsterdam,
                        Netherlands
                    );

这很奇怪,因为我特地添加了半径 1。

这是什么原因造成的,我该怎么办?



Best Answer-推荐答案


我建议放弃半径参数。您的设备有一个位置。与其构造一个半径如此之小(你的 iPhone 的位置精度不太可能达到 1 米)和这么多类别的请求,你可以询问可能的附近位置(intent=checkin 确实如此) ) 并简单地枚举返回的数据以找到距离您的设备位置最近的位置(正如@Acey 提到的那样)。您可以使用 Core Location 中提供的 API 自行计算,或者使用每个紧凑 field 返回的距离。如果您不使用半径参数,则不需要包含 categoryIds 或查询。 (另外,由于 iPhone 上的定位精度可能会有所不同,您肯定会有一些情况需要解决!)

此外,如果该应用仅适用于某一特定类别地点(例如咖啡店)的照片,那么在 GET 请求中请求该 categoryId 是有意义的。除非我有误解,否则您似乎包含 categoryIds 只是因为您认为需要包含半径参数,我认为这没有必要。

如果您希望特定用户的“最佳”匹配,您需要允许该用户使用其 Foursquare 帐户进行身份验证。 Foursquare 将返回“最佳”匹配的 field ,该 field 可能至少基于他们的签到历史。

此外,如果您在应用中保留这些数据并且不想向 Foursquare 提供身份验证,则可以使用用户累积的数据在设备上创建自己的算法,以帮助确定用户所在的位置当他们拍摄 future 的照片时。

祝您构建应用程序好运。似乎是一个巧妙的想法,需要考虑一些很好的挑战。

关于ios - Foursquare field 搜索 API 返回超出范围的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222815/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4