使用Android版Google地图在100公里范围内的位置

时间:2015-03-17 13:30:22

标签: android google-maps google-maps-api-3 radius

我正在开发一个Android应用程序和Google地图,我在其中使用以下代码搜索特定地址。我想获取搜索地址的位置,如果它位于我所在位置的100公里范围内,如果超出该限制范围,则不会显示我。

我试图在100公里范围内获得搜索位置。

private class GeocoderTask extends AsyncTask<String, Void, List<Address>>{

                @Override
                protected List<Address> doInBackground(String... locationName) {
                    // Creating an instance of Geocoder class
                    Geocoder geocoder = new Geocoder(getBaseContext());
                    List<Address> addresses = null;

                    try {
                        //
                        //24.798406, 54.790448
                        //25.452403, 55.537519


                        // Getting a maximum of 3 Address that matches the input text
                        addresses = geocoder.getFromLocationName(locationName[0], 10,
                                24.861969, 54.857740,25.545368, 55.474347);//.getFromLocationName(locationName[0], 3);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    return addresses;

                }


                @Override
                protected void onPostExecute(List<Address> addresses) {         

                    if(addresses==null || addresses.size()==0){
                        Toast.makeText(getBaseContext(), "No Location found", Toast.LENGTH_SHORT).show();
                    }

                    // Clears all the existing markers on the map
                    mMap.clear();

                    // Adding Markers on Google Map for each matching address
                    for(int i=0;i<addresses.size();i++){                

                        Address address = (Address) addresses.get(i);

                        LatLng latLng;
                        // Creating an instance of GeoPoint, to display in Google Map
                        latLng = new LatLng(address.getLatitude(), address.getLongitude());

                        String addressText = String.format("%s, %s",
                                address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
                                address.getCountryName());

                        markerOptions = new MarkerOptions();
                        markerOptions.position(latLng);
                       // markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.flag));
                        markerOptions.title(addressText);

                        mMap.addMarker(markerOptions);

                        // Locate the first location
                        if(i==0)                        
                            mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));  
                    }           
                }       
            }

1 个答案:

答案 0 :(得分:3)

您可以使用此代码计算距离;这里,距离以米为单位。您可以调用此函数并检查位置在范围内的位置。

private boolean checkForArea(int rad, LatLng fromPosition, LatLng toPosition) {
        Location locationA = new Location("point A");
        locationA.setLatitude(fromPosition.latitude);
        locationA.setLongitude(fromPosition.longitude);
        Location locationB = new Location("point B");
        locationB.setLatitude(toPosition.latitude);
        locationB.setLongitude(toPosition.longitude);
        int distance = (int) locationA.distanceTo(locationB);
        if (distance / 1000 <= rad)
            return true;
        else
            return false;
    }