如何将谷歌地图标记的纬度和经度发送到 Firebase - android? [关闭]

Posted

技术标签:

【中文标题】如何将谷歌地图标记的纬度和经度发送到 Firebase - android? [关闭]【英文标题】:How to send latitude and longitude of a Google Maps marker to Firebase - android? [closed] 【发布时间】:2019-12-27 16:11:42 【问题描述】:

我想创建一个在线购物应用。我已经添加了一个 MapActivity 以及当用户长按某个位置时在地图上添加标记的功能。我想将用户标记的纬度和经度发送到 firebase 以存储在实时数据库中。

public void onMapReady(final GoogleMap googleMap) 
    mMap = googleMap;

    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() 
        @Override
        public void onMapLongClick(LatLng latLng) 

            // First check if myMarker is null
            if (myMarker == null) 

                // Marker was not set yet. Add marker:
                myMarker = googleMap.addMarker(new MarkerOptions()
                        .position(latLng)
                        .title("Your marker title")
                        .snippet("Your marker snippet"));
                LatLng myLatLng = new LatLng(myMarker.getPosition().latitude,myMarker.getPosition().longitude);
             else 

                // Marker already exists, just update it's position
                myMarker.setPosition(latLng);
                LatLng myLatLng = new LatLng(myMarker.getPosition().latitude,myMarker.getPosition().longitude);

            
        
    );

【问题讨论】:

你使用的是Firestore还是Realtime Database @GauravMall 一个标记变量。它是全局声明的。 @GauravMall 和它的实时数据库伙伴 那么您收到的经度和纬度了吗? 【参考方案1】:

首先,将Reference 定义为locations

DatabaseReference myRef = FirebaseDatabase.getInstace().getRef().child("locations");

在这里你可以得到LatLng的位置:

LatLng myLatLng = new LatLng(myMarker.getPosition().latitude, myMarker.getPosition().longitude);

然后你将它存储在你的数据库中:

myRef.child("your_location").child("Latitude").set(myLatLng.getLatitute); 
myRef.child("your_location").child("Longitude").set(myLatLng.getLongitude);

要检索信息基本上是这样做的:

myRef.child("your_location").addListenerForSingleValueEvent(new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
        double latitude = dataSnapShot.getValue("Latitude", Double.class);
        double longitude = dataSnapShot.getValue("Longitude", Double.class);
        LatLng retrievedLang = new LatLng(latitude, longitude);
    

    @Override
    public void onCancelled(DatabaseError databaseError) 
        Log.w(TAG, "loadLocation:onCancelled", databaseError.toException());
    
)

【讨论】:

我是否必须再插入代码才能将位置上传到数据库伙伴?还是这一切? 就是这样,很简单。您只需将它们存储为简单的值。 @GauravMall firebase 以 Long 格式存储经度和纬度的值,因此您需要提供 long 我将它们存储为双精度值以获得更高的准确性,这会影响什么吗?【参考方案2】:

实际上我不记得Java语法,如果有一些奇怪的语法,请原谅我。但是逻辑应该是这样的。

    public void onMapLongClick(LatLng latLng) 
        if (myMarker == null) 
            ...
         else 
            ...
        
        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("myDatabase/someDirectory");

        MyMapPoint point = new MyMapPoint();
        point = new Point(latLng.latitude, latLng.longitude);
        usersRef.setValueAsync(point);
    

MyMapPoint 是一个数据类。它应该是这样的。

class MyMapPoint()
     String selectedLat, selectedLong;

     MyMapPoint(Long lat, Long long)
         selectedLat = lat;
         selectedLong = long;
     

【讨论】:

以上是关于如何将谷歌地图标记的纬度和经度发送到 Firebase - android? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将数据库中的多个纬度/经度点加载到谷歌地图标记中的好方法?

我想通过从 json 获取经度和纬度在谷歌地图上显示标记

移动谷歌地图标记点时用纬度和经度更新数据库

如何创建一个包含纬度和经度的数组并使用 for 循环在 android 中标记谷歌地图上的位置

使用标记从谷歌地图获取纬度/经度坐标

从谷歌标记获取纬度/经度