如何在谷歌地图Android API上创建路线

如何在谷歌地图Android API上创建路线,android,api,google-maps,Android,Api,Google Maps,我用SupportMapFragment创建了一个简单的地图应用程序,现在想在上面显示一条路线。 GoogleSamples只有一个例子,它用多边形绘制了一条线,但它没有创建正确的方式,只有两点之间的简单线:( 如何创建穿过街道和道路的垂直路线?不幸的是,无法使用Google Maps API v2自动创建点与点之间的路线。但是,您可以使用Google Direction API: 有了这个结果,你就可以自己画一条路线了。如果有任何错误,我不知道该怎么办,但是这种方法可以帮助你 pub

我用SupportMapFragment创建了一个简单的地图应用程序,现在想在上面显示一条路线。 GoogleSamples只有一个例子,它用多边形绘制了一条线,但它没有创建正确的方式,只有两点之间的简单线:(
如何创建穿过街道和道路的垂直路线?

不幸的是,无法使用Google Maps API v2自动创建点与点之间的路线。但是,您可以使用Google Direction API:


有了这个结果,你就可以自己画一条路线了。

如果有任何错误,我不知道该怎么办,但是这种方法可以帮助你

    public class RouteOverlay extends Overlay {
    /** GeoPoints representing this routePoints. **/
    private final List<GeoPoint> routePoints;
    /** Colour to paint routePoints. **/
    private int colour;
    /** Alpha setting for route overlay. **/
    private static final int ALPHA = 120;
    /** Stroke width. **/
    private static final float STROKE = 4.5f;
    /** Route path. **/
    private final Path path;
    /** Point to draw with. **/
    private final Point p;
    /** Paint for path. **/
    private final Paint paint;


    /**
     * Public constructor.
     * 
     * @param route Route object representing the route.
     * @param defaultColour default colour to draw route in.
     */

    public RouteOverlay(final Route route, final int defaultColour) {
            super();
            routePoints = route.getPoints();
            colour = defaultColour;
            path = new Path();
            p = new Point();
            paint = new Paint();
    }

    @Override
    public final void draw(final Canvas c, final MapView mv,
                    final boolean shadow) {
            super.draw(c, mv, shadow);

            paint.setColor(colour);
            paint.setAlpha(ALPHA);
            paint.setAntiAlias(true);
            paint.setStrokeWidth(STROKE);
            paint.setStyle(Paint.Style.STROKE);

            redrawPath(mv);
            c.drawPath(path, paint);
    }

    /**
     * Set the colour to draw this route's overlay with.
     * 
     * @param c  Int representing colour.
     */
    public final void setColour(final int c) {
            colour = c;
    }

    /**
     * Clear the route overlay.
     */
    public final void clear() {
            routePoints.clear();
    }

    /**
     * Recalculate the path accounting for changes to
     * the projection and routePoints.
     * @param mv MapView the path is drawn to.
     */

    private void redrawPath(final MapView mv) {
            final Projection prj = mv.getProjection();
            path.rewind();
            final Iterator<GeoPoint> it = routePoints.iterator();
            prj.toPixels(it.next(), p);
            path.moveTo(p.x, p.y);
            while (it.hasNext()) {
                    prj.toPixels(it.next(), p);
                    path.lineTo(p.x, p.y);
            }
            path.setLastPoint(p.x, p.y);
    }

}
公共类路由覆盖扩展覆盖{
/**表示此路由点的地理点**/
专用最终列表路由点;
/**用于绘制路线点的颜色**/
私家色彩;
/**路由覆盖的Alpha设置**/
专用静态最终intα=120;
/**笔划宽度**/
专用静态最终浮动行程=4.5f;
/**路径**/
私有最终路径;
/**用手指画**/
私人终点p;
/**为路径绘制**/
私人最终油漆;
/**
*公共构造函数。
* 
*@param route表示路由的对象。
*@param defaultcolor用于绘制路线的默认颜色。
*/
公共线路Overlay(最终线路、最终int默认颜色){
超级();
routePoints=route.getPoints();
颜色=默认颜色;
路径=新路径();
p=新点();
油漆=新油漆();
}
@凌驾
公共最终作废图(最终画布c、最终地图视图mv、,
最终布尔阴影){
超级画(c,mv,阴影);
油漆。设置颜色(颜色);
油漆。setAlpha(α);
paint.setAntiAlias(真);
油漆。设置行程宽度(行程);
绘制.设置样式(绘制.样式.笔划);
重绘路径(mv);
c、 绘制路径(路径、绘制);
}
/**
*设置用于绘制此路线覆盖的颜色。
* 
*@param c Int表示颜色。
*/
公共最终颜色(最终内部颜色c){
颜色=c;
}
/**
*清除路线覆盖。
*/
公开最终无效清除(){
routePoints.clear();
}
/**
*重新计算路径以说明对的更改
*投影点和路由点。
*@param mv MapView绘制路径的目的地。
*/
专用空心重绘路径(最终地图视图mv){
最终投影prj=mv.getProjection();
倒带();
final Iterator it=routePoints.Iterator();
prj.toPixels(it.next(),p);
路径移动到(p.x,p.y);
while(it.hasNext()){
prj.toPixels(it.next(),p);
线路图(p.x,p.y);
}
路径设定点(p.x,p.y);
}
}