`
westyi
  • 浏览: 76134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中Google地图折线层(Polyline)

阅读更多

我的工程在Android Google Map上需要划折线,发现API中竟然没有Polyline,分析Overlay类之后,自己做了一个折线类,使用起来跟Flex中的Polyline差 不多,其余不多说,直接贴上代码。

package westyi.map.overlay;

import java.util.List;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

/**
 * Goolge地图之Polyline实现
 * 
 * @author westyi
 */
public class Polyline extends Overlay {
	List<GeoPoint> points;
	Paint paint;

	/**
	 * 构造函数,使用GeoPoint List构造Polyline
	 * 
	 * @param points
	 *            GeoPoint点List
	 */
	public Polyline(List<GeoPoint> points) {
		this.points = points;
		paint = new Paint();
		paint.setColor(Color.BLUE);
		paint.setAlpha(150);
		paint.setAntiAlias(true);
		paint.setStyle(Paint.Style.FILL_AND_STROKE);
		paint.setStrokeWidth(4);
	}

	/**
	 * 使用GeoPoint点List和Paint对象来构造Polyline
	 * 
	 * @param points
	 *            GeoPoint点List,所有的拐点
	 * @param paint
	 *            Paint对象,用来控制划线样式
	 */
	public Polyline(List<GeoPoint> points, Paint paint) {
		this.points = points;
		this.paint = paint;
	}


	/**
	 * 真正将线绘制出来 只需将线绘制到canvas上即可,主要是要转换经纬度到屏幕坐标
	 */
	@Override
	public void draw(Canvas canvas, MapView mapView, boolean shadow) {
		if (!shadow) {// 不是绘制shadow层
			Projection projection = mapView.getProjection();
			if (points != null) {
				if (points.size() >= 2) {
					Point start = projection.toPixels(points.get(0), null);// 需要转换坐标
					for (int i = 1; i < points.size(); i++) {
						Point end = projection.toPixels(points.get(i), null);
						canvas.drawLine(start.x, start.y, end.x, end.y, paint);// 绘制到canvas上即可
						start = end;
					}
				}
			}
		}
	}
}

 简单的用例如下:

List<GeoPoint> points = new ArrayList<GeoPoint>();
points.add(new GeoPoint(39907794,116356694));
points.add(new GeoPoint(39950181,116415059));
points.add(new GeoPoint(39909637,116435315));
points.add(new GeoPoint(39902526,116398236));
Polyline polyline = new Polyline(points);
map.getOverlays().add(polyline); //map是MapView类型
map.invalidate();
 

OK, 大功告成!看看效果如下:

带折线的Google地图

  • 大小: 151.6 KB
分享到:
评论
1 楼 zxxcos 2011-10-13  
你这样做会死机的。内存不够

相关推荐

    Android-ExtraMapUtils一个Android库实现更方便在Google地图上标记绘制多边形和折线

    在Android应用开发中,Google Maps API是一个强大的工具,它允许开发者在应用程序中集成地图功能,包括定位、导航、路线规划等。然而,当需要在地图上绘制复杂的图形,如多边形和折线时,原始API可能会显得较为繁琐...

    polyline:在 Google Maps API 中解码和编码折线的工具

    折线Polyline 是一种在Google Maps API 中解码和编码折线的工具。 如果您想在查询 Google API 以获取路线时绕过 25 个 WayPoints 的限制,它会很有用。 通过解码用于在地图上绘制路径的折线,您可以获得更多坐标。 ...

    GradientPolyline:在Android的Google地图上使用梯度折线不是内置API。 但是现在很容易:winking_face:

    本机用于在Android的Google地图上创建渐变折线的用例。 由于它不是Google Maps Android SDK中的内置API。 案例分析 如果要在Andoird Google Maps的两个位置之间创建渐变折线,则将无法执行此操作,因为根据此注释,...

    android 的移动地图

    你可以设置地图类型(如卫星、地形或普通视图),添加标记(Marker)表示特定位置,创建折线(Polyline)显示路径,甚至绘制多边形(Polygon)覆盖区域。例如,添加一个标记: ```java LatLng position = new ...

    地图上绘制点和连线

    在Google Maps API中,这可以通过`google.maps.Polyline`类实现。 在“地图连线 绘制线路”这个主题下,你可能需要处理以下技术点: 1. 地图API的集成:了解如何在HTML和JavaScript代码中引入和初始化地图API。 2. ...

    GoogleMap应用开发与讲解

    在Android应用开发中,Google Maps API是一个至关重要的组件,它允许开发者将地图功能集成到自己的应用程序中,提供定位、导航、路线规划等多样化服务。"GoogleMap应用开发与讲解"这个主题涵盖了从基础到进阶的全部...

    Android帮助程序库,用于地理位置,位置和动画折线-Android开发

    使用Kotlin和Coroutine文档库构建现代体系结构位置库路线库路线库Google Maps的Polyline-utils屏幕快照获取位置搜索位置路线Polyline-utils曲线折线模式所有绘制模式先决条件HERE Api您需要HERE Api,在...

    MapDrawingTools:此库在Google Map中绘制多边形,折线和点,并将坐标返回到您的App

    MapDrawingTools是一个Android库,用于在Google Map中手动绘制多边形,折线和点,并将坐标从库返回到您的App。 该库对于选择多点或绘制土地边界以从用户获取数据的应用程序很有用。 项目设置和依赖项 JDK 8 ...

    GoogleMapsSample-Android

    【标题】"GoogleMapsSample-Android" 是一个专门为Android平台设计的示例应用,它旨在展示如何有效地集成谷歌地图API并实现特定功能。这个项目涵盖了使用谷歌地图服务、异步加载图片以及在地图上绘制路线的基本操作...

    EncodedPolyline:使用显示编码折线的Xamarin Forms Maps的Xamarin Forms项目的演示应用程序

    在共享的项目中,您将找到Xamarin.Forms.Maps Map的子类,该子类添加了对Google样式编码的折线的支持并设置了其颜色。 折线的解码发生在此子类中,并且此Forms控件与其自定义渲染器之间建立了一个对话框,以正确显示...

    react-native-maps-demo:react-native-maps-demo

    4. **覆盖物**:除了标注,React Native Maps还支持其他覆盖物,如`Polygon`(多边形)、`Polyline`(折线)和`Circle`(圆),这些组件可以用来表示特定区域或路径。 5. **交互性**:地图组件支持多种交互事件,如...

    GoogleMapsPolyline:使用一些Directions API方法的库

    Google Maps Directions API-折线抽屉助手 这是Couroutines的实现,对于RX,请参见 它是什么? 这是一个用Kotlin写的小型图书馆,可以利用Google Directions API调用并将响应转换为PolylineOptions,并准备添加到...

Global site tag (gtag.js) - Google Analytics