【问题标题】:Adding visible "Markers" to represent Geopoints to a MapView using ItemizedOverlay in Android在 Android 中使用 ItemizedOverlay 添加可见的“标记”以将地理点表示到 MapView
【发布时间】:2010-03-31 17:33:56
【问题描述】:

我正在构建一个应用程序,它将 GPS 位置存储在 SQLite 数据库中,然后通过在点之间绘制一条红线,使用 Overlay 将数据输出到 MapView。

我希望能够为每个点以及红线显示图形标记(图像)。我的代码如下:

public class MyOverlay extends ItemizedOverlay<OverlayItem> {

// private Projection projection;
private Paint linePaint;
private Vector<GeoPoint> points;

public MyOverlay(Drawable defaultMarker) {
    super(defaultMarker);
    points = new Vector<GeoPoint>();
    //set colour, stroke width etc.
    linePaint = new Paint();
    linePaint.setARGB(255, 255, 0, 0);
    linePaint.setStrokeWidth(3);
    linePaint.setDither(true);
    linePaint.setStyle(Style.FILL);
    linePaint.setAntiAlias(true);
    linePaint.setStrokeJoin(Paint.Join.ROUND);
    linePaint.setStrokeCap(Paint.Cap.ROUND);

}

public void addPoint(GeoPoint point) {
    populate();
    points.addElement(point);

}

//public void setProjection(Projection projection) {
//   this.projection = projection;
// }

public void draw(Canvas canvas, MapView view, boolean shadow) {
    populate();
    int size = points.size();
    Point lastPoint = new Point();
    if(size == 0) return;
    view.getProjection().toPixels(points.get(0), lastPoint);
    Point point = new Point();
    for(int i = 1; i<size; i++){
       view.getProjection().toPixels(points.get(i), point);
        canvas.drawLine(lastPoint.x, lastPoint.y, point.x, point.y, linePaint);
        lastPoint = point;

    }
}

@Override
protected OverlayItem createItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int size() {
    // TODO Auto-generated method stub
    return 0;
}
}

为每个 GeoPoint 添加标记的最简单方法是什么?

【问题讨论】:

    标签: java android sqlite overlay android-mapview


    【解决方案1】:

    看看http://www.vtgroup.com/index.html#MapLocation,看看它是否回答了你的问题。

    【讨论】:

    • 你好 Jay,这正是我要找的 canvas.drawBitmap 方法。谢谢!
    • Jay,我似乎收到了与行 canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.arrow) "MyOverlay 类型的 getResources() 方法未定义的错误"
    • 您需要一个 Context 对象来调用 getResources()。与每次绘制时访问资源并创建新的可绘制对象相反,您应该在地图活动中创建可绘制对象并将其传递给叠加层,或者将地图活动的上下文传递给叠加层并在构造函数中获取一次可绘制对象.经验法则说最好避免在您的绘制方法中创建新对象和执行逻辑,因为它非常慢。根据用例,我还建议在其他地方收集您的预测。
    • 戴夫,感谢您的回复。我实际上遇到了一个问题,即它只为前 2 绘制一条红线,而不是为其他任何一条。这是因为我是如何创建投影的吗?
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2011-09-05
    • 2014-12-17
    • 1970-01-01
    • 2010-12-19
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多