Фрагмент карты Непосредственное перемещение камеры в текущее местоположение - PullRequest
0 голосов
/ 07 октября 2018

Я делаю код с помощью селектора мест во фрагменте карты, чтобы показать близлежащие места, но он не может напрямую переместить камеру в мое текущее местоположение телефона, я должен вручную ввести широту с помощью center = new lat long, но я хочу, чтобы он перемещался напрямую на основеместоположение телефона.

как я могу заставить камеру двигаться прямо к моему местоположению ??спасибо за помощь

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
    MapFragment mapFragment;
    GoogleMap gMap;
    MarkerOptions markerOptions = new MarkerOptions();
    CameraPosition cameraPosition;
    LatLng center, latLng;
    String title;

    public static final String ID = "id";
    public static final String TITLE = "name";
    public static final String LAT = "lat";
    public static final String LNG = "lng";

    private String url = "http://192.168.0.12/myjson/markers.php";

    String tag_json_obj = "json_obj_req";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

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

        center = new LatLng(-6.337800, 106.698990);
        cameraPosition = new CameraPosition.Builder().target(center).zoom(10).build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

        getMarkers();
    }

    private void addMarker(LatLng latlng, final String title) {
        markerOptions.position(latlng);
        markerOptions.title(title);
        gMap.addMarker(markerOptions);

        gMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(Marker marker) {
                Toast.makeText(getApplicationContext(), marker.getTitle(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    // Fungsi get JSON marker
    private void getMarkers() {
        StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                Log.e("Response: ", response.toString());

                try {
                    JSONObject jObj = new JSONObject(response);
                    String getObject = jObj.getString("wisata");
                    JSONArray jsonArray = new JSONArray(getObject);

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        title = jsonObject.getString(TITLE);
                        latLng = new LatLng(Double.parseDouble(jsonObject.getString(LAT)), Double.parseDouble(jsonObject.getString(LNG)));

                        // Menambah data marker untuk di tampilkan ke google map
                        addMarker(latLng, title);
                    }

                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Error: ", error.getMessage());
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

        AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
    }
}

1 Ответ

0 голосов
/ 07 октября 2018

Для начала вам нужно знать текущее местоположение.Для этого вам нужно использовать GoogleApiClient.Затем вы можете запустить карту в этом месте, используя CameraPosition.

. Следующий код сначала подключается к клиенту Google Api.При обратном вызове соединения запрашивает текущее местоположение в течение 1 секунды.Затем, наконец, анимация сопоставляется с последним доступным местоположением.

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        client = new GoogleApiClient.Builder(getContext())
                .addApi(LocationServices.API)
                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                    @Override
                    public void onConnected(@Nullable Bundle bundle) {
                        if (isResumed()) {
                            try {
                                LocationRequest request = new LocationRequest();
                                request.setInterval(1000);
                                request.setSmallestDisplacement(1);
                                LocationServices.FusedLocationApi.requestLocationUpdates(client, request, new LocationListener() {
                                    @Override
                                    public void onLocationChanged(Location location) {
                                        LatLng myLatLong = new LatLng(location.getLatitude(),
                                                location.getLongitude());
                                        CameraPosition cameraPosition = new CameraPosition.Builder().target(myLatLong).zoom(17).build();
                                        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
                                    }
                                });
                            } catch (SecurityException ex) {

                            }
                        }
                    }

                    @Override
                    public void onConnectionSuspended(int i) {

                    }
                }).build();
        client.connect();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...