2012-10-19 66 views
0

在這個我的代碼我不明白我在我的代碼中犯了什麼錯誤。我沒有得到具有針點圖像的地圖視圖上的當前位置。如何獲取緯度並通過地理點。然後傳遞價值OverlayItem ..如何獲取當前在谷歌地圖上的位置在android

public class HelloGoogleMaps2 extends MapActivity implements LocationListener{ 

private LocationManager locationManager; 
private String provider; 
int lat; 
int lng; 
MyLocationOverlay myLocOverlay; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    MapView mapView = (MapView) findViewById(R.id.mapview);  
    mapView.setBuiltInZoomControls(true); 

    // Get the location manager 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // Define the criteria how to select the locatioin provider -> use 
    // default 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, true); 
    Location location = locationManager.getLastKnownLocation(provider); 

    Log.d("provider ","Provider "+provider); 
    Log.d("provider ","Provider "+provider); 
    Log.d("provider ","Provider "+provider); 
    Log.d("location","Location "+location); 

    Log.d("location","Location "+location);   

    Log.d("location","Location "+location); 
    // Initialize the location fields 
    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     onLocationChanged(location); 
    } else { 
     //latituteField.setText("Location not available"); 
    // longitudeField.setText("Location not available"); 
    } 


    List<Overlay> mapOverlays = mapView.getOverlays(); 

    myLocOverlay = new MyLocationOverlay(this, mapView); 
    mapOverlays.add(myLocOverlay); 
    myLocOverlay.enableMyLocation(); 
    GeoPoint point = new GeoPoint(lat, lng); 
    //  mc.setCenter(point); 
    //  mapView.invalidate(); 

    Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher); 
    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable); 

     GeoPoint point = new GeoPoint(lat,lng); 
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 


itemizedoverlay.addOverlay(overlayitem); 
mapOverlays.add(itemizedoverlay); 
} 


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

protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
     } 

     /* Remove the locationlistener updates when Activity is paused */ 
     // 
     protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
     } 

     // 
     public void onLocationChanged(Location location) { 
     lat = (int) (location.getLatitude()* 1E6); 
     lng = (int) (location.getLongitude()* 1E6); 
     // latituteField.setText(String.valueOf(lat)); 
     // longitudeField.setText(String.valueOf(lng)); 
     } 

     // 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

     } 

     // 
     public void onProviderEnabled(String provider) { 
     Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

     } 

     // 
     public void onProviderDisabled(String provider) { 
     Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
     } 

}

+0

有ü嘗試myLocationOverlay.runOnFirstFix(新的Runnable() \t \t {公共無效的run(){localLat = myLocationOverlay.getMyLocation()。getLatitudeE6()/ 1E6; \t \t \t localLng = myLocationOverlay.getMyLocation()。getLo ngitudeE6()/ 1E6;} \t \t});它可能會幫助你.. – Youddh

回答

3

參考這個鏈接,並按照它將同樣的步驟給出了結果:googlemaps for current location

+0

我想任何地方的任何地方不靜態。 –

+0

它不是靜態只要按照通過它遺囑代碼給出了帶標記的當前位置的整個項目 –

+0

K個第一我不明白,先生 –

0

我會建議MyLocationOverlay

疊印在地圖上繪製用戶的當前位置(和精度),和/或一個羅盤玫瑰插圖。子語句可以覆蓋dispatchTap()來處理當前位置上的點擊。
你會想從你的活動的Activity.onResume()方法調用enableMyLocation()和/或enableCompass(),很可能使這個疊加的特點。請記住在您的Activity的Activity.onPause()方法中調用相應的disableMyLocation()和/或disableCompass()以在後臺關閉更新。
(可選)構造函數還可以使用MapController並通過在地圖偏離時平移地圖來顯示「我的位置」點,並在位置或方向發生更改時通過View來查看View.postInvalidate()。
runnables可以在runOnFirstFix(java.lang.Runnable)中提供,以便在我們修復後立即運行。 (例如,這可能會在地圖中心,並放大顯示的位置)

你可以找到MyLocationOverlay一個很好的教程here

+0

先生我wnat動態經度和經度在GeoPoint –

2

正確的代碼是這樣的,但也添加uses-permissio,Internet,ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATION和WRITE_EXTERNAL_STORAGE .user-library。

public class GoogleMapActivity extends MapActivity implements LocationListener { 
    private final static String TAG = GoogleMapActivity.class.getSimpleName(); 
private MyItemizedOverlay itemizedOverlay; 

double lat; 
double lng; 
private String provider; 
private LocationManager locationManager; 

private MapView mapview; 

Drawable drawable; 



boolean sat = true; 
boolean dra = true; 

private MapController controller; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // fetch the map view from the layout 
    mapview = (MapView) findViewById(R.id.mapview); 

    // make available zoom controls 
    mapview.setBuiltInZoomControls(false); 

    // Use the location manager through GPS 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 

    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     lat = (double) (location.getLatitude()); 
     lng = (double) (location.getLongitude()); 

     Log.i(TAG, "Lattitude:" + lat); 
     Log.i(TAG, "Longitude:" + lng); 
     Toast.makeText(
       this, 
       "Current location:\nLatitude: " + lat + "\n" 
         + "Longitude: " + lng, Toast.LENGTH_LONG).show(); 
     // create geo point 
     GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 

     // get the MapController object 
     controller = mapview.getController(); 

     // animate to the desired point 
     controller.animateTo(point); 

     // set the map zoom to 13 
     // zoom 1 is top world view 
     controller.setZoom(13); 

     // invalidate the map in order to show changes 
     mapview.invalidate(); 

     drawable = this.getResources().getDrawable(R.drawable.ic_launcher); 
     OverlayItem overlayItem = new OverlayItem(point, "", ""); 
     itemizedOverlay = new MyItemizedOverlay(drawable, this); 
     itemizedOverlay.addOverlay(overlayItem); 
     mapview.getOverlays().add(itemizedOverlay); 
     mapview.invalidate(); 
    } else { 

     System.out.println("Location not avilable"); 
    } 

    // when the current location is found – stop listening for updates 
    // (preserves battery) 
    locationManager.removeUpdates(this); 

} 

@Override 
protected boolean isRouteDisplayed() { 
    return false; 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 

public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 

public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

public void onLocationChanged(Location location) { 

} 

public MapView getMapView() { 
    return this.mapview; 
} 


    } 

'//這裏是另一個項目覆蓋的

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> 
    { 



    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 


    public MyItemizedOverlay(Drawable defaultMarker, Context ctx){ 
     super(boundCenterBottom(defaultMarker)); 

    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

    public void clear() { 
     mOverlays.clear(); 
     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 

    @Override 
    protected boolean onTap(int index) { 
     return true; 
    } 

}

相關問題