Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android从服务器动态映射负载标记_Android_Google Maps_Client Server_Google Maps Markers - Fatal编程技术网

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中的数据。