簡體   English   中英

如何使用多個地理位置繪制路線?

[英]How to draw route using multiple geopoints?

我正在為地圖活動實現一個Android應用程序。

我正在使用位置偵聽器獲取位置更新。 更新位置后,我將那些更新的緯度和經度值保存在數據庫中。

我可以使用源緯度,經度和目標緯度,經度值繪制從源到目的地的路線路徑。 但是一次要使用多個數據庫的經度和緯度值,我想繪制路徑。 我正在使用RoutePath.java類繪制多個緯度和經度的路線路徑。使用這些緯度和經度列表,我可以繪制路徑,但是它顯示的是點對點的直線,而沒有顯示路線。 見下圖...

在此處輸入圖片說明

如果您仔細觀察,路線上的某些點和路線路徑之外的某些點。 再次看到下面的全變焦圖片...

在此處輸入圖片說明

如果有人知道該問題的解決方案,請幫助我。

RoutePath.java:

public class RoutePath extends Overlay {

    private int _pathColor;
    private final List<GeoPoint> _points;
    private boolean _drawStartEnd;

    public RoutePath(List<GeoPoint> points) {
        this(points, Color.RED, true);
    }

    public RoutePath(List<GeoPoint> points, int pathColor,
            boolean drawStartEnd) {
        _points = points;
        _pathColor = pathColor;
        _drawStartEnd = drawStartEnd;
    }

    private void drawOval(Canvas canvas, Paint paint, Point point) {
        Paint ovalPaint = new Paint(paint);
        ovalPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        ovalPaint.setStrokeWidth(2);
        int _radius = 6;
        RectF oval = new RectF(point.x - _radius, point.y - _radius, point.x
                + _radius, point.y + _radius);
        canvas.drawOval(oval, ovalPaint);
    }

    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
            long when) {
        Projection projection = mapView.getProjection();
        if (shadow == false && _points != null) {
            Point startPoint = null, endPoint = null;
            Path path = new Path();
            // We are creating the path
            for (int i = 0; i < _points.size(); i++) {
                GeoPoint gPointA = _points.get(i);
                Point pointA = new Point();
                projection.toPixels(gPointA, pointA);
                if (i == 0) { // This is the start point
                    startPoint = pointA;
                    path.moveTo(pointA.x, pointA.y);
                } else {
                    if (i == _points.size() - 1)// This is the end point
                        endPoint = pointA;
                    path.lineTo(pointA.x, pointA.y);
                }
            }

            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(_pathColor);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(5);
            paint.setAlpha(90);
            if (getDrawStartEnd()) {
                if (startPoint != null) {
                    drawOval(canvas, paint, startPoint);
                }
                if (endPoint != null) {
                    drawOval(canvas, paint, endPoint);
                }
            }
            if (!path.isEmpty())
                canvas.drawPath(path, paint);
        }
        return super.draw(canvas, mapView, shadow, when);
    }

    public boolean getDrawStartEnd() {
        return _drawStartEnd;
    }

    public void setDrawStartEnd(boolean markStartEnd) {
        _drawStartEnd = markStartEnd;
        }
    }

您獲得了直線,因為GeoPoints只是這樣。.....意味着,如果您具有完整的路線,則它將根據您的Geopoints顯示。...這都取決於GeoPoints。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM