Как в java получать актуальные координаты границ видимой части google maps при зуме и перемещении?
Пишу андроид приложение на Java. Мне нужны координаты границ видимой области на экране, чтобы потом отправить GET запрос к апи и расположить на карте маркеры в этой видимой области пользователя.
Пыталась делать это через
LatLngBounds b = mMap.getProjection().getVisibleRegion().latLngBounds;
в результате было все по нулям, загуглила, там пишут это нужно делать в OnLoadedMap() методе.
Не могу понять как это реализовать, чтобы каждый раз при смещении/зуме карты все подгружалось с актуальными данными. Сейчас моя maps activity так выглядит
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMapLoadedCallback {
private RequestQueue queue;
private View mapView;
private SupportMapFragment supportMapFragment;
public LatLng pnt;
private GoogleMap mMap;
LatLngBounds b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
assert mapFragment != null;
mapFragment.getMapAsync(this);
queue = Volley.newRequestQueue(this);
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
mMap = googleMap;
LatLng spb = new LatLng(59.93, 30.36);
mMap.addMarker(new MarkerOptions().position(spb).title("me"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(spb));
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
assert mapFragment != null;
mapView = mapFragment.getView();
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
getRequest(); //отправляю запрос
}
private void getRequest() {
String url = "https://recyclemap-api-master.rc.geosemantica.ru/public/points?bbox=30.06409999999994%2C59.66599141309655%2C30.564100000000025%2C60.208985857750235&size=1&restricted=false&offset=0";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject data = response.getJSONObject("data");
JSONArray points = data.getJSONArray("points");
for (int i = 0; i < points.length(); i++) {
JSONObject point = points.getJSONObject(i);
String id = point.getString("pointId");
String title = point.getString("title");
String geom = point.getString("geom");
geom = geom.replaceAll(("[\\[\\](){}]"),"");
geom = geom.replaceAll("[a-zA-Z]", "");
String[] coord = geom.split(" ");
pnt = new LatLng(Double.parseDouble(coord[1]), Double.parseDouble(coord[0]));
mMap.addMarker(new MarkerOptions().position(pnt).title("").icon(BitmapDescriptorFactory.fromResource(R.drawable.mark)));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
queue.add(request);
}
@Override
public void onMapLoaded() {
}
}