gpt4 book ai didi

java - 如何在android中获取谷歌地图蓝点纬度和经度

转载 作者:行者123 更新时间:2023-12-01 11:24:39 24 4
gpt4 key购买 nike

我的目标是跟踪用户的位置并在到达标记位置时发出警报。所以首先我得到要到达的位置并标记它。然后我获取当前位置并将其与标记位置进行比较。但它不起作用。即使我将标记放置在当前位置。它没有给出 toast 消息。这是代码 -

public class MainActivity extends FragmentActivity implements LocationListener{
LocationManager locationManager;
String provider;
ToggleButton toggle;

public static double lat,lang,value1,value2,value3,value4;
public static String strlat,strlat1;
public LatLng loc,loc1;
public double latitude,longitude;
public static String strlang,strlang1 ;
Location location;

public LocationManager locationmanager;
// Google Map
private GoogleMap googleMap;
LocationListener Locationlistener;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

// Creating an empty criteria object
Criteria criteria = new Criteria();

// Getting the name of the provider that meets the criteria
provider = locationManager.getBestProvider(criteria, false);

if(provider!=null && !provider.equals("")){

// Get the location from the given provider
final Location location = locationManager.getLastKnownLocation(provider);

locationManager.requestLocationUpdates(provider, 1000, 1, this);

final Handler handler = new Handler();

Runnable runnable = new Runnable() {

public void run() {
if(location!=null){
lat = location.getLatitude();
lang = location.getLongitude();

value3 =Double.parseDouble(new DecimalFormat("##.##").format(lat));
value4 =Double.parseDouble(new DecimalFormat("##.##").format(lang));
strlat = String.valueOf(value3);
strlang = String.valueOf(value4);
loc1 =new LatLng(lat, lang);
if((value1 == value3) && (value2 == value4))
{
Toast.makeText(getApplicationContext(), "target reached", Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast.LENGTH_SHORT).show();

}
else{
Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
}
handler.postDelayed(this, 1000);
}
};

handler.post(runnable);
}

try {
// Loading map
initilizeMap();

// Changing map type
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
// googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
// googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);

// Showing / hiding your current location

googleMap.setMyLocationEnabled(true);

// Enable / Disable zooming controls
googleMap.getUiSettings().setZoomControlsEnabled(false);

// Enable / Disable my location button
googleMap.getUiSettings().setMyLocationButtonEnabled(true);

// Enable / Disable Compass icon
googleMap.getUiSettings().setCompassEnabled(true);

// Enable / Disable Rotate gesture
googleMap.getUiSettings().setRotateGesturesEnabled(true);

// Enable / Disable zooming functionality
googleMap.getUiSettings().setZoomGesturesEnabled(true);

// create marker
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));

} catch (Exception e) {
e.printStackTrace();
}

googleMap.setOnMapClickListener(new OnMapClickListener(){
public void onMapClick(LatLng point){
Toast.makeText(getBaseContext(),
point.latitude + ", " + point.longitude,
Toast.LENGTH_LONG).show();
latitude = point.latitude;
longitude = point.longitude;
value1 =Double.parseDouble(new DecimalFormat("##.##").format(latitude));
value2 =Double.parseDouble(new DecimalFormat("##.##").format(longitude));
strlat1 = String.valueOf(value1);
strlang1 = String.valueOf(value2);
loc=new LatLng(point.latitude, point.longitude);
MarkerOptions marker = new MarkerOptions().position(loc).title("Hello Maps ");

// adding marker
googleMap.addMarker(marker);

}
});
}

@Override
protected void onResume() {
super.onResume();
initilizeMap();
}

/**
* function to load map If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();

// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}

/*
* creating random position around a location for testing purpose only
*/

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}
}

最佳答案

您的代码中有一些错误。

您无法将坐标与 == 进行比较,因为在跟踪设备位置时,您永远不会获得完全匹配的纬度/经度坐标。您需要找出一个阈值,如果设备达到该阈值,则显示警报。

接下来,您没有使用 onLocationChanged() 回调,因此您只是在应用启动时查看一次当前位置。

看一下 my other answer here 中的代码这是关于确定设备是否在圆圈内。这是一个类似的问题。

因此,如果您将阈值设置为 10 米,并考虑设备距离目标位置 10 米以内时达到的目标,您将实现如下所示的 onLocationChanged() 方法:

@Override
public void onLocationChanged(Location location) {

float[] distance = new float[2];

Location.distanceBetween( location.getLatitude(), location.getLongitude(),
latitude, longitude, distance);

if( distance[0] < 10 ){
//target location reached
Toast.makeText(getApplicationContext(), "target reached", Toast.LENGTH_SHORT).show();
}
}

关于java - 如何在android中获取谷歌地图蓝点纬度和经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30929455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com