纬度经度格式错误DDDMM.MMMM 2832.3396N

时间:2013-08-26 10:38:15

标签: javascript c gps embedded latitude-longitude

我有一个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.

6 个答案:

答案 0 :(得分:17)

要将其转换为十进制格式,我们首先保留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

See this Link Would help you

答案 1 :(得分:2)

1分钟= 60秒,所以.3644分钟= .3644 * 60 = 21.86秒。

答案 2 :(得分:2)

该值不是数字,而是连接的度数和分钟数。您需要小心,因为纬度值可能只有两个数字(即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传递给此功能,并在需要时使用它来确定合适的+/-符号。

答案 3 :(得分:1)

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

替换纬度和经度。

答案 4 :(得分:1)

按照算法进行转换。

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))  

答案 5 :(得分:0)

我刚刚用 Java 解决了这个问题。我正在使用 IOT 设备,它以纬度(即(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;

}