设为首页 加入收藏

TOP

Android Google地图上overlay显示位置,路线(一)
2014-11-24 12:35:33 来源: 作者: 【 】 浏览:2
Tags:Android Google 地图 overlay 显示 位置 路线

好,首先是定位,这次用到的定位只是简单的传入经纬度,然后显示标签,画上图层就达到目的啦,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 android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;


public class TestLocationListener implements LocationListener{


private List mapOverlays=null;
private MylocationOverlay firstOverlay=null;
private MapController myloctionController=null;//用于定位移动的动画效果

public TestLocationListener(MapController myloctionController2, List 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了


对了,还有firstOverlay要说下,这是个MylocationOverla对象,继承ItemizedOverlay,是google map提供的api中查到的,是google map上面画图层需要用到的。还是老办法,继承了这个类那就覆盖里面的一些方法,其中要注意的就是因为其中有些参数是传进来的,所以在构造函数中要稍微处理下。(构造函数神马的还是用系统自动生成的比较好,免得弄错,上次就是因为调用super方法弄错了,找了半天才发现。。自己java基础真得检讨了。。)这个类中具体继承的类自己也可以查查看,像onTap()这个函数现在用到的就是点击标签的时候弹出窗口来显示一些信息咯。简单用法是这样,当然更复杂的以后用到了再说吧。


那么定位就OK了。



接下来说路线的显示。。方法倒是一样,一个是显示一个标签,一个是显示N个标签。。。

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 上移植 Ghostscript 9.04.. 下一篇Android中的MessageHandler机制

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)