GPS传感器得到的数据为d°m′s″,进行数据传输时需要转化为秒*100的一个比较大的数据,转换公式如下:
数据data=(度*3600+分*60+秒)*100 。
比如30°24′18.12″转化为秒是:30°24′18.12″=30*3600+24*60+18.12=109458.12″,变为int值传递则乘以100变为10945812。
程序中得到这个数据之后需要得到实际的度、分、秒,只需要将数据data/(3600*100)取整得到度,(data-度*3600*100)/(60*100) 取整得到分,(data-度*3600*100-分*60*100)/100得到秒。传感器速度单位为cm/h(厘米/小时),需要转换为km/h(公里/小时)
注意:实际google地图中的经纬度一般是°格式,比如30.40503333°。那么直接将数据data/(3600*100)便得到经纬度信息。
代码实现如下:
/**
* if get the LatLng data from the GPS sensor, maybe, the data has calculated by
* this formula: data=(degree*3600+ minute*60+second)*100. tips:the latitude is
* form of degree°minute′second″.
* so we can get the degree,minute,second from next function
*/
private String getDmsFun(double data) {
int degree = (int) (data / 360000);
int minute = (int) ((data - degree * 360000) / 6000);
int second = (int) ((data - degree * 360000 - minute * 6000) / 100);
return String.valueOf(degree) + "°" + String.valueOf(minute) + "′"
+ String.valueOf(second) + "″";
}
private double bigSecond2Degree(double bigSecond) {
return bigSecond / 360000.0;
}
private double centimeter2kilometer(double speed) {
return speed / 100000.0;
}
Gps数据类:
public class GPSDataModel {
/**
* this is latitude
*/
double latitude;
/**
* this is longitude
*/
double longitude;
/**
* this is speed,
* get the data unit is (cm/h),so may change the unit to (km/h)
*/
double speed;
public GPSDataModel() {
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = bigSecond2Degree(latitude);
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = bigSecond2Degree(longitude);
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = centimeter2kilometer(speed);
}
}