2012-04-12 6 views
2

Ich versuche zwei Strecken zwischen zwei Standorten zu ziehen, dafür hole ich alle Punkte aus Google Map API Web Service. (JSON Ausgabeformat). Nach dem Parsen JSON Daten und Aufnahmepunkte habe ich alle Punkte auf NSMutableArray gespeichert. Jedes Array von Index enthält diesen Typ von Werten.Wie werden Latitude- und Logitude-Werte von der JSON-Ausgabe getrennt?

"<+10.90180969, +76.19167328> +/- 0.00m (speed -1.00 mps/course -1.00) @ 12/04/12 10:18:10 AM India Standard Time", 

Jetzt möchte ich Breiten- und Längenwerte trennen.

latitude : +10.90180969 
longitude : +76.19167328 

Wie erhalten Sie diese Werte von jedem Array-Index?

+0

was der Antwort Art ist Das? Kannst du mir die ganze Saite zeigen? – mChopsey

+1

Tun Sie einfach eine Zeichenfolge Manipulation Mann. – tipycalFlow

+0

Angenommen, ich habe einen NSSstring, NSString, der den Wert "<+10.90180969, +76.19167328> +/- 0.00m (Geschwindigkeit -1.00 mps/Kurs -1.00) @ 12/04/12 10:18:10 AM India Standard Time" hält , dann, wie zu trennen +10.90180969 und +76.19167328 Werte – Musthafa

Antwort

1

Hier ist etwas in einer sehr rohen Form zu tun .: und ich denke, es ist eine Brute-Lösung

NSString* str =  @"<+10.90180969, +76.19167328> +/- 0.00m (speed -1.00 mps course -1.00) @ 12/04/12 10:18:10 AM India Standard Time"; 
NSArray* arr = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 

if ([arr count] > 1) { 
    NSString* coordinateStr = [arr objectAtIndex:1];   
    NSArray* arrCoordinate = [coordinateStr componentsSeparatedByString:@","];   
    NSLog(@"%@",arrCoordinate); 
} 

am Saite es zeigt, dass Sie geben die Beschreibung eines CLLocation-Objekts "someObject" aus. Sie können auch auf den Breiten- und Längengrad wie

CLLocationCoordinate2D location = [someObject coordinate]; 
    NSLog(@" \nLatitude: %.6f \nLongitude: %.6f",location.latitude,location.longitude); 
zugreifen

OutPut wird: Breitengrad: 28,621873 Längengrad: 77,388897

aber das wird Sie nicht die Zeichen geben das heißt „+“ oder „-“

Hoffe, es hilft.

+0

Danke ..., wähle ich die zweite Methode. – Musthafa

+0

Musthafa, Sie können immer auf die Entwicklerdokumentation und den Beispielcode zugreifen, die im Entwicklerportal developer.apple.com verfügbar sind und das ist immer hilfreich :) zusammen mit StackOverflow. Freue mich zu helfen –

2

Dies ist nur ein Weg, dies

NSString* str = @"<+10.90180969, +76.19167328> +/- 0.00m (speed -1.00 mps/course -1.00) @ 12/04/12 10:18:10 AM India Standard Time";//you already have this string. 
str = (NSString*)[[str componentsSeparatedByString:@">"] objectAtIndex:0]; 
// after above performed step, str equals "<+10.90180969, +76.19167328" 
str = [str substringFromIndex:1]; 
// after above performed step, str equals "+10.90180969, +76.19167328" 
NSString* strLat = (NSString*)[[str componentsSeparatedByString:@","] objectAtIndex:0]; 
NSString* strLon = (NSString*)[[str componentsSeparatedByString:@","] objectAtIndex:1]; 
// after above performed step, strLat equals "+10.90180969" 
// after above performed step, strLon equals " +76.19167328" 
strLon = [strLon substringFromIndex:1];//<-- to remove the extra space at index=0 
+0

Ich wähle die obige Antwort zweite – Musthafa

0

Dies ist, wie ich es in meinem Code zu tun - versucht, Ihren Fall anzupassen:

Datei-Header:

@interface CLLocation (String) 

+ (instancetype) clLocationWithString:(NSString *)location; 

@end 

Und die Umsetzung:

@implementation CLLocation (String) 

+ (instancetype)clLocationWithString:(NSString *)location 
{ 
    static NSRegularExpression *staticRegex; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     NSError *error = NULL; 
     //ex: <41.081445,-81.519005> ... 
    staticRegex = [NSRegularExpression regularExpressionWithPattern:@"(\\-?\\d+\\.?\\d*)+" 
                  options:NSRegularExpressionCaseInsensitive 
                   error:&error]; 
    }); 

    NSArray *matches = [staticRegex matchesInString:location options:NSMatchingReportCompletion range:NSMakeRange(0, location.length)]; 

    if (matches.count >= 2) { 
     return [[CLLocation alloc] initWithLatitude:[[location substringWithRange:((NSTextCheckingResult *)[matches objectAtIndex:0]).range] doubleValue] 
              longitude:[[location substringWithRange:((NSTextCheckingResult *)[matches objectAtIndex:1]).range] doubleValue]]; 
    } else { 
     return [[CLLocation alloc] init]; 
    } 
}