Android(Java)では、関数getlatitude()などを使用して現在の緯度と経度を取得すると、座標が10進形式で取得されます。
緯度:24.3454523経度:10.123450
これを度と小数の分に分けて、次のようにします。
緯度:40°42′51″ N経度:74°00′21″ W
小数から度に変換するには、次のようにします
String strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_DEGREES);
String strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_DEGREES);
参照は Android開発者サイト です。
編集
私は以下のものを試し、出力を得ました:
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_DEGREES);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_DEGREES);
OUTPUT : Long: 73.16584: Lat: 22.29924
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_SECONDS);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_SECONDS);
OUTPUT : Long: 73:9:57.03876: Lat: 22:17:57.26472
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_MINUTES);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_MINUTES);
OUTPUT : Long: 73:9.95065: Lat: 22:17.95441
要件ごとに異なるオプションを試してください
いくつかの数学でなければなりません:
(int)37.33168 => 37
37.33168 % 1 = 0.33168
0.33168 * 60 = 19.905 => 19
19.905 % 1 = 0.905
0.905 * 60 => 54
-122と同じ(負の値の場合は360を追加)
EDIT:わからないAPIがあるかもしれません。
Refer From:androidの緯度値から度数を見つける方法
すでに述べたように、いくつかの文字列操作が必要です。場所をDMS形式に変換し、秒の小数点以下の桁数を指定できるようにする次のヘルパークラスを作成しました。
import Android.location.Location;
import Android.support.annotation.NonNull;
public class LocationConverter {
public static String getLatitudeAsDMS(Location location, int decimalPlace){
String strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_SECONDS);
strLatitude = replaceDelimiters(strLatitude, decimalPlace);
strLatitude = strLatitude + " N";
return strLatitude;
}
public static String getLongitudeAsDMS(Location location, int decimalPlace){
String strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_SECONDS);
strLongitude = replaceDelimiters(strLongitude, decimalPlace);
strLongitude = strLongitude + " W";
return strLongitude;
}
@NonNull
private static String replaceDelimiters(String str, int decimalPlace) {
str = str.replaceFirst(":", "°");
str = str.replaceFirst(":", "'");
int pointIndex = str.indexOf(".");
int endIndex = pointIndex + 1 + decimalPlace;
if(endIndex < str.length()) {
str = str.substring(0, endIndex);
}
str = str + "\"";
return str;
}
}
これを使って
public static String getFormattedLocationInDegree(double latitude, double longitude) {
try {
int latSeconds = (int) Math.round(latitude * 3600);
int latDegrees = latSeconds / 3600;
latSeconds = Math.abs(latSeconds % 3600);
int latMinutes = latSeconds / 60;
latSeconds %= 60;
int longSeconds = (int) Math.round(longitude * 3600);
int longDegrees = longSeconds / 3600;
longSeconds = Math.abs(longSeconds % 3600);
int longMinutes = longSeconds / 60;
longSeconds %= 60;
String latDegree = latDegrees >= 0 ? "N" : "S";
String lonDegrees = longDegrees >= 0 ? "E" : "W";
return Math.abs(latDegrees) + "°" + latMinutes + "'" + latSeconds
+ "\"" + latDegree +" "+ Math.abs(longDegrees) + "°" + longMinutes
+ "'" + longSeconds + "\"" + lonDegrees;
} catch (Exception e) {
return ""+ String.format("%8.5f", latitude) + " "
+ String.format("%8.5f", longitude) ;
}
}
これは、マーティンウェバーの回答を基にしたKotlinバージョンです。また、正しい半球を設定します。 N、S、W、E
object LocationConverter {
fun latitudeAsDMS(latitude: Double, decimalPlace: Int): String {
val direction = if (latitude > 0) "N" else "S"
var strLatitude = Location.convert(latitude.absoluteValue, Location.FORMAT_SECONDS)
strLatitude = replaceDelimiters(strLatitude, decimalPlace)
strLatitude += " $direction"
return strLatitude
}
fun longitudeAsDMS(longitude: Double, decimalPlace: Int): String {
val direction = if (longitude > 0) "W" else "E"
var strLongitude = Location.convert(longitude.absoluteValue, Location.FORMAT_SECONDS)
strLongitude = replaceDelimiters(strLongitude, decimalPlace)
strLongitude += " $direction"
return strLongitude
}
private fun replaceDelimiters(str: String, decimalPlace: Int): String {
var str = str
str = str.replaceFirst(":".toRegex(), "°")
str = str.replaceFirst(":".toRegex(), "'")
val pointIndex = str.indexOf(".")
val endIndex = pointIndex + 1 + decimalPlace
if (endIndex < str.length) {
str = str.substring(0, endIndex)
}
str += "\""
return str
}
}
小数度の座標があります。この表現形式は「DEG」と呼ばれます
そして、DMSへのDEG(度、分、秒)が必要です(例:40°42′51″ N)、
変換。
これはJava http://en.wikipedia.org/wiki/Geographic_coordinate_conversion)でのコード実装
dEG座標値が0未満の場合、経度は西、緯度は南です。