在两个标记之间绘制路径谷歌地图V2



我有两个标记,即startLocation,另一个是stopLocation。startLocation将检测用户的当前位置,然后用户将行走,当他们停止时,他们将按下stop,stopLocation将被捕获为他们的新当前位置。当用户从startLocation移动到stopLocation时,我想绘制一条多段线。或者,也可以在创建起点和终点位置的标记后绘制多段线,以更容易实现的为准。如何做到这一点?大多数答案都是指检索路线,然后绘制多段线,但这不是我想要的——我想获得用户的个性化路线。简而言之,我想记录用户所走的路线。我已经设法创建了两个标记:

btnStart = (Button) findViewById(R.id.btnStart);
    btnStart.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // Create Start Marker
            // get current location
            LocationManager locManager;
            String context = Context.LOCATION_SERVICE;
            locManager = (LocationManager) getSystemService(context);
            Criteria c = new Criteria();
            c.setAccuracy(Criteria.ACCURACY_FINE);
            c.setAltitudeRequired(false);
            c.setBearingRequired(false);
            c.setCostAllowed(true);
            c.setPowerRequirement(Criteria.POWER_LOW);
            String provider = locManager.getBestProvider(c, true);
            Location loc = locManager.getLastKnownLocation(provider);
            LatLng currentPosition = updateWithNewLocation(loc);
            Marker startLocation = map.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .title("Start Location")
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition, 17));

        }
    });
    btnStop = (Button) findViewById(R.id.btnStop);
    btnStop.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // Create Stop
            // get current location
            LocationManager locManager;
            String context = Context.LOCATION_SERVICE;
            locManager = (LocationManager) getSystemService(context);
            Criteria c = new Criteria();
            c.setAccuracy(Criteria.ACCURACY_FINE);
            c.setAltitudeRequired(false);
            c.setBearingRequired(false);
            c.setCostAllowed(true);
            c.setPowerRequirement(Criteria.POWER_LOW);
            String provider = locManager.getBestProvider(c, true);
            Location loc = locManager.getLastKnownLocation(provider);
            LatLng currentPosition = updateWithNewLocation(loc);
            Marker stopLocation = map.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .title("Stop Location")
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition, 17));
            // Draw dynamic line
        }
    });

现在我只需要在两个标记之间划一条线。谢谢

如果不跟踪用户的位置,就无法做到这一点。您应该使用requestLocationUpdates功能来监听并获取用户位置的更新。有关收听GPS定位的更多信息,请参阅开发人员指南。

String locationProvider = LocationManager.NETWORK_PROVIDER;
// Or, use GPS location data:
// String locationProvider = LocationManager.GPS_PROVIDER;
locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);

你可能还想在最新发布的谷歌地图API道路中使用"捕捉到道路"功能,通过GPS修复你的原始纬度/lng,并在道路上获得更平滑的路径。它目前没有Android API,因此您可能需要使用Web API来访问snap to road服务。

https://roads.googleapis.com/v1/snapToRoads?path=-35.27801,149.12958|-35.28032,149.12907|-35.28099,149.12929|-35.28144,149.12984|-35.28194,149.13003|-35.28282,149.12956|-35.28302,149.12881|-35.28473,149.12836
        &interpolate=true
        &key=API_KEY

用户停止跟踪或到达终点后,可以根据其路径创建多段线。

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions rectOptions = new PolylineOptions()
        .add(new LatLng(37.35, -122.0))
        .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
        .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
        .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
        .add(new LatLng(37.35, -122.0)); // Closes the polyline.
// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions);

如果不清楚,请告诉我,并希望它能有所帮助。

最新更新