从Firebase获取坐标并在Google地图上绘制它们并在它们之间绘制路线

时间:2017-09-24 20:31:22

标签: android google-maps firebase firebase-realtime-database geolocation

我需要从Firebase数据库中检索坐标,并将它们绘制为Google地图上的标记,并在它们之间绘制路线。第一个代码片段显示检索坐标并将其存储到Double变量

的代码
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("location");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                startLatFB = (Double) dataSnapshot.child("startLat").getValue();
                startLonFB = (Double) dataSnapshot.child("startLon").getValue();
                endLatFB = (Double) dataSnapshot.child("endLat").getValue();
                endLonFB = (Double) dataSnapshot.child("endLon").getValue();

                Log.d("startLat", startLatFB.toString());
                Log.d("startLon", startLonFB.toString());
                Log.d("endLat", endLatFB.toString());
                Log.d("endLon", endLonFB.toString());

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

但是,第一个代码片段在OnMapReady函数中。 下面显示了第二个代码段

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

        UiSettings uiSettings = googleMap.getUiSettings();
        uiSettings.setZoomControlsEnabled(true);

        //Initialize Google Play Services
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                //Location Permission already granted
                buildGoogleApiClient();
                mMap.setMyLocationEnabled(true);
            } else {
                //Request Location Permission
                checkLocationPermission();
            }
        }
        else {
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true);
        }
        //-------------

        DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("location");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                startLatFB = (Double) dataSnapshot.child("startLat").getValue();
                startLonFB = (Double) dataSnapshot.child("startLon").getValue();
                endLatFB = (Double) dataSnapshot.child("endLat").getValue();
                endLonFB = (Double) dataSnapshot.child("endLon").getValue();

                Log.d("startLat", startLatFB.toString());
                Log.d("startLon", startLonFB.toString());
                Log.d("endLat", endLatFB.toString());
                Log.d("endLon", endLonFB.toString());


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


                if (markerPoints.size() > 1) {
                    markerPoints.clear();
                    mMap.clear();
                }


                LatLng start_latLng = new LatLng(startLat, startLon);
                LatLng waypoint_latLng = new LatLng(wayPointLat, wayPointLon);
                LatLng end_latLng = new LatLng(endLat, endLon);


                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(start_latLng, 12));

        // Adding new item to the ArrayList
                markerPoints.add(start_latLng);
                markerPoints.add(end_latLng);


                // Creating MarkerOptions
                MarkerOptions options = new MarkerOptions();
                MarkerOptions optionsTwo = new MarkerOptions();


                BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.startlocation);
                BitmapDescriptor icon2 = BitmapDescriptorFactory.fromResource(R.drawable.endlocation);

                // Setting the position of the marker
                options.position(start_latLng);
                optionsTwo.position(end_latLng);


                if (markerPoints.size() == 1) {
                    options.icon(icon);
                } else if (markerPoints.size() == 2) {
                    options.icon(icon2);
                }

                // Add new marker to the Google Map Android API V2
                mMap.addMarker(options);
                mMap.addMarker(optionsTwo);




                // Checks, whether start and end locations are captured
                if (markerPoints.size() >= 2) {
                    LatLng origin = (LatLng) markerPoints.get(0);
                    LatLng dest = (LatLng) markerPoints.get(1);


                    // Getting URL to the Google Directions API
                    String url = getDirectionsUrl(origin, dest, waypoint);

                    DownloadTask downloadTask = new DownloadTask();

                    // Start downloading json data from Google Directions API
                    downloadTask.execute(url);
                }

    }

我的主要目标是从OnDataChanged方法获取变量startLatFB,startLonFB,endLatFB,endLonFB并将其声明为LatLng start_latLng& LatLng end_latLng

我怎样才能做到这一点?

0 个答案:

没有答案