在android中反向地理编码

时间:2011-03-18 07:12:13

标签: android geocoding reverse-geocoding

在下面的代码中,我收到以下异常

  

没有服务AVAIALBLE

public class ds extends Activity {
    LocationManager locationManager;
    double lati,longi;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String location_context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager)getSystemService(location_context);
        testProviders();
    }

    public void testProviders() {
        TextView tv = (TextView)findViewById(R.id.myTextView);
        StringBuilder sb = new StringBuilder("Enabled Providers:");
        List<String> providers = locationManager.getProviders(true);
        for (String provider : providers) 
        {
            locationManager.requestLocationUpdates(provider, 1000, 0,new LocationListener()
            {
                public void onLocationChanged(Location location) {}
                public void onProviderDisabled(String provider){}
                public void onProviderEnabled(String provider){}
                public void onStatusChanged(String provider, int status,
                    Bundle extras){}
            });
            sb.append("\n").append(provider).append(":");
            Location location = locationManager.getLastKnownLocation(provider);
            if (location != null)
            {
                double lat = location.getLatitude();
                double lng = location.getLongitude();
                sb.append(lat).append(",").append(lng);
                lati=lat;
                longi=lng;

                Geocoder gcd = new Geocoder(ds.this, Locale.getDefault());
                List<Address> addresses;
                try {
                    addresses = gcd.getFromLocation(lati, longi, 1);
                    if (addresses.size() > 0) 
                } catch (IOException e) {
                    Toast.makeText(ds.this, "hi exception", 5000).show();
                }


            } 
            else {
                sb.append("No Location");
            }
        }
        tv.setText(sb);
    }
}

3 个答案:

答案 0 :(得分:0)

请在以下问题上查看我的答案

Geocoder.getFromLocation throws IOException on Android emulator

这是Android模拟器API级别8的问题

答案 1 :(得分:0)

您可以使用google api从地址check this post to more help.

获取lat / lan

答案 2 :(得分:0)

反向地理编码的代码,您可以根据您的要求传递经度和纬度......

public class MainActivity extends FragmentActivity {

        static final LatLng DELHI = new LatLng(39.6985207, -104.8954315);
        GoogleMap map;
        Button btn_geo;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activitymain);

            map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
            btn_geo=(Button)findViewById(R.id.btn_getAddress);
            map.addMarker(new MarkerOptions().position(DELHI).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
            // Move the camera instantly to hamburg with a zoom of 15.
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(DELHI, 15));

            // Zoom in, animating the camera.
            map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);

            btn_geo.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());
                    try {
                        if(myLocation.isPresent())
                        {
                            List<Address> addresses=null ;
                            addresses = myLocation.getFromLocation(39.6985207, -104.8954315, 1);
                            System.out.println(".................."+addresses);
                            StringBuilder sb = new StringBuilder();
                            if (addresses.size() > 0) 
                            {
                                Address address = addresses.get(0);
                                sb.append(address.getAddressLine(0)).append("\n");
                                sb.append(address.getLocality()).append("\n");
                                sb.append(address.getPostalCode()).append("\n");
                                sb.append(address.getCountryName());
                                Toast.makeText(getApplicationContext(), sb,Toast.LENGTH_LONG).show();
                            }
                        }
                        else
                            Toast.makeText(getApplicationContext(), "Not present",Toast.LENGTH_SHORT).show();
                    }
                    catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
        }
    }