【问题标题】:How can I search for locations in a certain radius?如何搜索特定半径内的位置?
【发布时间】:2013-05-06 23:29:42
【问题描述】:

很惊讶这很难搜索。我的搜寻只让我使用 CLGeocoder 以用户友好的格式显示信息。

我正在构建一个基于位置的应用程序,并且我具有保存位置(到服务器)并在表格视图中列出它们的功能。但是当我无法过滤和安排与我所在地区相关的位置时,这几乎没有用处。

我应该在设备中还是在 php 中完成设置位置半径的繁重工作?

我目前对解决方案的想法是将一个 JSON 坐标字符串发送到一个 php 脚本,该脚本在 MySQL 数据库中查找与用户位置距离小于 X 的位置字段的每个条目(通过粗略的 'WHERE X34.44789874 AND Y<...>

【问题讨论】:

    标签: ios objective-c geolocation cllocationmanager clgeocoder


    【解决方案1】:

    当然,你可以在 iOS 中做到这一点。

    // Given NSArray *locations as an array of CLLocation* that you wish to filter
    
    // and given a radius...
    CLLocationDistance radius = kSomeRadius;
    
    // and given a target you want to test against...
    CLLocation* target = [[CLLocation alloc] initWithLatitude:someLat longitude:someLon];
    
    
    NSArray *locationsWithinRadius = [locations objectsAtIndexes:
                                     [locations indexesOfObjectsPassingTest:
                                      ^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    
                                          return [(CLLocation*)obj distanceFromLocation:target] < radius;
    
                                      }]];
    
    [target release];
    

    来源 - Objective-c search locations with radius

    【讨论】:

    • 这很好,直到我不想将每个数据点都存储在一个数组中。关于如何最好地将其应用于从 5000 多个(远程)数据库中挑选 30 多个结果的任何想法?按纬度/经度的顺序列出我的数据库条目是否最符合时间?
    • 按纬度/经度列出是一种方法,或者对用户来说更自然的方法是按相对于他当前位置的距离增加排序的地方,最接近的地方首先列出。或者任何其他启发式方法,例如该用户的朋友可能经常访问的某些地方(如果您有此类信息),因此将其置于顶部。
    • 嗯,我的意思是在数据库中。当然,我打算在应用程序中显示最近的位置。但我试图弄清楚我应该如何构建用于搜索位置的数据库,以及基于用户位置查询该数据库的最有效方法。
    • 不错的发现。谢谢,斯里卡。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多