2

座標を次のようにフォーマットする必要があります。

N 61° 14.5919'
E 23° 28.1751'

これで、私の座標は次のようになります。

61.145919
23.281751

私のコード:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    latitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
    longitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];   
}
4

3 に答える 3

0

この既存の質問には、最善の解決方法に関する提案と、それを実行できるライブラリが含まれているようです 。10進座標を度、分、秒、方向に変換します。

于 2012-08-09T07:42:52.610 に答える
0

それほど簡単ではありません。

あなたの例では、北に61度、14.5919分、秒はありません。(秒は分単位の小数で表されます。)

分をセンチ度に変換する必要があります。

61 + 14.5919 / 60は、61.31983になります。

Sは緯度に対して負の値になり、Wは経度に対して負の値になることを考慮する必要があります。
あなたの例にはたまたまN座標とE座標があり、正の値でうまく機能します。しかし、それを当然のことと考えることはできません。少なくとも、一般的な解決策が必要な場合はそうではありません。

したがって、緯度の場合:値が> = 0の場合はN、それ以外の場合はSです。度のコンマ後の値を切り捨てて、°を追加できます。次に、余りを取り、60を掛けて、分として使用し、th'を追加します。

.145919 * 60=8.75514-これがこの例の分の値です。結果はN61°8.75514'になるはずです。

あなたの質問はプログラミングの問題ではなく、背後にある数学に関連しているので、そこから始めましょう。

于 2012-08-09T07:53:04.503 に答える
0

次のコードを参照してください

int degreesLat = marker.position.latitude;
double decimalLat = fabs(marker.position.latitude-degreesLat);
int minutesLat = decimalLat*60;
double secondsLat = decimalLat*3600 - minutesLat*60;
于 2017-09-07T10:43:01.960 に答える