gpt4 book ai didi

android - 在 Android 中步行/驾驶时更新位置标记并在 Google map 上绘制路径

转载 作者:行者123 更新时间:2023-11-29 00:37:28 25 4
gpt4 key购买 nike

我想创建类似 Google map 的功能。每当有人开始走路/开车时,我想更新我的位置标记。我正在考虑使用 LocationListner 的 onLocationChange 方法,但我不确定。我也喜欢在谷歌地图上绘制更新位置的路径。

欢迎所有建议。

ItemizedOverlay:-

public class LocationOverlay extends ItemizedOverlay<OverlayItem>{

private List<OverlayItem> myOverlays;
Path path;
static int cnt = -1;
public LocationOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
System.out.println("Normal...");
myOverlays = new ArrayList<OverlayItem>();
}


public void addOverlay(OverlayItem overlay) {
System.out.println("Add Overlay called");
myOverlays.add(overlay);
populate();
cnt++;
}

@Override
protected OverlayItem createItem(int i) {
return myOverlays.get(i);
}

public void removeItem(int i) {
myOverlays.remove(i);
populate();
}

@Override
public int size() {
return myOverlays.size();
}

@Override
public void draw(Canvas canvas, final MapView mapView, boolean shadow) {


if (shadow) {
paint.setDither(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(4);

path = new Path();
Point point1 = new Point();
Projection projection = mapView.getProjection();
if (myOverlays.size() > 1) {

System.out.println(">>>>>>>>>>>");

for (int i = 0, j=i; i < myOverlays.size(); i++) {
Point point1 = new Point();
Point point2 = new Point();
projection.toPixels(myOverlays.get(i).getPoint(), point1);

System.out.println(">>>>>>>>>>>");

projection.toPixels(myOverlays.get(j++).getPoint(), point2);
System.out.println("Point == " + j);

path.moveTo(point2.x, point2.y);
path.lineTo(point1.x, point1.y);
canvas.drawPath(path, paint);
super.draw(canvas, mapView, shadow);
}
}
}
canvas.drawPath(path, paint);
super.draw(canvas, mapView, shadow);
}
}

注意 - 单个 locationChanged 会多次调用 draw 方法。

编辑:-

每当发生任何位置更改事件火灾时,我都可以绘制路线,但我在那里遇到了一个小问题。它也每次都从根绘制路径。我希望它应该从最后一个地方开始绘制路径(即从最后一个位置连接到下一个位置)。我附上一张图片以便更好地理解。

enter image description here

从图中您可以看到起点也连接到最后一个点。我不想要这个。对此有任何想法。

最佳答案

可以使用 MyLocationOverlay 轻松绘制当前位置.您需要做的是将此叠加层添加到您的 MapView。像这样的东西:

mapView.addOverlay(new MyLocationOverlay(context, mapView));

系统会自动绘制默认位置点,并会在您移动时立即更新

路线有点棘手,但那里仍然没有火箭科学。您需要做的是扩展 Overlay 类并实现 draw() 逻辑。您需要跟踪您旅行的 GeoPoints 并将它们投影到 map 上(在您的叠加层的 draw() 中,您可以向您的 mapView 请求一个 Projection 实例 - getProjection ()。您可以使用此投影将 GeoPoints 映射到您的 map 坐标)。一旦你有了 GeoPoints 列表 - 你就可以创建一个 Path并在 Canvas 上绘制这条路径

如何在 map 上绘制路径的简化示例(我在项目中使用了一些自定义类,但您应该知道):

Path path;

@Override
public void draw(Canvas canvas, final MapView mapView, boolean shadow)
{
Projection proj = mapView.getProjection();
updatePath(mapView,proj);
canvas.drawPath(path, mPaint);
}

protected void updatePath(final MapView mapView, Projection proj)
{
path = new Path();

proj.toPixels(mPoints.get(0).point, p);
path.moveTo(p.x, p.y);

for(RouteEntity.RoutePoint rp : mPoints)
{
proj.toPixels(rp.point, mPoint);
path.lineTo(mPoint.x, mPoint.y);
}
}

关于android - 在 Android 中步行/驾驶时更新位置标记并在 Google map 上绘制路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11745913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com