15

我有一个 gps 模块,它以一种奇怪的格式为我提供经度纬度。

DDDMM.MMMM

如用户手册上所写,度* 100 + 分钟。

据我所知,它是度分秒,秒在 0-59 之间,高于这将增加分钟。但这是在小数位上给出分钟。这是否意味着 1/1000 分钟?

eg. 07717.3644 E
077 --> degrees
17 --> minutes
3644 --> ?
E --> Direction

另外我将如何将其转换为十进制,我正在使用公式

decimal = degrees + minutes/60 + seconds/3600.
4

6 回答 6

26

要将其转换为十进制格式,我们首先保留 DD 部分,然后简单地将 MM.MMM 除以 60 以固定十进制格式的 MMM 部分。

43. (48.225/60), -79.(59.074/60)  

43.(0.80375), -79.(0.98456)  

43.80375, -79.98456    

在你的情况下

eg. 07717.3644 E is the DDDMM.MMMM format

077 --> degrees
17 --> minutes
.3644 --> minutes equals to sec/60


decimal = degrees + minutes/60 

decimal = 77 + (17.3644 / 60)  

decimal = 77.28941

看到这个链接会帮助你

于 2013-08-26T11:07:34.727 回答
5

按照算法进行转换。

var t = "7523.7983" // (DDMM.MMMM)
var g = "03412.9873" //(DDDMM.MMMM)

function lat(t){
  return (Number(t.slice(0,2)) + (Number(t.slice(2,9))/60))
}

function lng(g) {
  return (Number(g.slice(0,3)) + (Number(g.slice(3,10))/60))
}

console.log(lat(t)) 
console.log(lng(g))  

于 2018-02-20T11:31:30.303 回答
3

该值不是数字,而是串联的度数和分钟数字符串。您需要小心,因为纬度值可能只有两个度数(即 DDMM.MMMM),因此如果您使用字符串处理来分隔值,则必须考虑到这一点。然而,long 和 lat 都可以按如下数字方式处理:

double GpsEncodingToDegrees( char* gpsencoding )
{
    double a = strtod( gpsencoding, 0 ) ;
    double d = (int)a / 100 ;
    a -= d * 100 ;
    return d + (a / 60) ;
}

您还可以将半球字符 E/W 或 N/S 传递给此函数,并在需要时使用它来确定适当的 +/- 符号。

于 2013-08-27T11:40:43.977 回答
2

1 分钟 = 60 秒,因此 0.3644 分钟 = .3644 * 60 = 21.86 秒。

于 2013-08-26T10:57:55.883 回答
2

Python中的简单实现:

latitude = <ddmm.mmmm>
longitude = <dddmm.mmmmm>

# Ricava i gradi della latitudine e longitudine
lat_degree = int(latitude / 100);
lng_degree = int(longitude / 100);

# Ricava i minuti della latitudine e longitudine
lat_mm_mmmm = latitude % 100
lng_mm_mmmmm = longitude % 100

# Converte il formato di rappresentazione
converted_latitude = lat_degree + (lat_mm_mmmm / 60)
converted_longitude = lng_degree + (lng_mm_mmmmm / 60)

print converted_latitude, converted_longitude

替换纬度和对数。

于 2016-04-11T15:04:19.647 回答
0

我刚刚用Java解决了这个问题。我正在使用物联网设备,它以纬度即(3231.5462N)和经度即(07406.6945E)的形式发送位置。我使用简单的公式对它们进行了转换,将 DD 部分用于纬度,将 DDD 用于经度,并在我的情况下应用 Double 转换,您可以应用所需的内容并将字符串转换为 Double 并在开始时自动删除 0,如我的情况,然后将其余的值除以 60 并取两者的总和。

public  double[] convertLocationToLatAndLong(String latitude,String longitude){
double lat=(Double.parseDouble(latitude.substring(0, 2)))+(Double.parseDouble(latitude.substring(2, latitude.length()))/60);
double lon=(Double.parseDouble(longitude.substring(0, 3)))+(Double.parseDouble(longitude.substring(3, longitude.length()))/60);

double[] latAndLong= {lat,lon};
return latAndLong;

}

于 2021-05-19T12:36:41.317 回答