问题描述:使用成百上千个GPS坐标画路线,在android上的Google Map显示出来
之前我实现过一次,将每个点都遍历一边,然后在Google Map上画出来,但是由于
数据过多导致Google地图移动位置变得不流畅,每次移动Google地图都会调用draw
方法,那么程序一直遍历一直画图,花费大且不流畅。这次做了下优化,对只在屏幕内
的坐标画线。Google地图比之前流畅多了。
之前实现是画蓝色的线,这次实现只画红色的线。
临界条件是上一个点在屏幕内,下一个点在屏幕外。
运行环境:android版本2.3
package com.ui;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.Log;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
import com.model.Point;
public class RouteOverlay extends Overlay
{
final static String TAG = "DrawRoutePath";
private List<Point> points = new ArrayList<Point>();
private final Projection projection;
private final Paint paint;
public RouteOverlay(Projection projection) {
this.projection = projection;
// 设置画笔
paint = new Paint();
paint.setColor(Color.RED);
// 画笔的粗细
paint.setStrokeWidth(3);
paint.setAntiAlias(true);
paint.setStrokeMiter(3);
paint.setStyle(Style.STROKE);
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
if(shadow)
{
return;
}
// 这里使用系统提供的Path,Point来画图
Path drawingPath = new Path();
android.graphics.Point pixelPoint = new android.graphics.Point();
// 得到当前屏幕的高*宽
int width = canvas.getWidth();
int height = canvas.getHeight();
GeoPoint bottomRight = projection.fromPixels(width, height);
GeoPoint topLeft = projection.fromPixels(0, 0);
int maxLat = topLeft.getLatitudeE6();
int minLat = bottomRight.getLatitudeE6();
int minLon = topLeft.getLongitudeE6();
int maxLon = bottomRight.getLongitudeE6();
int pointsSize = points.size();
// 之前的布点是否在屏幕中
boolean preOutOfBounds = true;
// 之前的布点是否是新的一段路线的开始
boolean preWasMoveTo = true;
int moveToLat = Integer.MAX_VALUE;
int moveToLon = Integer.MIN_VALUE;
for(int i=0; i<pointsSize; i++)
{
double pointLat = points.get(i).getLat();
int pointLatInt = (int)(pointLat * 1E6);
double pointLon = points.get(i).getLon();
int pointLonInt = (int)(pointLon * 1E6);
// 判断该点有没有超出屏幕显示的范围
boolean currentOutOfBounds = pointLatInt < minLat || pointLatInt > maxLat ||
pointLonInt < minLon || pointLonInt > maxLon;
// 起点或者先前节点和当前节点都在屏幕之外,将preWasMoveTo设为true‘
// 当前坐标在屏幕外,并且之前坐标也在屏幕外,则设置preWasMoveTo为true
if(i == 0 || (preOutOfBounds && currentOutOfBounds))
{
moveToLat = pointLatInt;
moveToLon = pointLonInt;
preWasMoveTo = true;
}
else
{
if(preWasMoveTo)
{
GeoPoint geoPoint = new GeoPoint(moveToLat, moveToLon);
// 将经纬度转换为屏幕画布像素上的点(称之为布点)
projection.toPixels(geoPoint, pixelPoint);
// 设置point.x, point.y为新一段路线的开始
drawingPath.moveTo(pixelPoint.x, pixelPoint.y);
preWasMoveTo = false;
}
GeoPoint geoPoint = new GeoPoint(pointLatInt, pointLonInt);
projection.toPixels(geoPoint, pixelPoint);
// 将最后的布点与该布点之间画一条线
drawingPath.lineTo(pixelPoint.x, pixelPoint.y);
}
preOutOfBounds = currentOutOfBounds;
}
canvas.drawPath(drawingPath, paint);
}
public void setPoints(ArrayList<Point> points) {
this.points = points;
}
}
- 大小: 8.3 KB
分享到:
相关推荐
本人经过测试,没有问题,可以装到实体机上出去走一圈看看,坐标可以在http://www.earthol.com/上得到验证
最近因为公司需求,在做GPS定位,并且将获得的坐标显示在高德地图上,但是实际效果跟我们期望的是有偏差的。...下面这篇文章就详细介绍了Android中GPS坐标转换为高德地图坐标的方法,需要的朋友可以参考下。
Android应用源码之androidGPS及WIFI基站定位坐标源码_androidGPS
基于Android的GPS定位功能, 通过GPS定位获取地理位置坐标, 并且解析坐标信息向google请求坐标的详细位置(直接返回所在的位置信息,如城市名称等)
androidGPS及WIFI基站定位坐标源码.zip
安卓Android源码——androidGPS及WIFI基站定位坐标源码.zip
Android GPS转百度坐标demo。百度地图显示的坐标是自己的坐标系统,是经过加密后的百度坐标(位置隐私安全)。如果其他的坐标要到百度地图上显示就必须把该坐标转换成百度地图坐标。
gps 坐标偏移 纠正,arggis,google地图,高德地图
Android中,如何将火星坐标转换为标准的,已经讲标准的转换为火星坐标 Java语言编写,应用Android中GPS定位 略含说明文档.
Android应用源码之androidGPS及WIFI基站定位坐标源码.zip
完美封装的Android GPS定位(获取经纬度)管理类,详情见:http://blog.csdn.net/u012810020/article/details/52517976
第一:当使用GPS定位时,最好不要使用getLastKnownLocation方法获得当前位置对象Location,因为该对 象可以在onLocationChanged的参数中由系统给予(根据文档,getLastKnownLocation有2方面功能:1. 获取当前地理...
使用安卓原生包获取GPS数据并上传至数据库,得到的经纬度信息为google坐标系坐标,若要用来显示到百度、高德等地图上,需要使用其各自的方法进行转换。
主要为大家详细介绍了Android GPS获取当前经纬度坐标,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
androidGPS及WIFI基站定位坐标源码.zip源码资源下载androidGPS及WIFI基站定位坐标源码.zip源码资源下载
在实际应用中,通常会遇到通过 Gps 迒回的点坐标来定位到街道的信息的场景,本范例演示如何通过坐标点通过查询iserver 发布的 rest 地图服务,并定位到附近的街道。
安卓Android源码——androidGPS及WIFI基站定位坐标源码.rar
android 手机调用gps程序 获得经纬度的坐标,