我从 GPS 设备获取纬度和经度。它们看起来像 21081686N,079030977E
如果我手动将它们转换为 21°08'16.86"N、79°03'09.77"E 并在谷歌地图上查看,位置几乎是正确的。
如何在java中转换这些值并准确地将它们转换为十进制?有没有 JAVA 库?
谢谢,
我从 GPS 设备获取纬度和经度。它们看起来像 21081686N,079030977E
如果我手动将它们转换为 21°08'16.86"N、79°03'09.77"E 并在谷歌地图上查看,位置几乎是正确的。
如何在java中转换这些值并准确地将它们转换为十进制?有没有 JAVA 库?
谢谢,
你不应该需要一个库,而只是将字符串分解成它们的组成部分。也许这会有所帮助。请注意,我不是Java 程序员,所以这种语法很可能是错误的。(也许将您的问题重新标记为 Java)
十进制我认为你的意思是十进制度而不是 ddd.mmss
// Object for Lat/Lon pair
public class LatLonDecimal
{
public float lat = 0.0;
public float lon = 0.0;
}
// Convert string e.g. "21081686N,079030977E" to Lat/Lon pair
public LatLonDecimal MyClass::convert(String latlon)
{
String[] parts = latlon.split(",");
LatLonDecimal position = new LatLonDecimal();
position.lat = convertPart(parts[0]);
position.lon = convertPart(parts[1]);
return position;
}
// Convert substring e.g. "21081686N" to decimal angle
private float MyClass::convertPart(String angle)
{
while (angle.length() < 10)
angle = StringBuffer(angle).insert(0, "0").toString();
int deg = Integer.parseInt( angle.substring(0,2) );
int min = Integer.parseInt( angle.substring(3,4) );
int sec = Integer.parseInt( angle.substring(5,6) );
int sub = Integer.parseInt( angle.substring(7,8) );
String hem = angle.substring(9);
float value = deg + min / 60.0f + sec / 3600.0f + sub / 360000.0f;
float sign = (hem == "S") ? -1.0 : 1.0; // negative southern hemisphere latitudes
return sign * value;
}