Android从服务器动态映射负载标记
我已经将谷歌地图集成到我的应用程序中,我想动态加载标记。这就是我所做的Android从服务器动态映射负载标记,android,google-maps,client-server,google-maps-markers,Android,Google Maps,Client Server,Google Maps Markers,我已经将谷歌地图集成到我的应用程序中,我想动态加载标记。这就是我所做的 获取左下角和右上角屏幕坐标 注册setOnCameraMoveListener并覆盖onCameraMove方法,每次用户在地图上滚动时,我都会向服务器发送带有用户屏幕坐标的请求 服务器仅返回那些在用户屏幕边界内的标记(返回为标记id、lat、lng的json对象) 检查地图上是否存在新下载的标记id,如果不存在,请在地图上添加新标记 我将在这里添加一些代码片段 mMap.setOnCameraMoveListener(
- 获取左下角和右上角屏幕坐标
- 注册
并覆盖setOnCameraMoveListener
方法,每次用户在地图上滚动时,我都会向服务器发送带有用户屏幕坐标的请求onCameraMove
- 服务器仅返回那些在用户屏幕边界内的标记(返回为标记id、lat、lng的
对象)json
- 检查地图上是否存在新下载的标记id,如果不存在,请在地图上添加新标记
mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
VisibleRegion vr = mMap.getProjection().getVisibleRegion();
LatLng top = vr.latLngBounds.northeast;
LatLng bottom = vr.latLngBounds.southwest;
String url = "http://192.168.137.1:3000/api/location/border?"
+ "leftLongitude=" + bottom.longitude
+ "&leftLatitude=" + bottom.latitude
+ "&rightLongitude=" + top.longitude
+ "&rightLatitude=" + top.latitude;
downloader.sendGetToServer(url);
}
});
public void sendGetToServer(String url) {
AndroidNetworking.get(url)
.setPriority(Priority.LOW)
.build()
.getAsString(new StringRequestListener() {
@Override
public void onResponse(String response) {
if(listener != null && response != null && response.length() > 0) {
listener.downloadComplete(response);
}
}
@Override
public void onError(ANError anError) {
Log.e("Error", anError.getMessage());
}
});
}
@凌驾
public void downloadComplete(String string) {
try {
Collection<MarkerItemData> mapMarkers = algorithm.getItems(); // get all markers from the map
JSONObject jsonObject = new JSONObject(string);
JSONArray respondArray = jsonObject.getJSONArray("respond");
for(int i=0; i<respondArray.length(); i++) {
JSONObject station = respondArray.getJSONObject(i);
int id = station.getInt("_id");
boolean skip = false;
for(MarkerItemData markerItemData : mapMarkers) {
if(markerItemData.getId() == id) {
skip = true;
break;
}
}
if(!skip) {
boolean criticalData = station.has("latitude") && station.has("longitude");
if (criticalData) {
double lat = station.getDouble("latitude");
double lng = station.getDouble("longitude");
MarkerItemData offsetItem = new MarkerItemData(id, lat, lng, 1, "");
mClusterManager.addItem(offsetItem);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public void下载完成(字符串){
试一试{
集合mapMarkers=algorithm.getItems();//从映射中获取所有标记
JSONObject JSONObject=新的JSONObject(字符串);
JSONArray respondArray=jsonObject.getJSONArray(“响应”);
对于(int i=0;iYou可以从.GeoFire()尝试模式B,它似乎非常适合您尝试执行的操作……但这取决于存储在Firebase db中的数据。