Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 朝向GPS点的方向和距离的计算_Android_Location_Android Gps_Compass Geolocation - Fatal编程技术网

Android 朝向GPS点的方向和距离的计算

Android 朝向GPS点的方向和距离的计算,android,location,android-gps,compass-geolocation,Android,Location,Android Gps,Compass Geolocation,我想尝试创建一种方法,使其朝向我以前通过定位获得的GPS点。 我希望导航器光标能够检测我相对于到达点移动的位置,并计算我与该点之间的距离。 我已经试着阅读和阅读一些教程,但我什么都解决不了。 我已经使用LocationManager.getLastKnownLocation获取了我的目标GPS位置,但是当我尝试使用distanceTo()计算我与目标位置之间的距离时,光标并不指向该点,而是指向一个随机点给了我很高的值,因为我在花园里测试,我走了几米远,他给了我更高的距离 我不明白的另一件事是,为

我想尝试创建一种方法,使其朝向我以前通过定位获得的GPS点。 我希望导航器光标能够检测我相对于到达点移动的位置,并计算我与该点之间的距离。 我已经试着阅读和阅读一些教程,但我什么都解决不了。 我已经使用LocationManager.getLastKnownLocation获取了我的目标GPS位置,但是当我尝试使用distanceTo()计算我与目标位置之间的距离时,光标并不指向该点,而是指向一个随机点给了我很高的值,因为我在花园里测试,我走了几米远,他给了我更高的距离

我不明白的另一件事是,为什么收购LocationManager.getLastKnownLocation不是立即的,而是给了我价值​​超过20秒,并多次单击按钮以接收数据。 然后使用onLocationChanged检查更改以获取新的GPS点,我使用这些点与目标GPS进行比较,以计算光标角度和距离

下面是我到目前为止编写的代码,但它不起作用

导入androidx.appcompat.app.appcompat活动;
导入androidx.core.app.ActivityCompat;
导入android.Manifest;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.hardware.GeomagneticField;
导入android.location.Criteria;
导入android.location.location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.view.animation.animation;
导入android.view.animation.RotateAnimation;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.Objects;
导入静态android.Manifest.permission.ACCESS\u FINE\u位置;
导入静态android.location.LocationManager.GPS\U提供程序;
导入静态com.douale.testcompass2.R.*;
导入静态com.douale.testcompass2.R.layout.*;
公共类MainActivity扩展AppCompatActivity实现LocationListener{
//这是一个很好的应用程序
公共影像视图;
公共双轨车,ULongitude,TargetLat,TargetLong;
语境;
地点经理地点经理;
公共文本视图tvHeading,tvDestPos;
公共按钮btDestPos;
公共布尔值Trovato=false;
私有浮动相关度=0f;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(活动主视图);
Log.d(“MyApp”、“Sono dentro il mio OnCreate”);
requestPermission();
//阿利佐·格利·奥格蒂
btDestPos=(按钮)findViewById(id.BTposdest);
Log.d(“MyApp”,“OnCreate:Ho-to-btDestPos”);
tvDestPos=(TextView)findViewById(id.TXposdest);
Log.d(“MyApp”,“OnCreate:Ho-to-tvDestPos”);
tvHeading=(TextView)findViewById(id.TXHeading);
Log.d(“MyApp”,“OnCreate:Ho-to-tvHeading”);
imageView=(imageView)findViewById(id.compass);
Log.d(“MyApp”,“OnCreate:Ho-to-imageView”);
//Ilizzo IL MIO位置经理
locationManager=(locationManager)getSystemService(位置服务);
标准=新标准();
最终字符串bestProvider=String.valueOf(locationManager.getBestProvider(criteria,true)).toString();
Log.d(“MyApp”,“OnCreate:Dopo la richiesta di posizione bestProvider:”+bestProvider);
Log.d(“MyApp”,“OnCreate:Ho-to-locationManager”);
Log.d(“MyApp”,“OnCreate:Gestisco-il-click-sul-bottone”);
btDestPos.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(!Objects.requirennoull(locationManager).isProviderEnabled(GPS\U提供程序)){
Toast.makeText(getApplicationContext(),“非FUNZIONA IL LOCATIONMANAGER”,Toast.LENGTH_LONG.show();
Log.d(“MyApp”,“OnCreate:btDestPos.setOnClickListener:if(!Objects.requirennoull(locationManager).isProvidered(GPS_提供程序))ènegative:”);
}else if(locationManager.isProviderEnabled(GPS_提供程序)){
Log.d(“MyApp”、“OnCreate:btDestPos.setOnClickListener:else if”(locationManager.isProvidered(GPS_PROVIDER)èpositive”);
Log.d(“MyApp”、“OnCreate:btDestPos.setOnClickListener:else if(locationManager.isProvidered(GPS_PROVIDER)lancio il metodo getLocationProdoct();”);
getLocationProdoct();
Log.d(“MyApp”、“OnCreate:btDestPos.setOnClickListener:else if(locationManager.isProvidered(GPS_PROVIDER)esco dal metodo getLocationProdoct();”);
如果(特罗瓦托){
if(ULongitude==null | | ULongitude==null){
Toast.makeText(getApplicationContext(),“Riprova la posizione nonèstata Trovata”,Toast.LENGTH_LONG.show();
Log.v(“MyApp”,“OkRes_活动:(ULongitude==0 | | ULongitude==0):Recepero i campi纬度e经度…”+“\n”+
纬度:“+1度+”\n+
“经度:”+ULongitude);
}
}否则{
Log.v(“MyApp”,“OkRes_活动:(Trovato==true):(ULongitude==0 | | ULongitude==0):Il valoreèstato Trovato Recepero i campi纬度e经度…”+“\n”+
纬度:“+1度+”\n+
“经度:”+ULongitude);