如何将度、分、秒转换为十进制坐标

19

寻找一个Java工具。如果您能告诉我如何使用GeoTools库来完成它,那就更好了。


4个回答

25
“Decimal coordinates”是指纬度和经度(也称为十进制度数)吗?如果是,那么你要做的事情非常简单: 给定一个DMS(度,分,秒)坐标,例如W87°43′41″,使用以下方法将其转换为十进制度数非常容易: 计算总秒数,43′41″ = (43*60 + 41) = 2621秒。分数部分是总秒数除以3600。2621 / 3600 = ~0.728056 将小数度添加到整数度以生成最终结果:87 + 0.728056 = 87.728056 由于它是一个西经坐标,所以取反结果。最终结果是-87.728056。 来源:维基百科。这里有一个Javascript工具可以做同样的事情。

23

这取决于您的源格式。如果它已经分割为度(d),分(m)和秒(s),则您的算法如下:

(假设d可以是正数或负数)

dd = Math.signum(d) * (Math.abs(d) + (m / 60.0) + (s / 3600.0));

如果字符串中混杂的话,通常的格式为:

"ddd.mmss"

因此,使用正则表达式或 String.substring() 进行解析以获取 m 和 s。

转换回去的方法是:

d = (int)dd;  // Truncate the decimals
t1 = (dd - d) * 60;
m = (int)t1;
s = (t1 - m) * 60;

10
**begin  23°26’49”**
degrees = 23
minutes = 26
seconds = 49
decimal = ((minutes * 60)+seconds) / (60*60))
answer = degrees + decimal
**finish  23.44694444**

谢谢。已在http://www.sunearthtools.com/dp/tools/conversion.php上进行测试,它可以正常工作。 - KhoaHA

0

简而言之

fun getNormal(value: String): Double {
    val degree = value.substringBefore("°").toDouble()
    val minute = value.substringAfter("°").substringBefore("'").toDouble()
    val second = value.substringAfter("'").trim().toDouble()
    return sign(degree) * (abs(degree) + (minute / 60.0) + (second / 3600.0))
}

getNormal("34° 31' 24.924") 返回 34.52359


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接