【发布时间】:2021-11-17 03:25:00
【问题描述】:
我是 Google Maps API for android 的新手,但我想在我的 android 应用程序中创建一个视图,以显示数据库中某些提供商的位置。 到目前为止,我已经完成了以下工作:
public void onResponse(String response) {
Log.d(TAG, "Response: " + response);
try {
JSONObject jsonObject;
JSONObject drinkObject = new JSONObject(response);
JSONArray jsonArray = drinkObject.getJSONArray("vendors");
for(int i=0; i<jsonArray.length();i++){
jsonObject = jsonArray.getJSONObject(i);
latlngs.add(new LatLng(jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude")));
}
for (LatLng point : latlngs) {
options.position(point);
options.title("mama fua service provider");
options.snippet("someDesc");
googleMap.addMarker(options);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
有了这个,我已经能够添加标记,但它们都被组合成一个完整的世界地图页面,如此处所示 这意味着用户必须手动放大才能查看其他制造商。 我怎样才能做到这一点?我必须对我的代码进行哪些更改,或者有人可以指出我正确的方向吗? 在按照@Andy 的建议回答了类似问题后,我已将代码更新为
public void onMapReady(GoogleMap googleMap) {
final String TAG = ItemisedMapsActivity.class.getSimpleName();
StringRequest strReq = new StringRequest(Request.Method.POST, Link.URL_PROVIDER, response -> {
Log.d(TAG, "Response: " + response);
try {
JSONObject jsonObject;
JSONObject drinkObject = new JSONObject(response);
JSONArray jsonArray = drinkObject.getJSONArray("vendors");
for(int i=0; i<jsonArray.length();i++){
jsonObject = jsonArray.getJSONObject(i);
LatLng vnr = new LatLng(jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"));
MarkerOptions vnrMarker = new MarkerOptions();
vnrMarker.position(vnr);
vnrMarker.title(jsonObject.getString("name"));
vnrMarker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
markerList.add(vnrMarker);
}
showAllMarkers(googleMap);
} catch (JSONException e) {
e.printStackTrace();
}
}, error -> {
Log.e(TAG, "Request Error: " + error.getMessage());
Toast.makeText(this, " An error has occurred "+error.getMessage(), Toast.LENGTH_LONG).show();
}) {
@Override
protected Map<String, String> getParams() {
// Posting params to register url
Map<String, String> params = new HashMap<>();
params.put("town", town);
return params;
}
};
// Adding request to request queue
RequestQueue providerRequestQue = Volley.newRequestQueue(this);
providerRequestQue.add(strReq);
}
private void showAllMarkers(GoogleMap googleMap) {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (MarkerOptions m : markerList) {
builder.include(m.getPosition());
}
LatLngBounds bounds = builder.build();
int width = getResources().getDisplayMetrics().widthPixels;
int height = getResources().getDisplayMetrics().heightPixels;
int padding = (int) (width * 0.30);
// Zoom and animate the google map to show all markers
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding);
googleMap.animateCamera(cu);
}
【问题讨论】:
-
你在同一个帖子上问了很多问题,你需要专注于一个问题。
-
@javdromero 更新了具体问题
-
这个答案展示了如何构建一个
LatLngBounds并使用它以编程方式进行缩放:stackoverflow.com/a/14828739/2711811 -
@Andy 我已经按照答案更新了我的代码,但只提供了平移和缩放,但现在标记不可见
-
参考您更新的代码,看起来您只是忘记将标记添加到地图中(在
jsonArray循环中) - 可能最简单的方法是将其添加到showAllMarkers循环中:googleMap.addMarker(m);
标签: java android google-maps-api-3 android-volley