Как увеличить камеру, чтобы покрыть путь в Android GoogleMap?
Я охватил несколько мест в Google map
с помощью LatLng.Builder
и это работает. Есть ли способ, которым я мог бы покрыть весь путь между двумя местами в Google map
?
Мой код Curent для включения нескольких мест
builder = new LatLngBounds.Builder();
builder.include(LatLng1);
builder.include(LatLng2);
googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 17));
Любое предложение, пожалуйста?
Спасибо
2 ответа
Решение было простым
Это может помочь кому-то в будущем, если вы ищете такую функцию.
Этот метод вызывается после google direction API
возвращает маршрут из location A to B
, directionPoints
это list
Точек в маршруте.
public void handleResult(ArrayList<LatLng> directionPoints)
{
PolylineOptions rectLine = new PolylineOptions().width(3).color(Color.RED);
for(int i = 0 ; i < directionPoints.size() ; i++)
{
rectLine.add(directionPoints.get(i));
}
//this polyline is stored so that it can be removed by calling drawnRoutePath.remove() if needed
drawnRoutePath = googleMap.addPolyline(rectLine);
prepareBuilder(directionPoints);
googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 17));
}
ОБНОВИТЬ
Ответ json от Google Direction API
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 27.7136953,
"lng" : 85.32216629999999
},
"southwest" : {
"lat" : 27.7103725,
"lng" : 85.3214952
}
},
.... etc
Так что я использовал этот предел lat
а также lng
в качестве параметра для LatLngBounds.Builder
,
JSONObject jsonBound = ((JSONObject)jRoutes.get(i)).getJSONObject("bounds");
JSONObject jsonSouthWest = jsonBound.getJSONObject("southwest");
JSONObject jsonNorthEast = jsonBound.getJSONObject("northeast");
LatLng boundSouthWest = new LatLng(jsonSouthWest.getDouble("lat"),jsonSouthWest.getDouble("lng"));
LatLng boundNorthEast = new LatLng(jsonNorthEast.getDouble("lat"),jsonNorthEast.getDouble("lng"));
ArrayList<LatLng> bounds = new ArrayList<LatLng>();
bounds.add(boundNorthEast);
bounds.add(boundSouthWest);
и включил эти пункты в LatLngBounds.Builder
Я знаю, вы уже нашли ответ, но вот мой метод решения проблемы
boolean hasPoints = false;
Double maxLat = null, minLat = null, minLon = null, maxLon = null;
if (polyline != null && polyline.getPoints() != null) {
List<LatLng> pts = polyline.getPoints();
for (LatLng coordinate : pts) {
// Find out the maximum and minimum latitudes & longitudes
// Latitude
maxLat = maxLat != null ? Math.max(coordinate.latitude, maxLat) : coordinate.latitude;
minLat = minLat != null ? Math.min(coordinate.latitude, minLat) : coordinate.latitude;
// Longitude
maxLon = maxLon != null ? Math.max(coordinate.longitude, maxLon) : coordinate.longitude;
minLon = minLon != null ? Math.min(coordinate.longitude, minLon) : coordinate.longitude;
hasPoints = true;
}
}
if (hasPoints) {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(maxLat, maxLon));
builder.include(new LatLng(minLat, minLon));
map.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 48));
}
Вот самый простой способ
private GoogleMap mMap;
// Create a LatLngBounds that includes Australia.
private LatLngBounds AUSTRALIA = new LatLngBounds(
new LatLng(-44, 113), new LatLng(-10, 154));
// Set the camera to the greatest possible zoom level that includes the
// bounds
mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(AUSTRALIA, 0));
https://developers.google.com/maps/documentation/android-sdk/views