Android Google地图上overlay显示位置,路线

做了下手机google地图上的定位和图层标签的显示,先学学基础,把想要显示的标签搞定。

好,首先是定位,这次用到的定位只是简单的传入经纬度,然后显示标签,画上图层就达到目的啦,Geoconding什么的根据地址名字来确定的话这次先不用。

定位用到的是LocationManager,根据它的成员方法requestLocationUpdates如果我们的位置在一定范围内改变了,或者经过一定时间了,那就重新标记了。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new TestLocationListener(myloctionController,mapOverlays, firstOverlay));

这个函数中的最后一个参数要求是一个LocationListener对象,我就新建了一个类,实现了LocationListener

package myOverlay;
/*
 * 这个类用来定位mylocation,有一个位置监听器的接口,一旦位置发生改变之后就让图标也变化
 *
 *
 */
import java.util.ArrayList;
import java.util.List;

import com.google.Android.maps.GeoPoint;
import com.google.android.maps.MapController;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;

public class TestLocationListener implements LocationListener{

private List<Overlay> mapOverlays=null;
 private MylocationOverlay firstOverlay=null;
 private MapController myloctionController=null;//用于定位移动的动画效果
 
 public TestLocationListener(MapController myloctionController2, List<Overlay> mapOverlays,
   MylocationOverlay firstOverlay) {
  super();
  this.mapOverlays = mapOverlays;
  this.firstOverlay = firstOverlay;
  this.myloctionController=myloctionController2;
 }

//位置发生变化的时候就让定位自己的图标也发生相应的变化
 @Override
 public void onLocationChanged(Location location) {
  double lon=0,lat=0;
  lon=location.getLongitude();
  lat=location.getLatitude();
  System.out.println("现在的设置的位置经度为:  "+location.getLongitude());
  System.out.println("现在的设置的位置纬度为:  "+location.getLatitude());
  
        //创建一个GeoPoint对象,通过经纬度,指定地图上的一个点
  //GeoPoint point = new GeoPoint(19240000,-99120000);
        GeoPoint point = new GeoPoint((int) (lat*1000000),(int) (lon*1000000));
        System.out.println(point);
        //创建一个OverLayItem对象,一个对象代表一个标记
        OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
        //将创建好的OverLayItem对象,添加到firstOverlay对象当中
        firstOverlay.addOverlay(overlayitem);
        //将firstOverlay对象,添加到mapOverlays当中
        mapOverlays.add(firstOverlay);
      //以动画的形式以一定的速度移动到某个点
        myloctionController.animateTo(point);
        myloctionController.setZoom(10);//设置放大的级别
        myloctionController.setCenter(point);//估计是中间设置吧
        System.out.println("成功将用图标显示我现在的位置");
 }

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

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

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

}

现在就用到一个函数,只要覆盖它就行。因为一些参数设置都是默认的,所以只要位置改变了就会调用onLocationChanged,来绘制地图上的图层,也就是我们自己的位置的这个图层。这个类没什么好讲的,重点也不在这里,讲讲图层的实现。

首先获得当前位置的左边点,函数的参数中自动传入了,很轻松拿到;

接着生成标记对象,这里一个overlayitem就是一个标记咯,加上些提示信息,定位中总共也就一个标记;

然后把标记添加到firstOverlay这个图层中;

再要做的就是把图层放在手机原来的图层里咯,mapOverlays就是在主窗口中获得了手机原来的图层,传参到这里。只要添加进去就搞定了。

要是要弄的稍微动感点就加个myloctionController咯。定位就OK了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwyjzx.html