2013-01-17 163 views
0

我嘗試製作基於Android Maps API v2的位置應用。我爲我的定位點添加標記,併爲定位精度添加GroundOverlay圓。但GroundOverlay的setPosition函數略有不同。我找不到原因。Android GroundOverlay設置不正確的位置

 package com.example.locator; 

    import com.google.android.gms.maps.CameraUpdateFactory; 
    import com.google.android.gms.maps.GoogleMap; 
    import com.google.android.gms.maps.SupportMapFragment; 
    import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
    import com.google.android.gms.maps.model.GroundOverlay; 
    import com.google.android.gms.maps.model.GroundOverlayOptions; 
    import com.google.android.gms.maps.model.LatLng; 
    import com.google.android.gms.maps.model.Marker; 
    import com.google.android.gms.maps.model.MarkerOptions; 

    import android.location.Criteria; 
    import android.location.Location; 
    import android.location.LocationListener; 
    import android.location.LocationManager; 
    import android.os.Bundle; 
    import android.content.Context; 
    import android.support.v4.app.FragmentActivity; 
    import android.view.Menu; 

    public class MainActivity extends FragmentActivity implements LocationListener 
    { 
     GoogleMap mMap; 
     Location    lastLocation = null; 
     private LocationManager locationManager; 
     private String provider; 
     Marker curLoc = null; 
     GroundOverlay curLocCircle = null; 

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

      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(22.375675950685434, 29.83346939086914), 13)); 

      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

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

      if (location != null) { 
       onLocationChanged(location); 
      } else { 
       //empty 
      } 
      locationManager.requestLocationUpdates(provider, 400, 1, this); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.activity_main, menu); 
      return true; 
     } 


     public void onLocationChanged(Location location) { 
      if (location != null) { 

       if (null != curLoc) { 
        curLoc.remove(); 
       } 
       if (null != curLocCircle) { 
        curLocCircle.remove(); 
       } 

       LatLng loc = new LatLng(location.getLatitude(),location.getLongitude()); 
       curLoc = mMap.addMarker(new MarkerOptions() 
       .position(loc) 
       .title("My location") 
       .icon(BitmapDescriptorFactory.fromResource(R.drawable.location32))); 

       float accuracy = location.getAccuracy(); 

       curLocCircle = mMap.addGroundOverlay(new GroundOverlayOptions() 
         .image(BitmapDescriptorFactory 
           .fromResource(R.drawable.location_circle)) 
         .position(loc, accuracy) 
         .transparency(0) 
       ); 
       curLocCircle.setPosition(loc); 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 13)); 
      } 
     } 

     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

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

     } 

    } 

當我在調試暫停在線

mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 13)); 

手錶應用示出了這樣的數據:

curLocCircle.getPosition() lat/lng: (22.397815012772206,29.954818561673164) 
location.getLatitude()  22.397815 
location.getLongitude()  29.9548184 
loc       lat/lng: (22.397815,29.9548184) 

curLocCircle.getPosition()以某種方式示出了後setPosition兩種(LOC)不正確的位置寫入; 請幫助我。

回答

1

問題出在標記錨。 更改爲:

curLoc = mMap.addMarker(new MarkerOptions() 
.position(loc) 
.anchor(0.5f, 0.5f) 
.title("My location") 
.icon(BitmapDescriptorFactory.fromResource(R.drawable.location32))); 

,一切都很好。我仍然不明白爲什麼GroundOverlay的位置與定義的位置不同,但我不在乎。看上去不錯。