2012-03-13 84 views
0

我已經寫了谷歌地圖的代碼它工作正常,並顯示位置also.Now我想要反向地理編碼,使我可以得到地形的經度座標&但它不管用。反向地理編碼不工作得到地址

我的代碼是

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

你是否收到任何錯誤? – Scorpion 2012-03-13 10:56:12

+0

嘗試getApplicationContext而不是getBaseContext ...它可以解決您的問題... – Scorpion 2012-03-13 10:57:27

+0

不顯示錯誤,但顯示經度和緯度座標不顯示任何位置名稱 – user1196969 2012-03-13 10:59:06

回答

2
// 
     // Write the location name. 
     // 

     try { 

      Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault()); 
      List<Address> addresses = geo.getFromLocation(latitude, longitude, 1); 
      if (addresses.isEmpty()) { 
       addres.setText("Waiting for Location"); 
      } 
      else { 
       if (addresses.size() > 0) { 
        addres.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName()); 
        //Toast.makeText(getApplicationContext(), "Address:- " + addresses.get(0).getFeatureName() + addresses.get(0).getAdminArea() + addresses.get(0).getLocality(), Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); // getFromLocation() may sometimes fail 
     } 

我已經寫在我的項目的代碼,它工作正常。 將此與您的代碼進行比較。希望這會幫助你....