Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS应用程序服务器上的文本文件中搜索纬度和经度范围_Ios_Objective C_Iphone - Fatal编程技术网

在iOS应用程序服务器上的文本文件中搜索纬度和经度范围

在iOS应用程序服务器上的文本文件中搜索纬度和经度范围,ios,objective-c,iphone,Ios,Objective C,Iphone,我试图在一个文本文件(可在url上找到)中搜索,其中有纬度、经度和其他用逗号分隔的信息。 我需要在应用程序中搜索距离用户所选纬度最近的纬度。 代码是用来读取该文件并进行搜索的,但它不能完美地工作。 请让我知道,在这种情况下我应该如何处理。 1) 文件得到实时更新,所以每次用户选择位置并单击获取信息时,我都需要调用url并读取文件。 2) 然后搜索距离用户所选lat lon最近的lat lon NSDICTIONARY数据获取:- ( { "altitude_m" = "90.0"

我试图在一个文本文件(可在url上找到)中搜索,其中有纬度、经度和其他用逗号分隔的信息。 我需要在应用程序中搜索距离用户所选纬度最近的纬度。 代码是用来读取该文件并进行搜索的,但它不能完美地工作。 请让我知道,在这种情况下我应该如何处理。 1) 文件得到实时更新,所以每次用户选择位置并单击获取信息时,我都需要调用url并读取文件。 2) 然后搜索距离用户所选lat lon最近的lat lon

NSDICTIONARY数据获取:-

(
    {
    "altitude_m" = "90.0";
    engName = “Station 1”;
    grkName = "\U039d\U03ad\U03b1 \U039c\U03ac\U03ba\U03c1\U03b7 \U0391\U03c4\U03c4\U03b9\U03ba\U03ae\U03c2";
    "humidity_P" = "50.0";
    lat = "38.058873";
    "local_time" = "16:20";
    lon = "23.976741";
    "pressure_hPA" = "1019.9";
    "rain_mm" = "0.0";
    "tem_C" = "17.2";
    "wind_Gusts_khm" = "51.5";
    "wind_degrees" = "22.5";
    "wind_kmh" = "25.7";
}
{
    "altitude_m" = "90.0";
    engName = “Station 2”;
    grkName = "\U039d\U03ad\U03b1 \U039c\U03ac\U03ba\U03c1\U03b7 \U0391\U03c4\U03c4\U03b9\U03ba\U03ae\U03c2";
    "humidity_P" = "50.0";
    lat = "38.048873";
    "local_time" = "16:20";
    lon = "23.876741";
    "pressure_hPA" = "1019.9";
    "rain_mm" = "0.0";
    "tem_C" = "17.2";
    "wind_Gusts_khm" = "51.5";
    "wind_degrees" = "22.5";
    "wind_kmh" = "25.7";
}
{
    "altitude_m" = "90.0";
    engName = “Station 3”;
    grkName = "\U039d\U03ad\U03b1 \U039c\U03ac\U03ba\U03c1\U03b7 \U0391\U03c4\U03c4\U03b9\U03ba\U03ae\U03c2";
    "humidity_P" = "50.0";
    lat = "38.059873";
    "local_time" = "16:20";
    lon = "23.986741";
    "pressure_hPA" = "1019.9";
    "rain_mm" = "0.0";
    "tem_C" = "17.2";
    "wind_Gusts_khm" = "51.5";
    "wind_degrees" = "22.5";
    "wind_kmh" = "25.7";
}
//匹配功能:-

-(void)matchLAtLongNow: (NSString *)latitude :(NSString *)longitude {


CLLocationCoordinate2D pinlocation;

pinlocation.latitude   = [latitude doubleValue];

pinlocation.longitude  = [longitude doubleValue];


float minLat = pinlocation.latitude - (searchDistance / 69);

float maxLat = pinlocation.latitude + (searchDistance / 69);


float minLon = pinlocation.longitude - searchDistance / fabs(cos(deg2rad(pinlocation.latitude))*69);
float maxLon = pinlocation.longitude + searchDistance / fabs(cos(deg2rad(pinlocation.longitude))*69);

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"lat <= %f AND lat >= %f AND lon <= %f AND lon >= %f",
                          maxLat, minLat, maxLon, minLon];

MatchedTxtArray = [myArray filteredArrayUsingPredicate:applePred];


}
-(void)matchLAtLongNow:(NSString*)纬度:(NSString*)经度{
CLLOCATIONCoordinated2D引脚定位;
pinlocation.latitude=[latitude doubleValue];
pinlocation.longitude=[longitude doubleValue];
float minLat=pinlocation.latitude-(搜索距离/69);
float maxLat=pinlocation.latitude+(搜索距离/69);
float minLon=pinlocation.longitude-searchDistance/fabs(cos(deg2rad(pinlocation.latitude))*69);
float maxLon=pinlocation.longitude+searchDistance/fabs(cos(deg2rad(pinlocation.longitude))*69);
NSPredicate*谓词=[NSPredicate谓词格式:
@“lat=%f和lon=%f”,
maxLat,minLat,maxLon,minLon];
MatchedTxtArray=[myArray filteredArrayUsingPredicate:applePred];
}
//获取错误 *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFNumber\u fastCStringContents]:未识别的选择器发送到实例0x175426460'
*
第一次抛出调用堆栈:

NSDictionary返回NSNumber。检查调用matchAtLongNow的位置:您可能在需要字符串的位置有NSNumber

听起来您需要地理搜索,而不是包含在某些阈值内。我会重新表述如下:

NSArray *objects; // this is your parsed file, an array of dictionaries
CLLocation *userLocation;  // this is your user location

// sort the dictionary in order of distance to the userLocation
NSArray *sortedObjects = [objects sortedArrayUsingComparator:^(NSDictionary *objA,NSDictionary *objB) {
    CLLocationDistance distanceA = [self distanceToObject:objA from:userLocation];
    CLLocationDistance distanceB = [self distanceToObject:objB from:userLocation];
    return (NSComparisonResult)(distanceB-distanceA);
}];
sortedObjects
将包含从距离
用户位置最近到最远排序的字典
我们只需要一个函数,该函数生成字典中lat/lon值到用户位置的距离

- (CLLocationDistance)distanceToObject:(NSDictionary *)object from:(CLLocation *)location {
    CLLocationDegrees latitude = [object[@"lat"] doubleValue];
    CLLocationDegrees longitude = [object[@"lob"] doubleValue];
    CLLocation *objectLocation = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    return [objectLocation distanceFromLocation:location];
}

谢谢你的回复。我检查了一下是否有字符串。