android - 使用 GPS Android 在两个叠加项之间添加路径

标签 android

package ntryn.n;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class ntryn extends MapActivity
{
  private MapView mapView;
  private MapController mc;

  GeoPoint p, p2, p3, p4;
  List<Overlay> mapOverlays;
  Drawable drawable, drawable2 , drawable3, drawable4;
  HelloItemizedOverlay itemizedOverlay, itemizedOverlay2 , itemizedOverlay3, itemizedOverlay4;

  /** Called when the activity is first created. */

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

        /* Use the LocationManager class to obtain GPS locations */
        LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
        mapView = (MapView) findViewById(R.id.mapView);

        // enable Street view by default
        mapView.setStreetView(true);

        // enable to show Satellite view
        // mapView.setSatellite(true);

        // enable to show Traffic on map
        // mapView.setTraffic(true);
        mapView.setBuiltInZoomControls(true);

        mc = mapView.getController();
        //mapView.setStreetView(true);
        //mapView.setSatellite(true);
        mc.setZoom(12);
        addOverLays();
      }
      catch(Exception e){
        Log.d("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.getMessage());
      }
    }
  public void addOverLays(){
    String [] coordinates = {"30.084262490272522","31.33625864982605" ,"30.084123015403748", "51.5002" , "-0.1262","31.337149143218994"};
    double lat = 30.084262490272522, lat2 = 51.5002,lat3=29.987091422080994;
    double log = 31.33625864982605, log2 = -0.1262,log3=31.43909454345703;

    p = new GeoPoint((int) (lat * 1E6), (int) (log * 1E6));
    p2 = new GeoPoint( (int) (lat2 * 1e6), (int) (log2 * 1e6));
    p3=new GeoPoint( (int) (lat3 * 1e6), (int) (log3 * 1e6));
    mapOverlays = mapView.getOverlays();
    drawable = this.getResources().getDrawable(R.drawable.ballon);
    drawable2 = this.getResources().getDrawable(R.drawable.ballon);
    drawable3 = this.getResources().getDrawable(R.drawable.ballon);

    itemizedOverlay = new HelloItemizedOverlay(drawable,this);
    itemizedOverlay2 = new HelloItemizedOverlay(drawable2,this);
    itemizedOverlay3 = new HelloItemizedOverlay(drawable3,this);
    OverlayItem overlayitem = new OverlayItem(p, "Cairo", " over1");
    OverlayItem over2 = new OverlayItem(p2, "ulm", "over2");
    OverlayItem over3 = new OverlayItem(p3, "offff", "over3");

    itemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedOverlay);
    itemizedOverlay2.addOverlay(over2);
    mapOverlays.add(itemizedOverlay2);
    itemizedOverlay3.addOverlay(over3);
    mapOverlays.add(itemizedOverlay3);
    mc.setZoom(17);
    //mc.animateTo(p);
  }


  /* Class My Location Listener */
  public class MyLocationListener implements LocationListener
  {
    @Override
      public void onLocationChanged(Location loc)
      {
        GeoPoint point = new GeoPoint(    (int) (loc.getLatitude() * 1E6),
            (int) (loc.getLongitude() * 1E6));
        //DoubletoString(loc.getLatitude());
        //DoubletoString(loc.getLongitude());

        String Text = "My current location is: " +
          "Latitud ="+ loc.getLatitude() +
          "Longitud =" + loc.getLongitude();

        Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
        mc.animateTo(point);
      }



    private void DoubletoString(double latitude) {
      // TODO Auto-generated method stub
    }


    public void onProviderDisabled(String provider)
    {

      Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
    }


    public void onProviderEnabled(String provider)
    {
      Toast.makeText( getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show();
    }

    public void onStatusChanged(String provider, int status, Bundle extras) { }
    protected boolean isRouteDisplayed() {
      return false;
    }
  }/* End of Class MyLocationListener */

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

// i want to add path between this two overlay items

最佳答案

认为您想知道的是:如果您有一个包含两个 GeoPoints 的叠加层,您如何让叠加层在两点之间画一条线?

在 Overlay 子类的 draw() 方法中,您可以执行如下操作:

@Override
public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) 
{

  GeoPoint point1, point2;

  // Let's assume you've assigned values to these two GeoPoints now.

  Projection projection = mapView.getProjection();
  Point startingPoint = projection.toPixels(point1, null);
  Point endingPoint = projection.toPixels(point2, null);

  // Create the path containing the line between the two points.
  Path path = new Path();
  path.moveTo(startingPoint.x, startingPoint.y);
  path.lineTo(endingPoint.x, endingPoint.y);

  // Setup the paint.  You'd probably do this outside of the draw() method to be more efficient.
  Paint paint = new Paint();
  paint.setStyle(Paint.Style.STROKE);
  // Can set other paint characteristics, such as width, anti-alias, color, etc....

  // Draw the path!
  canvas.drawPath(path, paint);
}

关于android - 使用 GPS Android 在两个叠加项之间添加路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810898/

相关文章:

Android Studio 我不断收到 Gradle 错误 "The process cannot access the file because it is being used by another process"

android - Google Play 开发者分发协议(protocol)。在哪里查看并同意

java - 自定义 ListView 在 Fragment 中旋转时消失

android - 在 Android 上生成 HTTPGET REQUEST URI 的更简单方法

Android保存和恢复TextView文本ViewPager fragment

android - Android 中的新播放计费库是否需要 base64EncodedPublicKey?

Android 在电话簿更新时通知(Content Observer)

java - 应用程序如何从服务器检索小块数据?

android - 我如何全局安装 sbt 插件

android Android Support Repository vs Android Support Library vs Google Repository vs Google Play Services有什么区别