我正在使用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));
请帮帮我..在此先感谢
最新回答
- 2021-1-111 #
- 2021-1-112 #
我已经解决了这个问题.我在捕获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); } }
感谢所有人。希望这对您有所帮助。
- 2021-1-113 #
我相信这个答案将对您有所帮助
相关问题
- android:Google Maps Fragment在片段内返回nullandroidgooglemapsandroidfragments2021-01-11 23:00
- android:如何在Google Map API v2中处理地图的onTouch事件?androidgooglemapsandroidmapviewgooglemapsandroidapi22021-01-11 18:57
- 以编程方式打开/关闭Android设备GPSandroidandroidintentgps2021-01-10 22:56
- Android Google Maps,如何使每个Marker Infowindow打开不同的Activity?androidgooglemaps2021-01-10 13:57
- 如何实现超级地图之类的可拖动地图,使用更改位置进行更新androidgooglemaps2021-01-10 04:54
使用静态地图是否可以作为您正在寻找的解决方案?
https://developers.google.com/maps/documentation/staticmaps/