2017-03-31 3 views
0

テキストファイル(URLで利用可能)で検索しようとしていますが、緯度、経度、その他の情報がカンマで区切られています。 私は、アプリでユーザーの選択した緯度に最も近い緯度経度を検索する必要があります。 コードはそのファイルを読み込み、検索するために行われますが、完全には機能しません。 私に教えてください、私はこのような状況でどのように接近すべきですか? 1)ファイルはリアルタイムで更新されるため、ユーザーが場所を選択して情報を取得するたびにファイルを読み込む必要があります。 2)次に、ユーザーが選択した緯度経度に最も近い緯度経度を検索します。iOSアプリケーションのサーバー上のテキストファイルから緯度と経度の範囲で検索

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"; 
} 

//マッチング機能: - ERROR *終了キャッチされない例外が原因アプリ 'NSInvalidArgumentException'、理由を取得

-(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]; 


} 

//:「 - [__NSCFNumber _fastCStringContents]:インスタンスに送信された認識できないセレクタ0x175426460 ' *ファーストスローコールスタック:

答えて

0

NS辞書はNSNumberを返します。 matchAtLongNowを呼び出す場所を確認します。文字列が必要なNSNumbersがあります。

+0

返信いただきありがとうございます。私は弦があることを確認した。 –

0

ジオサーチが必要なように聞こえますが、これにはいくつかのしきい値が含まれています。私達はちょうどuserLocationに辞書で緯度/経度値から距離を作り出す機能を必要とするuserLocationから最も遠いに最も近いからソートされた辞書が含まれています

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:私はこのような何かに再定式たいです...

- (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]; 
} 
関連する問題