首页 > 解决方案 > 地图标记未显示在确切位置

问题描述

我正在尝试从数据库中获取 lat long 并将其显示在 android google map 上。但标记未显示在经纬度所属的位置。我有多个 latlong 存储在数据库中。有时第一次尝试显示是正确的,但是当我获取其他位置时,它显示不正确并且标记被添加到边缘。我是初学者。我试图寻找解决方案,但找不到任何解决方案。任何帮助将不胜感激。以下是我的代码

private GoogleMap mMap;
Bundle extras;
public String loc="";
String ServerURL = "http://xyz.xy" ;
MarkerOptions place2;
double p1lat, p1long;
FusedLocationProviderClient fusedLocationProviderClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    fusedLocationProviderClient= LocationServices.getFusedLocationProviderClient( this );
    extras = getIntent().getExtras();
    loc= extras.getString("loc_id").toString();
    Toast.makeText( MapsActivity.this,"Intent data is:"+loc,Toast.LENGTH_LONG ).show();
    getLocLatLng(ServerURL);
}
@Override
public void onMapReady(GoogleMap googleMap) {
   place2 = new MarkerOptions().position(new LatLng(p1lat, p1long)).title("Location 2");
    mMap =googleMap;
    mMap.addMarker(new MarkerOptions()
            .position(place2.getPosition())
            .title("Your Current Location")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
    mMap.animateCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(p1lat, p1long), 12.0f));

}


public void getLocLatLng(String URL){
    RequestQueue requestQueue= Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest( Request.Method.POST, URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (!response.contains("No Results Found")) {
                        try {
                            JSONArray jsonArray = new JSONArray(response);
                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                                p1lat = Double.parseDouble(jsonObject1.getString( "lat" ));
                                p1long = Double.parseDouble(jsonObject1.getString( "long" ));
                            }
                            Toast.makeText( MapsActivity.this,"Latitude is:"+p1lat+"Longitude is: "+p1long,Toast.LENGTH_LONG).show();

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    else {
                        Toast.makeText(MapsActivity.this, "No Description found", Toast.LENGTH_LONG).show();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText( MapsActivity.this, "" + error, Toast.LENGTH_SHORT).show();
        }
    }

    ) {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("loc_id", loc);
            return params;
        }
    };
    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    stringRequest.setRetryPolicy(policy);
    requestQueue.add(stringRequest);

}

标签: androidmapsandroid-volley

解决方案


推荐阅读