Android 如何刷新地图上的标记?

Android 如何刷新地图上的标记?,android,google-maps,Android,Google Maps,我在地图上只有两个标记 1-我想用最大缩放显示两个标记 2-我想在那之后用定时器刷新标记位置 我想使用截击从服务器加载A和B的信息。我是一个初学者 这是我的密码: import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; import

我在地图上只有两个标记

1-我想用最大缩放显示两个标记

2-我想在那之后用定时器刷新标记位置

我想使用截击从服务器加载A和B的信息。我是一个初学者

这是我的密码:

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Test extends FragmentActivity implements OnMapReadyCallback {
    RequestQueue requestQueue;
    String b_lat, b_lon, a_lat, a_lon;

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);


    }



    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        LatLng a_local = new LatLng(Double.parseDouble(a_lat), Double.parseDouble(a_lon));
        LatLng b_local = new LatLng(Double.parseDouble(b_lat), Double.parseDouble(b_lon));

        mMap.addMarker(new MarkerOptions().position(a_local).title("a") 
                .snippet("xxx")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_a))).showInfoWindow();

        mMap.addMarker(new MarkerOptions().position(b_local).title("b")
                .snippet("yyy")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_b))).showInfoWindow();


        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        mMap.getUiSettings().setZoomControlsEnabled(true);
        mMap.getUiSettings().setCompassEnabled(true);
        mMap.getUiSettings().setAllGesturesEnabled(true); 
        mMap.getUiSettings().setMyLocationButtonEnabled(true);
        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;
        }
        mMap.setMyLocationEnabled(true);





        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(a_local,16));

        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                Toast.makeText(Test.this,latLng.latitude + ", " +latLng.longitude, Toast.LENGTH_SHORT).show();

            }
        });
    }
    public void a_b_locations(){
        try {
            SharedPreferences myshared = getSharedPreferences("file", Context.MODE_PRIVATE);
            a_lat= myshared.getString("a_lat",""); 
            a_lon= myshared.getString("a_lon","") ; 
            b_lat= myshared.getString("b_lat","") ;
            b_lon= myshared.getString("b_lon","") ;


        }
        catch(Exception e) {
            return ;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        a_b_locations();

    }

    public void load_locations_from_server() {

        String URL="http://myweb.com";

        requestQueue = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try {
                            JSONArray jsonArray = response.getJSONArray("locations");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject respons = jsonArray.getJSONObject(i);

                                a_lat=respons.getString("a_lat");
                                a_lon=respons.getString("a_lon");
                                b_lat=respons.getString("b_lat");
                                b_lon=respons.getString("b_lon");                                

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", "ERROR");
            }
        }

        );
        requestQueue.add(jsonObjectRequest);

    }
}
导入android.content.Context;
导入android.content.SharedReferences;
导入android.content.pm.PackageManager;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.app.FragmentActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.Toast;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonObjectRequest;
导入com.android.volley.toolbox.volley;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.BitmapDescriptorFactory;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.MarkerOptions;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
公共类测试扩展了FragmentActivity在MapreadyCallback上的实现{
请求队列请求队列;
字符串b_lat,b_lon,a_lat,a_lon;
私有谷歌地图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_映射);
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
LatLng a_local=新的LatLng(Double.parseDouble(a_lat),Double.parseDouble(a_lon));
LatLng b_local=新的LatLng(Double.parseDouble(b_lat),Double.parseDouble(b_lon));
mMap.addMarker(新MarkerOptions().position(a_local).title(“a”)
.snippet(“xxx”)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_a))).showInfoWindow();
mMap.addMarker(新的MarkerOptions().position(b_local).title(“b”)
.snippet(“yyy”)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_b))).showInfoWindow();
mMap.setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setCompassEnabled(true);
mMap.getUiSettings().setAllGesturesEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
if(ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
返回;
}
mMap.setMyLocationEnabled(真);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(本地a_,16));
mMap.setOnMapClickListener(新的GoogleMap.OnMapClickListener(){
@凌驾
公共无效的点击(LatLng LatLng){
Toast.makeText(Test.this,latLng.latitude+”,“+latLng.longitude,Toast.LENGTH_SHORT).show();
}
});
}
公共无效a_b_位置(){
试一试{
SharedReferences myshared=getSharedReferences(“文件”,Context.MODE\u PRIVATE);
a_lat=myshared.getString(“a_lat”,即“”);
a_lon=myshared.getString(“a_lon”,即“”);
b_-lat=myshared.getString(“b_-lat”,”);
b_lon=myshared.getString(“b_lon”,即“”);
}
捕获(例外e){
返回;
}
}
@凌驾
受保护的void onResume(){
super.onResume();
a_b_位置();
}
公共无效从\u服务器()加载\u位置\u{
字符串URL=”http://myweb.com";
requestQueue=Volley.newRequestQueue(this);
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,URL,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“位置”);
for(int i=0;i
onMapReady()
方法中的map ready之后,需要调用
load\u locations\u from\u server()
方法

阅读更多

要设置标记的新位置,只需使用:

Marker.setPosition(LatLng latlng);
因此,需要为标记创建两个变量

私人市场; 私有标记mMarkerB

然后在onMapReady()中初始化它们:

@Override
public void onMapReady(GoogleMap googleMap) {
  mMap = googleMap;

  ...

  mMarkerA = mMap.addMarker(new MarkerOptions().position(a_local).title("a") 
            .snippet("xxx")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_yellow))).showInfoWindow();

  mMarkerB = mMap.addMarker(new MarkerOptions().position(b_local).title("b")
            .snippet("yyy")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.markerb))).showInfoWindow();
  ...
}
然后,您可以在从服务器获取位置时刷新它们:

a_lat=respons.getString("a_lat");
a_lon=respons.getString("a_lon");
b_lat=respons.getString("b_lat");
b_lon=respons.getString("b_lon");

// refresh marker
mMarkerA.setPosition(new LatLng(a_lat, a_lon));
mMarkerA.setPosition(new LatLng(b_lat, b_lon));
显示两个标记 要使用额外的填充显示两个标记,可以使用<
private void zoomToShowBothPoints(LatLng firstLatLng, LatLng secondLatLng) {
    LatLngBounds bounds =
        new LatLngBounds.Builder().include(firstLatLng).include(secondLatLng).build();

    Point displaySize = new Point();
    getWindowManager().getDefaultDisplay().getSize(displaySize);
    mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, displaySize.x - 20, displaySize.y - 20, 50));
  }
private Marker A;
private Marker B;
  A = mMap.addMarker(new MarkerOptions().position(a_local).title("a") 
            .snippet("xxx")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_yellow))).showInfoWindow();

   B = mMap.addMarker(new MarkerOptions().position(b_local).title("b")
            .snippet("yyy")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.markerb)))
                public void onResponse(JSONObject response) {

                    try {
                        JSONArray jsonArray = response.getJSONArray("locations");

                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject respons = jsonArray.getJSONObject(i);

                            a_lat=respons.getString("a_lat");
                            a_lon=respons.getString("a_lon");
                            b_lat=respons.getString("b_lat");
                            b_lon=respons.getString("b_lon");        

                            A.setLocation(LatLng(a_lat,a_lon));
                            B.setLocation(LatLng(b_lat,b_lon));

                            LatLngBounds.Builder builder = new LatLngBounds.Builder();
                            builder.include(A.getPosition());
                            builder.include(B.getPosition());
                            LatLngBounds bounds = builder.build();
                            CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 0);
                            mMap..moveCamera(cu);
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }