我有一种需要使用GPS技术的情况。
当人走路时,我需要找到两点之间的距离。
当该人开始行走时,他会点击Start button
,当他停止时,他会点击stop button
之后应该告诉他
1.时间 2.在Kms旅行。 3.从哪里到哪里(地名)例如:a到b
我需要谷歌地图吗?
我在这里看到了link代码,以获取当前位置,该位置为我提供纬度经度。
请帮助您了解如何使用
**
**
这是我正在使用的代码
private EditText editTextShowLocation;
private Button buttonGetLocation;
private ProgressBar progress;
private LocationManager locManager;
private LocationListener locListener = new MyLocationListener();
private boolean gps_enabled = false;
private boolean network_enabled = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editTextShowLocation = (EditText) findViewById(R.id.editTextShowLocation);
progress = (ProgressBar) findViewById(R.id.progressBar1);
progress.setVisibility(View.GONE);
buttonGetLocation = (Button) findViewById(R.id.buttonGetLocation);
buttonGetLocation.setOnClickListener(this);
locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
}
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
// exceptions will be thrown if provider is not permitted.
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
// don't start listeners if no provider is enabled
if (!gps_enabled && !network_enabled) {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Attention!");
builder.setMessage("Sorry, location is not determined. Please enable location providers");
builder.setPositiveButton("OK", this);
builder.setNeutralButton("Cancel", this);
builder.create().show();
progress.setVisibility(View.GONE);
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
}
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// This needs to stop getting the location data and save the battery power.
locManager.removeUpdates(locListener);
String londitude = "Londitude: " + location.getLongitude();
String latitude = "Latitude: " + location.getLatitude();
String altitiude = "Altitiude: " + location.getAltitude();
String accuracy = "Accuracy: " + location.getAccuracy();
String time = "Time: " + location.getTime();
editTextShowLocation.setText(londitude + "\n" + latitude + "\n" + altitiude + "\n" + accuracy + "\n" + time);
progress.setVisibility(View.GONE);
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_NEUTRAL){
editTextShowLocation.setText("Sorry, location is not determined. To fix this please enable location providers");
}else if (which == DialogInterface.BUTTON_POSITIVE) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
}
显示我从emulator control.
在此我手动输入经度和纬度的详细信息
转到window->showview->other->emulator control
进行模拟器测试
但我需要的是我将有两个edittext,我输入地名(A)和(B)
它应该给我距离
请帮助
答案 0 :(得分:2)
尝试使用Google Distance Matrix Api
https://developers.google.com/maps/documentation/distancematrix/
答案 1 :(得分:0)
时间利用简单的日期对象并比较startTime和endTime。
(OR)
您可以使用以下代码获得近似距离
double distance;
Location locationA = new Location("point A");
locationA.setLatitude(latA);
locationA.setLongitude(lngA);
Location locationB = new Location("point B");
locationB.setLatitude(latB);
LocationB.setLongitude(lngB);
distance = locationA.distanceTo(locationB);
答案 2 :(得分:0)
您可以使用currentTimeinMillis()来获取旅程的开始和结束时间。
然后,您可以使用解释here的公式来查找距离,最后您必须使用反向地理编码服务(例如Nominatim)才能从GPS获取地点的地址坐标。
话虽这么说,距离公式会得到一点与下一点之间的距离,而不是实际位移。如果这不是您需要的,而是您想要实际行进的距离,则需要以较短的间隔计算该值。
答案 3 :(得分:0)
我想这个问题就是行走......
你是走在街上,还是像乌鸦一样飞过?
如果它是街道,并且您连接到网络,请使用google的api ..它根据两点计算路由并返回XML ..应该很容易弄明白。
如果它是乌鸦..那么,只做(a * a)+(b * b)=(c * c)这是到目前为止更容易.. 你可以让你的用户点击大转弯。或者你可以保持一个可运行的每10秒钟从它们开始时运行,并绘制点数。还是a * a + b * b = c * c但只是一堆步骤。
当然你必须在服务中运行它。如果选择我会选择那个选项。您可以根据行驶速度调整循环时间。更快的是更小的停顿。 它对您的dataplan要求较少。
<小时/> 修改
进行简单的数学运算
void addDistance()
{
newX = ...
newY = ...
deltaX = absolute(m_oldX - newX)
deltaY = absolute(m_oldY = newY)
m_distance += sqrt(deltaX^2 + deltaY^2);
m_oldX = newX;
m_oldY = newY;
}
void startOver()
{
newX = ...
newY = ...
m_distance = 0;
m_oldX = newX;
m_oldY = newY;
}
答案 4 :(得分:0)
为了获得2点(A到B)之间的距离,在android中有一个名为 distanceTo 的函数。
例如 double distance = startLocation.distanceTo(finishLocation)/ 1000;
npinti表示您可以使用currentTimeinMillis()或者也可以使用Timer并在用户点击开始按钮时将其显示给用户。就像秒表一样。
<强>被修改强>
放置A - 纽约
地方B - 巴黎
在这种情况下,您首先需要将字符串转换为位置(即您需要纬度和经度)。为此,您使用了地理编码的概念。
List<Address> foundGeocode = null;
foundGeocode = new Geocoder(this).getFromLocationName("address here", 1);
foundGeocode.get(0).getLatitude(); //getting latitude
foundGeocode.get(0).getLongitude();//getting longitude
之后,您可以计算distanceTo方法的距离。 希望这会有所帮助......