- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我试图计算一个人步行的距离。为此,我创建了一个 LocationHelper 类,它应该每 30 秒或 10 米获取一次当前 GeoPoint。我已经有一个方法可以返回我知道有效的两个 GeoPoints 之间的距离(以米为单位),因为我在以前的项目中使用过它。我还有一个名为 WalkActivity 的 Activity ,我在 LocationHelper 中调用方法 getDistance() 并将其显示在 TextView 中,该 TextView 在计时器的帮助下每 30 秒更新一次。请参阅下面的代码。
当我运行我的应用程序时,没有任何显示。无论我走多远,它都会说“你已经走了 0.0 米”。我没有收到任何错误消息。你认为我做错了什么?我搜索并查看了许多示例,但没有发现可以告诉我这里出了什么问题。
我希望这不是一个愚蠢的问题,欢迎任何帮助:)
package Controller;
import com.google.android.maps.GeoPoint;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
/**
* Location Helper Class that handles creation of the Location Manager and Location Listener.
*
*/
public class LocationHelper{
private double distance = 0;
GeoPoint geoPointA;
GeoPoint geoPointB;
//location manager and listener
private LocationManager locationManager;
private MyLocationListener locationListener;
/**
* Constructor for LocationHelper
*
* @param context - The context of the calling activity.
*/
public LocationHelper(Context context){
//setup the location manager
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
//create the location listener
locationListener = new MyLocationListener();
//setup a callback for when the GPS gets a lock and we receive data
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 10, locationListener);
}
/**
* Receiving notifications from the Location Manager when they are sent.
*
*/
public class MyLocationListener implements LocationListener {
/**
* called when the location service reports a change in location
*/
public void onLocationChanged(Location location) {
if (geoPointB == null){
geoPointB = new GeoPoint((int) location.getLatitude(), (int) location.getLongitude());
}
//Getting the current GeoPoint.
geoPointA = new GeoPoint((int) location.getLatitude(), (int) location.getLongitude());
//Calculating the distance in meters
distance = distance + nu.placebo.whatsup.util.Geodetics.distance(geoPointA, geoPointB);
//Making current GeoPoint the previous GeoPoint
geoPointB = geoPointA;
}
//called when the provider is disabled
public void onProviderDisabled(String provider) {}
//called when the provider is enabled
public void onProviderEnabled(String provider) {}
//called when the provider changes state
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
/**
* Stop updates from the Location Service.
*/
public void killLocationServices(){
locationManager.removeUpdates(locationListener);
}
/**
* Get Distance
*
* @return - The current distance walked.
*/
public double getDistance(){
return distance;
}
/**
* Check if a location has been found yet.
* @return - True if a location has been acquired. False otherwise.
*/
public Boolean gpsEnabled(){
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
}
package edu.chl.dat255.sofiase.readyforapet;
import java.util.Timer;
import java.util.TimerTask;
import Controller.LocationHelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class WalkActivity extends Activity{
private TextView displayDistance;
private int delay = 0;
private int period = 30000;
private Timer timer;
Handler handler = new Handler();
private LocationHelper location;
/**
* On Create method
*
* @param savedInstanceState - bundle
*/
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView(R.layout.walkactivity);
location = new LocationHelper(this);
//Checking if the GPS is enabled, else let the user start GPS if wanted.
if (location.gpsEnabled()){
Toast.makeText(this, "GPS is Enabled on your devide", Toast.LENGTH_SHORT).show();
}
else{
showGPSDisabledAlert();
}
Button startWalking = (Button) findViewById(R.id.startwalking);
startWalking.setOnClickListener(new OnClickListener() {
/**
* Method onClick for the start walking button
*
* @param v - View
*/
public void onClick (View v){
try{
timer = new Timer();
timer.schedule(myTimerTask, delay, period);
}
catch (Exception e){
e.printStackTrace();
}
}
}
);
Button stopWalking = (Button) findViewById(R.id.stopwalking);
stopWalking.setOnClickListener(new OnClickListener() {
/**
* Method onClick for the stop walking button
*
* @param v - View
*/
public void onClick (View v){
timer.cancel();
location.killLocationServices();
startActivity(new Intent(WalkActivity.this, PetActivity.class));
}
}
);
}
TimerTask myTimerTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
displayDistance = (TextView) findViewById(R.id.distance);
displayDistance.setText("You have walked " + location.getDistance() + " meters so far.");
}
});
}
};
/**
* If GPS is turned off, lets the user either choose to enable GPS or cancel.
*
*/
private void showGPSDisabledAlert(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("GPS is disabled on your device. Would you like to enable it?")
.setCancelable(false)
.setPositiveButton("Go to Settings Page To Enable GPS",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
}
最佳答案
代码中的一个问题是当您在 onLocationChanged(Location location)
中从 Location
创建 GeoPoint
时。 Location
类中的 getLatitude()
和 getLongitude()
都返回度数,但 GeoPoint
的构造函数采用微度数.这可能会搞砸您的距离计算,因为您的 GeoPoint
坐标可能是 42 度,在 GeoPoint
中结果是 .0000042 度。
此外,您可以尝试通过调试监视器或通过 Toast
消息以某种方式打印当前位置。这将极大地帮助调试过程,因为您可以从那里看到纬度/经度的变化和调试。
注意:我建议更新到 Maps v2,他们更改了很多类并添加了 LatLng
,这让事情更容易理解:)
关于android - 使用 GeoPoint 测量步行距离并向用户显示距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650929/
有点奇怪的问题。 我正在将数据从一项 Activity 传递到另一项 Activity - 特别是两个 GeoPoints。但是,正如我发现的那样,您不能传递 GeoPoint 类型的 ArrayLi
有没有办法获取汽车从一个点到另一个点的到达时间? 最佳答案 有一个 Google 网络服务。 http://code.google.com/apis/maps/documentation/distan
下面的代码有什么问题。它在此行抛出空指针异常(location.setLatitude(latitude);)。我试图在应用程序启动后立即画一个圆圈,这就是我从 onCreate 方法传递位置对象的原
我想搜索给定的 GeoPoint 是否在 Android 中用户当前位置提供的给定半径内。 javascript 中是否有类似 containsLatLang() 方法的方法? 最佳答案 尝试 thi
不确定发生了什么,但是当我尝试调用 GeoPoint 以获取设备当前的经度和纬度时,我收到通知“无法解析符号‘GeoPoint’。不太确定出了什么问题 private void getLastKnow
你好我有下一个奇怪的问题:我从 sql server 中恢复坐标为 double,将其转换为 float,然后转换为 intE6。我设置了两个打印件,一个在转换为 GeoPoint 之前,另一个在转换
我正在研究 osmdroid,并尝试做一些非常简单的事情,我以前在另一个 map 框架上做过,但我找不到如何在 OSMdroid 上做。我想在 map 上某处的 GeoPoint 上放置一个标记。到此
全部 - 我正在尝试获取用户的当前位置,而不是使用叠加项在 map 上显示该位置。我的问题是用户的位置作为一个位置进来,覆盖数组只接受 GeoPoints。这是我尝试过的: LocationListe
我在看似相当基本的用例时遇到了麻烦,但是我遇到了Kibana中的某些限制以及某些地理数据类型的问题。感觉就像是我走错了路。 我有一个相对较大的geo_point类型的点数据集(位置),并内置了 map
我正在尝试在Kibana中的任何 map 上查看我的geojson。 我的原始数据是具有坐标数组的地理多边形。 根据我的理解,ElasticSearch / Kibana无法可视化地理形状,因此我试图
我正在尝试将 Google map 中的一些地理位置数据放入数据库中。但是传递 GeoPoint 对象时,我似乎失去了大量的精度。 我得到一个 Intent 作为 onActivityResult 响
如何在 Firestore 数据库中搜索定义的距离半径内的位置纬度和经度。 示例数据库: COMPANIES - COMPANY 1 --Lat: 12345 --Long: 6789 - COMPA
我正在尝试将 GeoPoint 对象从其纬度和经度值反转为实际的字符串地址。 到目前为止,我将 GeoPoint 对象传递给一个方法,提取纬度和经度值,将地址存储在数组中,第一个地址设置为“add”字
我正在尝试存储使用该应用程序的用户的位置,但 Parse 不允许我在一个表中包含两列 GeoPoint 类型,即 user。我为每个用户存储 2 个地址。 目前,我创建了 4 列(address1Lo
在我的应用程序中,我试图计算一个人步行的距离。为此,我创建了一个 LocationHelper 类,它应该每 30 秒或 10 米获取一次当前 GeoPoint。我已经有一个方法可以返回我知道有效的两
我有不确定数量的 GeoPoint,我想将它们全部显示在谷歌地图上。我不知道该怎么做。 谢谢! 最佳答案 private void fitPoints(List points) { /
我有用户的位置(类位置)。和 GeoPoints 列表。有计算距离的功能吗?还是写自己的函数是唯一的解决办法? 最佳答案 我认为最简单的方法是在 Android Location 类中使用 dista
我在某些与笛卡尔坐标对应的搜索文档中有字段 x 和 y,我想执行径向搜索,如: query = '(x * x) + (y * y) < 100' 这相当于“找到距离 (0,0) 不到 10m 的所有
我一直在从 svn 创建我自己的 osmdroid apk,我已经结帐了。使用此方法:mappingdev.wordpress.com/2011/08/24/166/我已经能够从 Osmdroid 创
我想将 GeoPoint 转换为屏幕点,以便识别触摸事件上方的所有对象。所以,我试过这个: Projection projection = this.mapView.getProjection();
我是一名优秀的程序员,十分优秀!