在每个位置更新的地图上添加标记

时间:2018-03-07 13:03:25

标签: android google-maps google-maps-markers

我有一个Android应用程序,可以获取我的设备位置并添加标记。它还跟踪位置和标记移动。我希望每次位置更改时在地图上添加一个标记,这样我就可以在以后在它们之间绘制一条折线。我没有使用firebase或DBHelper。只是寻找一种简单的方法来做到这一点。

这是onLocationChanged函数

@Override
public void onLocationChanged(Location location) {
    LatLng myCoordinates = new LatLng(location.getLatitude(), location.getLongitude());
    LocationMarker.setPosition(myCoordinates);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(myCoordinates));
    float zoomLevel = 12.0f;
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myCoordinates, zoomLevel));

}

这是我的onCreate功能

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tracking);

    mOptions = new MarkerOptions().position(new LatLng(0, 0)).title("My Current Location")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));


    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        checkLocationPermission();
    }
    // Gets map fragment and allows map to display location
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(map);
    mapFragment.getMapAsync(this);

}

是否可以将lat和long存储到数组中并使用数组绘制点?我一直试图解决它,但没有明确的

2 个答案:

答案 0 :(得分:0)

您要找的是Polyline,可以找到文档here

Polyline的构建器需要LatLng个对象。我不确定您目前正在做什么,但您可以将LatLng功能中的onLocationChanged个对象存储在一个数组中,也可以将所有Markers存储在数组中映射到数组并调用他们的getLocation函数来获取LatLng所需的Polyline个对象。

答案 1 :(得分:0)

创建一个字段变量:

ArrayList<LatLng> points = new ArrayList<>();

在onLocationChanged中执行:

points.add(myCoordinates);

然后,当您想要创建PolyLine时,请执行以下操作:

Polyline line = map.addPolyline(new PolylineOptions()
  .addAll(points)
  .width(5)
  .color(Color.RED));

addAll方法支持ArrayList实现的Iterable类型。