0

この私のコードでは、コードのどこを間違えたのかわかりませんでした。ピンポイント画像を使用してマップビューで現在の場所を取得できませんでした。緯度と緯度を取得して Geo ポイントを渡す方法。次に、値 OverlayItem を渡します ..

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();
      }

}

4

2 に答える 2

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;
    }

}

于 2012-10-19T07:08:18.233 に答える
0

MyLocationOverlayをお勧めします。

ユーザーの現在地 (および精度) を地図上に描画するためのオーバーレイ、および/またはコンパス ローズ インセット。サブクラスは、dispatchTap() をオーバーライドして、現在の場所でのタップを処理できます。
おそらくアクティビティの Activity.onResume() メソッドから enableMyLocation() および/または enableCompass() を呼び出して、このオーバーレイの機能を有効にします。アクティビティの Activity.onPause() メソッドで対応する disableMyLocation() および/または disableCompass() を呼び出して、バックグラウンドでの更新をオフにすることを忘れないでください。
必要に応じて、コンストラクターは MapController を取得し、それを使用して、マップが画面外に移動するときにマップをパンすることで「現在地」ドットを表示したままにし、場所または方向が変更されたときに View を View.postInvalidate() に変更することもできます。
Runnables は runOnFirstFix(java.lang.Runnable) で提供され、修正が完了したらすぐに実行できます。(たとえば、これにより、マップを中央に配置し、ズームインして場所を表示できます)。

ここで MyLocationOverlay に関する優れたチュートリアルを見つけることができます

于 2012-10-19T05:16:50.587 に答える