每 10 秒更改标记相机位置而不刷新 googlemap

changing marker camera position in every 10 seconds without refreshing the googlemap

我目前正在开发一个可以跟踪位置的 Android 应用程序。 我的应用程序有两个部分:

  1. 更新数据(经度,纬度)到服务器
  2. 每 10 秒从服务器接收一次数据并在 googlemap(marker)
  3. 上显示

我的第一部分已经完成,在第二部分我正在从服务器获取一个值。但是当我 sync 我的地图有新值时,问题就出现了——每次它都会刷新整个地图。

如果有人对如何实现能够 运行 android 应用程序并看到标记动态变化的效果有任何见解,将不胜感激!

public class user_page extends FragmentActivity implements
OnMapReadyCallback {
double longi=0,lati=0;
int id=0;
MapFragment mapFragment;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setContentView(R.layout.tim);

    try
    {
       mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);

    }
    catch(Exception e)
    {
        Log.d("error",e.toString());
    }
    final Handler h = new Handler();
    h.postDelayed(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub

            new logincheck().execute();

                Toast.makeText(getApplicationContext(),"longi = " + longi + "latii = " +lati,Toast.LENGTH_SHORT).show();
            h.postDelayed(this, 10000);
        }
    }, 10000);


}


@Override
public void onMapReady(GoogleMap googleMap) {


    LatLng current = new LatLng(longi, lati);

    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 13));

    googleMap.addMarker(new MarkerOptions()
            .title(""+id)
            .position(current));



}
// end of class user_page

public class logincheck extends AsyncTask<String, Void, String>  {


    HashMap<String, String> data;
    ArrayList<HashMap<String, String>> dataFromdb;

    public logincheck()
    {
        dataFromdb = new ArrayList<HashMap<String, String>>();
    }


    @Override
    protected String doInBackground(String... params) {
        id = getIntent().getIntExtra("id",0);
        StringBuilder result = new StringBuilder("");
        String line ="";

        HttpClient client = new DefaultHttpClient();
        HttpGet httpget = new HttpGet("mylink?id=" +id);

        try
        {
            HttpResponse responce = client.execute(httpget);
            BufferedReader in = new BufferedReader(new InputStreamReader(responce.getEntity().getContent()));
            while((line= in.readLine()) != null)
            {
                result.append(line);
            }
            in.close();
        }
        catch(Exception e)
        {
            Log.e("error in do in background", e.getMessage());
        }

        return result.toString();
    }


    protected void onPostExecute(String result) {
        ArrayList<HashMap<String, String>> mydata = parseJson(result);
        for(int i=0;i < mydata.size();i++)
        {
            longi = Double.parseDouble(mydata.get(i).get("logi"));
            lati = Double.parseDouble(mydata.get(i).get("lati"));

        }
        try {
            mapFragment.getMapAsync(user_page.this);
        }
        catch(Exception e)
        {
            Log.d("error",e.toString());
        }

    }

    private ArrayList<HashMap<String, String>> parseJson(String stringdata)
    {
        dataFromdb.clear();
        try
        {


            JSONArray jsonarray = new JSONArray(stringdata);
            JSONObject jsondata = null;

            for(int i=0;i<jsonarray.length();i++)
            {
                NumberFormat n = NumberFormat.getInstance();
                data = new HashMap<String, String>();
                jsondata = jsonarray.getJSONObject(i);
                data.put("logi",jsondata.getString("logi"));
                data.put("lati",jsondata.getString("lati"));

                dataFromdb.add(data);
            }

        }
        catch(JSONException e)
        {
            Log.e("error in parsing ",e.getMessage());
        }

        return dataFromdb;
    }

 }
}

尝试使用

   googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 13));

当您收到新的纬度和经度时。这应该从当前位置平滑地动画到新位置