7

XML ファイルに経度と緯度のリストがあります。lat と lon を文字列として出力できますが、文字列を double に変換すると 0 になります。

これが私のコードです:

NSString *latstring = [[NSString alloc] initWithString:theList.lat] ;
NSString *lonstring = [[NSString alloc] initWithString:theList.lon];
NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);

double latdouble = [latstring doubleValue];
double londouble = [lonstring doubleValue];
NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);

「latstring」と「lonstring」をログに記録すると正しい座標が得られますが、「latdouble」と「londouble」をログに記録すると0になります。

座標に文字列を使用できないため、マップビューでそれらを使用できるように、緯​​度と経度の値を double にする必要があります。

これにはおそらく非常に簡単な説明がありますが、私はobjective-cにかなり慣れていないため、これに対する解決策を見つけることができません。

どんな助けでも大歓迎です。

4

2 に答える 2

16

問題を解決しました。フィリップが言ったように文字列の長さを数えた後、長さは文字列より1文字長いことがわかりました. そのため、「latstring」と「lonstring」と同じ文字列である間に別の文字列を追加しましたが、0 ではなくインデックス 1 で始まったため、座標値の前にあったはずの文字を切り捨てました。これはその後、完全に double に変換されました。

使用されるコードは次のとおりです。

NSString *latstring = theList.lat;
NSString *lonstring = theList.lon;
NSLog(@"%@, %@ wooo", latstring, lonstring);

NSString *latcutstring = [latstring substringFromIndex:1];
NSLog(@"cut lat: %@", latcutstring);
NSString *loncutstring = [lonstring substringFromIndex:1];
NSLog(@"cut lon: %@", loncutstring);

double latdouble = [latcutstring doubleValue];
NSLog(@"latdouble: %f", latdouble);
double londouble = [loncutstring doubleValue];
NSLog(@"londouble: %f", londouble);

助けてくれた Phillip Mills と Tobol に感謝します。

編集:2012年11月

クレイグとフィリップが言ったように、それは問題を引き起こす空白であり、必要な文字を切り取らないようにするためのより安全な方法を見つけました。

NSString *trimlat = [theList.lat stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *trimlon = [theList.lon stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    //Convert to double
    double latdouble = [trimlat doubleValue];
    double londouble = [trimlon doubleValue];

    //Create coordinate
    CLLocationCoordinate2D coord = {(latdouble),(londouble)};
于 2012-07-25T18:49:02.587 に答える
1

これらの文字列はフォーマッターではないと思います。数字の前に空白以外のものはありません。緯度と経度は、「dd.ddddddd」のような形式にする必要があります。

    NSString *works = @"  12.5431 jdty";
    NSString *doesntWorks = @"E 43.4345";
    NSString *latstring = [[NSString alloc] initWithString:works] ;
    NSString *lonstring = [[NSString alloc] initWithString:doesntWorks];
    NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);

    double latdouble = [latstring doubleValue];
    double londouble = [lonstring doubleValue];
    NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);
于 2012-07-25T11:05:58.953 に答える