Java 如何将谷歌地图标记的纬度和经度发送到Firebase-android?
我想创建一个在线购物应用程序。我已经添加了一个MapActivity,以及当用户长时间单击某个点时在地图上添加标记的功能。我想将用户标记的纬度和经度发送到firebase,以存储在实时数据库中Java 如何将谷歌地图标记的纬度和经度发送到Firebase-android?,java,android,firebase,google-maps,firebase-realtime-database,Java,Android,Firebase,Google Maps,Firebase Realtime Database,我想创建一个在线购物应用程序。我已经添加了一个MapActivity,以及当用户长时间单击某个点时在地图上添加标记的功能。我想将用户标记的纬度和经度发送到firebase,以存储在实时数据库中 public void onMapReady(final GoogleMap googleMap) { mMap = googleMap; mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
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);
}
}
});
}
首先,定义
参考
到位置
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());
}
})
事实上,我不记得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);
}
class MyMapPoint(){
String selectedLat, selectedLong;
MyMapPoint(Long lat, Long long){
selectedLat = lat;
selectedLong = long;
}
}
MyMapPoint是一个数据类。应该是这样的
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);
}
class MyMapPoint(){
String selectedLat, selectedLong;
MyMapPoint(Long lat, Long long){
selectedLat = lat;
selectedLong = long;
}
}
您使用的是
Firestore
还是Realtime Database
?@GauravMall是一个标记变量。它是全局声明的。@GauravMall,它是实时数据库mate那么您收到的经度和纬度是多少?我是否需要插入更多代码才能将位置上载到数据库mate?还是就这些?就这些,很简单。您只需将它们存储为简单的值。@GauravMall firebase以长格式存储经度和纬度的值,因此您需要提供longI将它们存储为双值以提高准确性,这会影响什么吗?