首頁>Program>source

我正在使用Google地圖在提供的地址上查詢位置.

我想儲存从Google Maps onClick获得的位置圖像

有人知道怎麼做吗?

這是我的Google Map和儲存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);
}    
 }

我收到此錯誤

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

我在此垂直密碼上出現錯誤

  // 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));

請帮帮我..在此先感谢

最新回復
  • 5月前
    1 #

    使用靜態地圖是否可以作為您正在尋找的解決方案?

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

  • 5月前
    2 #

    我已经解決了這个問题.我在捕获GPS位置的圖像時遇到問题.我刚刚建立了捕获選單,在其中上傳了GPS位置後,可以通過單击捕获選單按钮来捕获圖像。

    這是捕获GPS位置螢幕截圖以及如何查詢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);
    }
    }
    

    感谢所有人。希望這對您有所帮助。

  • 5月前
    3 #

    我相信這个答案將對您有所帮助

  • javafx:FXMLLoader getController返迴NULL?
  • performance:如何减少例如p:ajax的請求有效負載 p:dataTable分頁