2012-03-28 1 views
3

J'utilise Google Maps pour trouver l'emplacement sur une adresse fournie.Android: comment capturer une image de l'emplacement GPS

Je veux stocker l'image de l'emplacement que je reçois de Google Maps onClick.

Est-ce que quelqu'un sait comment faire cela?

Voici mon code pour google map & stockage onClick

public class TestGPSActivity extends MapActivity 
{  
MapView mapView; 
private MapController mc; 
private GeoPoint p; 
private double lng; 
private double lat; 
private Address address; 
private View mCurrentUrlMask; 
private File imageFile; 

class MapOverlay extends com.google.android.maps.Overlay 
{ 
    @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.pin);    
     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()); 

     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_LONG).show(); 
     } 
     catch (IOException e) {     
      e.printStackTrace(); 
     } 
     return true; 
    } 
    else     
     return false; 
}    


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gps_main); 

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

    mapView.setDrawingCacheEnabled(true); 


    // image naming and path to include sd card appending name you choose for file 
    String mPath = Environment.getExternalStorageDirectory().toString() + "/" + GPSActivity.DIRECTORY; 

    // create bitmap screen capture 
    Bitmap bitmap; 

    View v1 = mapView.getRootView(); 

    v1.setDrawingCacheEnabled(true); 

    bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
    v1.setDrawingCacheEnabled(false); 

    OutputStream fout = null; 
    imageFile = new File(DemoCamGPSActivity.DIRECTORY); 

    try { 
     fout = new FileOutputStream(imageFile); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
     fout.flush(); 
     fout.close(); 

    } catch (FileNotFoundException e) { 
     System.out.println("in file not found"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 



    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
    View zoomView = mapView.getZoomControls(); 


    zoomLayout.addView(zoomView, 
      new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, 
        LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true); 

    mc = mapView.getController(); 

    Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
    List<Address> addresses = null; 
    try { 

     addresses = geocoder.getFromLocationName(getIntent().getStringExtra("address"), 1); 

    } catch (IOException e) { 



    } 

    try{ 
     address = addresses.get(0); 
    } 
    catch (Exception e) { 
     flash("Unable to locate given address"); 
     startActivity(new Intent(this, GPSMainActivity.class)); 
     finish(); 
    } 
    try{ 
     lng = address.getLongitude(); 
     lat = address.getLatitude(); 

     GPSActivity.writeLog(getIntent().getStringExtra("address") +" GPS co-ordibnates : "+lat+" , "+lng); 
    }catch (Exception e) { 


    } 


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

    mc.animateTo(p); 
    mc.setZoom(17); 

    //---Add a location marker--- 
    MapOverlay mapOverlay = new MapOverlay(); 
    List<Overlay> listOfOverlays = mapView.getOverlays(); 
    listOfOverlays.clear(); 
    listOfOverlays.add(mapOverlay);   

    mapView.invalidate(); 
    mapView.invalidate();   
} 
private void flash(String data) { 
    Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); 
} 


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

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     startActivity(new Intent(this, GPSMainActivity.class)); 
     finish(); 
    } 

    return super.onKeyDown(keyCode, event); 
}  
} 

Je reçois cette erreur

03-28 16:54:12.580: E/AndroidRuntime(30010): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mentha.Demo/com.mentha.Demo.TestGPSActivity}: java.lang.NullPointerException 

Je reçois l'erreur sur ce code perticular

// create bitmap screen capture 
    Bitmap bitmap; 

    View v1 = mapView.getRootView(); 

    v1.setDrawingCacheEnabled(true); 

    bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
    v1.setDrawingCacheEnabled(false); 

    OutputStream fout = null; 
    imageFile = new File(DemoCamGPSActivity.DIRECTORY); 

    try { 
     fout = new FileOutputStream(imageFile); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
     fout.flush(); 
     fout.close(); 

    } catch (FileNotFoundException e) { 
     System.out.println("in file not found"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    Uri uri = Uri.fromFile(new File(mPath)); 

S'il vous plaît aider moi à l'avance .. merci d'avance

+1

une capture d'écran de la vue actuelle –

+0

@imrankhan Je suis en train de prendre le screenshot de vue particulier, mais pas .. S'il vous plaît voir mon code .. J'ai mis à jour la question avec le code .. Merci d'avance –

+0

NullPointer sur quelle ligne? – Ferdau

Répondre

2

J'ai résolu ce problème. J'avais un problème avec la capture d'image de l'emplacement GPS. Je viens de créer le menu de capture, dans lequel, après avoir téléchargé l'emplacement GPS, on peut capturer l'image en cliquant sur le bouton du menu de capture.

Voici le code complet pour capturer la capture d'écran de l'emplacement GPS & comment trouver l'emplacement GPS.

public class TestGPSActivity extends MapActivity 
{  
MapView mapView; 
private MapController mc; 
private GeoPoint p; 
private double lng; 
private double lat; 
private Address address; 

//google Map 
class MapOverlay extends com.google.android.maps.Overlay 
{ 
    @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.pin);    
     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()); 

     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_LONG).show(); 
     } 
     catch (IOException e) {     
      e.printStackTrace(); 
     } 
     return true; 
    } 
    else     
     return false; 
}    

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gps_main); 

    mapView = (MapView) findViewById(R.id.mapView); 
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
      new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, 
        LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true); 

    mc = mapView.getController(); 

    Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
    List<Address> addresses = null; 
    try { 

     addresses = geocoder.getFromLocationName(getIntent().getStringExtra("address"), 1); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try{ 
     address = addresses.get(0); 
    } 
    catch (Exception e) { 
     flash("Unable to locate given address"); 
     startActivity(new Intent(this, GPSMainActivity.class)); 
     finish(); 
    } 
    try{ 
     //stores the Longitude n lattitude in log file 
     lng = address.getLongitude(); 
     lat = address.getLatitude(); 

     //for writing into log.text 
     HomeActivity.writeLog(getIntent().getStringExtra("address") +" GPS co-ordibnates : "+lat+" , "+lng); 

    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    p = new GeoPoint(
      (int) (lat * 1E6), 
      (int) (lng * 1E6)); 

    mc.animateTo(p); 
    mc.setZoom(17); 

    //---Add a location marker--- 
    MapOverlay mapOverlay = new MapOverlay(); 
    List<Overlay> listOfOverlays = mapView.getOverlays(); 
    listOfOverlays.clear(); 
    listOfOverlays.add(mapOverlay);   

    mapView.invalidate(); 

    //mapView.invalidate();  
} 

//ScreenShot of Image 
private void screenshot() { 
    try{ 
     String mapDIR = HomeActivity.DIRECTORY+"/Image"; 

     File f = new File(mapDIR); 

     if(! f.exists()) 
     { 
      f.mkdir(); 
     } 

     MapView v1 = (MapView)findViewById(R.id.mapView); 
     v1.setDrawingCacheEnabled(true); 

     Bitmap b = Bitmap.createBitmap(v1.getDrawingCache()); 

     try 
     { 
      FileOutputStream fos = new FileOutputStream(mapDIR+"/"+System.currentTimeMillis()+".png"); 
      b.compress(CompressFormat.PNG, 50, fos); 
      fos.close(); 

     } catch (FileNotFoundException e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
     v1.setDrawingCacheEnabled(false); // clear drawing cache 
    }catch (Exception e) { 
     Toast.makeText(getApplicationContext(), e.getMessage(),Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } 

} 

private void flash(String data) { 
    Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); 
} 

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

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     startActivity(new Intent(this, GPSMainActivity.class)); 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
}  
//menu button 
@Override 
public boolean onCreateOptionsMenu(android.view.Menu menu) 
{ 
    super.onCreateOptionsMenu(menu); 

    menu.add(0, 1, 0 , "Exit"); 
    menu.add(0, 2, 0 , "Capture Image"); 



    return true; 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) 
{ 
    switch(item.getItemId()) 
    { 
    case 1: 
     startActivity(new Intent(this, GPSMainActivity.class)); 
     finish(); 
     break; 
    case 2: 
     screenshot(); 
     Toast.makeText(getApplicationContext(), "Captured Map", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
    return super.onMenuItemSelected(featureId, item); 
} 
} 

Merci pour tous .. Espérons que cela aidera quelqu'un ..

+0

passez par ce blog - http: //findgpslocation.blogspot.dans/vous obtiendrez des informations sur la façon de trouver l'emplacement GPS. –

0

Je crois que this réponse vous aiderait

+1

shereef - Merci Je reviendrai à Vous après confirmation. –

+0

plz voir mon code .. merci –

3

Pourriez en utilisant des cartes statiques être la solution que vous cherchez?

https://developers.google.com/maps/documentation/staticmaps/

+0

son donner tous les détails de google map .. Je veux savoir comment je peux mettre en œuvre dans mon code .. ?? comment dois-je stocker l'image en format jpeg ou png .. ??? s'il vous plaît aidez-moi .. merci –

+0

upadted mon code .. plz vérifier. merci –

+0

Il suffit d'utiliser cette URL: http://maps.googleapis.com/maps/api/staticmap?center=ghent&size=512x512&maptype=roadmap&sensor=false et changer 'ghent' avec l'adresse ou essayer avec les coordonnées, il suffit de lire le lien Je vous ai donné correctement ... Vous pouvez ajouter des marqueurs et des trucs ... Juste google comment enregistrer une image à partir d'une URL. – Ferdau

Questions connexes