我有一个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.
答案 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
答案 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;
}