LatLng.latitude和LatLng.longitude无法使用,因为不是特定值

时间:2016-10-20 16:22:34

标签: java android google-maps

在行" Location.distanceBetween(LatLng.latitude,LatLng.longitude,circle.getCenter()。latitude,circle.getCenter()。经度,距离);" LatLng.latitude和LatLng.longitude不能使用,因为不是特定值。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{//DirectionFinderListener {

private GoogleMap mMap;
//private Button btnFindPath;
//private EditText etOrigin;
//private EditText etDestination;
private List<Marker> originMarkers = new ArrayList<>();
private List<Marker> destinationMarkers = new ArrayList<>();
// private List<Marker>  = new ArrayList<>();

Circle shape;
Marker marker;
//private List<Polyline> polylinePaths = new ArrayList<>();
private ProgressDialog progressDialog;
long minDistance = 15;

float[] distance = new float[2];

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    //btnFindPath = (Button) findViewById(R.id.btnFindPath);
    //etOrigin = (EditText) findViewById(R.id.etOrigin);
    //etDestination = (EditText) findViewById(R.id.etDestination);

    /*btnFindPath.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendRequest();
        }
    });*/
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    LatLng hcmus = new LatLng(3.719639, 103.123972); //3.719639, 103.123972
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(hcmus, 18));
    originMarkers.add(mMap.addMarker(new MarkerOptions()
            .title("IBM CoE")
            .position(hcmus)));

    Circle circle = mMap.addCircle(new CircleOptions()
            .center(new LatLng(3.719639, 103.123972))
            .radius(10000)
            .strokeColor(Color.RED)
            .fillColor(Color.BLUE));

    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();

    private final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            longitude = location.getLongitude();
            latitude = location.getLatitude();
        }
    };

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);


    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mMap.setMyLocationEnabled(true);

    Location.distanceBetween(LatLng.latitude, LatLng.longitude, circle.getCenter().latitude,circle.getCenter().longitude,distance);

    if ( distance[0] <= circle.getRadius())
    {
        Toast.makeText(this, "You are in radius location", Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(this, "You are not in radius location", Toast.LENGTH_LONG).show();
    }

    /*if (destinationMarkers == ) { //equation

        Intent main = new Intent(MapsActivity.this, MainActivity.class);
        startActivity(main);
    }
     else {   Toast.makeText(this, "You are not in radius location", Toast.LENGTH_LONG).show();
    }*/
}

如何获取当前位置纬度和经度

1 个答案:

答案 0 :(得分:1)

请参阅distanceBetween方法的doc参数。它产生两个位置之间的距离,并且它采用这样的参数,

startLatitude   double: the starting latitude
startLongitude  double: the starting longitude
endLatitude     double: the ending latitude
endLongitude    double: the ending longitude
results         float: an array of floats to hold the results

如上所述,前两个参数保存第一个位置对象的纬度和经度值。在您的情况下,您引用了默认的Location对象的纬度和经度属性,这些属性并不代表任何位置值。

我可以看到你已经获得当前位置

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();

所以,这一行应该是这样的,

Location.distanceBetween(latitude, longitude, circle.getCenter().latitude,circle.getCenter().longitude, distance);