反向地理编码无法获取地址

时间:2012-03-13 10:53:19

标签: android maps geocoding

我已经编写了谷歌地图的代码,它工作正常并显示位置。现在我正在尝试反向地理编码,以便我可以获得晶格和地址经度坐标,但它不起作用。

我的代码是

public class SelectLocation extends MapActivity {
MapView mapView; 
MapController mc;
GeoPoint p;
String coordinates[];


class MapOverlay extends com.google.android.maps.Overlay
{

    private GeoPoint p; 
    public MapOverlay(GeoPoint p){
        this.p = p;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
            boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow);                   

        //---translate the GeoPoint to screen pixels---
        Point screenPts = new Point();
        mapView.getProjection().toPixels(p, screenPts);

        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(
                getResources(), R.drawable.pushpin);            
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
        return true;
    }   

    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    {   
        //---when user lifts his finger---
        if (event.getAction() == 1) {                
            GeoPoint p = mapView.getProjection().fromPixels(
                    (int) event.getX(),
                    (int) event.getY());

            Toast.makeText(getBaseContext(), 
                    p.getLatitudeE6() / 1E6 + "," + 
                            p.getLongitudeE6() /1E6 , 
                            Toast.LENGTH_SHORT).show();
            Geocoder geoCoder = new Geocoder(
                    getBaseContext(), Locale.getDefault());
                try {
                    List<Address> addresses = geoCoder.getFromLocation(
                        p.getLatitudeE6()  / 1E6, 
                        p.getLongitudeE6() / 1E6, 1);

                    String add = "";
                    if (addresses.size() > 0) 
                    {
                        for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
                             i++)
                           add += addresses.get(0).getAddressLine(i) + "\n";
                    }

                    Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
                }
                catch (IOException e) {                
                    e.printStackTrace();
                }   
                return true;
            }
            mapView.getOverlays().clear();
            mapView.invalidate();
            mapView.getOverlays().add(new MapOverlay(p));
            Intent i=new Intent(SelectLocation.this,SetLocat.class);
            startActivity(i);

        return false;
    }        

}
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.selectlocation);

    mapView = (MapView) findViewById(R.id.mapView);

    mapView.setBuiltInZoomControls(true);

    mc = mapView.getController();
    String coordinates[] = {"1.352566007", "103.78921587"};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

    mc.animateTo(p);
    mc.setZoom(17);
    MapOverlay mapOverlay = new MapOverlay(p);


    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);        




}
/*protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}*/
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

}

0 个答案:

没有答案