从 Firebase 检索位置并将标记放在 android 的谷歌地图 api 上 [英] Retrieve location from Firebase and put marker on google map api for android

查看:21
本文介绍了从 Firebase 检索位置并将标记放在 android 的谷歌地图 api 上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建应用程序以在按下保存按钮时在 firebase 上存储位置并从 firebase 检索位置并在地图中显示所有图钉.我已经能够在带有纬度和经度的 Location 子项下将位置保存到 firebase,但我不知道如何获取值和图钉.我试图按照 firebase 手册上的方式进行操作,但没有奏效.任何人都可以帮助解决这个问题吗?

I am trying to create app to store location on firebase when save button is pressed and retrieve locations from firebase and display all pins in the map. I have been able to save locations to firebase under Location child with latitude and longitude, but I have no idea how to get the values and pins. I tried to do it the way firebase has it on its manual but it didn't work. Can anyone help with the problem?

这是我目前的代码:

public class MapsActivity extends FragmentActivity implements 
OnMapReadyCallback {
private GoogleMap mMap;
private final static int MY_PERMISSION_FINE_LOCATION = 101;
private Button mSaveButton;
private DatabaseReference mDatabase;
private DatabaseReference refDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to 
be used.
    SupportMapFragment mapFragment = (SupportMapFragment) 
    getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    mSaveButton = (Button) findViewById(R.id.Savebtn);
    mDatabase = 
FirebaseDatabase.getInstance().getReference().child("Navigation");
    refDatabase = 
FirebaseDatabase.getInstance().getReference().child("Location");
 }
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;


    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

        @Override
        public void onMapLongClick(LatLng point) {
            // TODO Auto-generated method stub

            // added marker saved as marker and coordinates passed to latlng
            Marker marker = mMap.addMarker(new 
           MarkerOptions().position(point));
            final LatLng latlng = marker.getPosition();

            mSaveButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view){
                    DatabaseReference newPost = mDatabase.push();
                    newPost.child("Location").setValue(latlng);

                }
            });

          }
       });

       if (ActivityCompat.checkSelfPermission(this, 
    Manifest.permission.ACCESS_FINE_LOCATION) ==
             PackageManager.PERMISSION_GRANTED) {
        mMap.setMyLocationEnabled(true);
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]
{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
        }

    }


}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case MY_PERMISSION_FINE_LOCATION:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
                        PackageManager.PERMISSION_GRANTED) {
                    mMap.setMyLocationEnabled(true);
                }

            }else {
                Toast.makeText(getApplicationContext(), "This requires location permissions to be granted", Toast
                        .LENGTH_LONG).show();
                finish();
            }
            break;
    }
  }
}

这是在 firebase 中保存位置的方式

this is how the location been saved in firebase

Data
  -Kidp45TdInOM3Bsyu2b
         Location
         latitude:19.772613777905196 
         longitude:-9.92741011083126
  -KidsmTExZY2KjnS7S-b
         Location
         latitude: 18.221073689785065
         longitude: -6.573890447616577
  -KidvmAgV0bm2uT_Pcdr
         Location
         latitude: 14.44608051870992
         longitude: -6.510856859385967

推荐答案

第一:你需要把结构改成这样:

First : you nedd to change the structure to be like this :

 Data
  Location
    -Kidp45TdInOM3Bsyu2b
       latitude:19.772613777905196 
       longitude:-9.92741011083126
    -KidsmTExZY2KjnS7S-b
       latitude: 18.221073689785065
       longitude: -6.573890447616577
    -KidvmAgV0bm2uT_Pcdr
       latitude: 14.44608051870992
       longitude: -6.510856859385967

这样做的方法是:

        mSaveButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                //change to refDatabase or mDatabase.child("Location")
                DatabaseReference newPost = refDatabase.push();
                //the push() command is already creating unique key
                newPost.setValue(latlng);

            }
        });

从您的 refDatabase 将标记放置到地图的代码是:

And the code for put marker to the map from your refDatabase is :

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

   ...

   refDatabase.addChildEventListener(new ChildEventListener() {
     @Override
     public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
          LatLng newLocation = new LatLng(
                        dataSnapshot.child("latitude").getValue(Long.class),
                        dataSnapshot.child("longitude").getValue(Long.class)
                    );
          mMap.addMarker(new MarkerOptions()
              .position(newLocation)
              .title(dataSnapshot.getKey()));
     }

     @Override
     public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {}

     @Override
     public void onChildRemoved(DataSnapshot dataSnapshot) {}

     @Override
     public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {}

     @Override
     public void onCancelled(DatabaseError databaseError) {}
  });
}

这篇关于从 Firebase 检索位置并将标记放在 android 的谷歌地图 api 上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆