如何使用GPS以编程方式在黑莓手机上查找方向?
答案 0 :(得分:3)
使用GPS,最小分辨率为3米。如果您连续获取GPS读数并查找给定方向的重大变化,它将为您提供旅行方向的粗略估计,从而可以确定该人员可能面向的方向。
这不如使用磁罗盘好,目前市场上没有黑莓(Blackberrys?)。
某些GPS系统有两个GPS接收器以已知方向彼此相邻放置。他们可以根据比较两个GPS读数来计算设备面向的方向。他们称之为GPS指南针。此外,these systems太大而无法在此时包含在手机中。
您可以使用Blackberry API查找GPS信息,包括课程标准(getCourse方法)。它会给你一个指南针读数,其中0.00为北方。
答案 1 :(得分:1)
GPS数据不能给你方向,它只给你位置。如果你有两个位置(例如你在1秒前的位置,以及你现在的位置),大多数实现,包括黑莓,将为你提供从一个点到另一个点的方位(方向)。
Android设备和IIRC的iPHone 3Gs,带有数字磁罗盘可以为您提供方向。我不相信还有黑莓装有指南针。
答案 2 :(得分:0)
Blackberry使用的java micro中的 GPS API 将为您提供电话指向的方向。以下是GPS类的片段,可检索大部分基本GPS信息:
/**
* This will start the GPS
*/
public GPS() {
// Start getting GPS data
if (currentLocation()) {
// This is going to start to try and get me some data!
}
}
private boolean currentLocation() {
boolean retval = true;
try {
LocationProvider lp = LocationProvider.getInstance(null);
if (lp != null) {
lp.setLocationListener(new LocationListenerImpl(), interval, 1, 1);
} else {
// GPS is not supported, that sucks!
// Here you may want to use UiApplication.getUiApplication() and post a Dialog box saying that it does not work
retval = false;
}
} catch (LocationException e) {
System.out.println("Error: " + e.toString());
}
return retval;
}
private class LocationListenerImpl implements LocationListener {
public void locationUpdated(LocationProvider provider, Location location) {
if (location.isValid()) {
heading = location.getCourse();
longitude = location.getQualifiedCoordinates().getLongitude();
latitude = location.getQualifiedCoordinates().getLatitude();
altitude = location.getQualifiedCoordinates().getAltitude();
speed = location.getSpeed();
// This is to get the Number of Satellites
String NMEA_MIME = "application/X-jsr179-location-nmea";
satCountStr = location.getExtraInfo("satellites");
if (satCountStr == null) {
satCountStr = location.getExtraInfo(NMEA_MIME);
}
// this is to get the accuracy of the GPS Cords
QualifiedCoordinates qc = location.getQualifiedCoordinates();
accuracy = qc.getHorizontalAccuracy();
}
}
public void providerStateChanged(LocationProvider provider, int newState) {
// no-op
}
}