单击时获取存储的 LatLng 以在地图上显示位置
get stored LatLng to show location on map when clicked
我正在使用 Android PlacePicker 通过 place.getLatLng();
方法在我的 Firebase 数据库中存储位置的纬度和经度。
我还使用 place.getName();
方法存储了位置名称。
位置名称在用户 post 中可见,但纬度和经度不可见。我的意图是,如果任何用户单击查看器中的地点名称,他们将被带到 activity,PlacePicker 将在地图中显示该位置。
这里有一个 Firebase 的例子JSON
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"latLong" : "lat/lng: (-6.190593300000001,106.8061219)",
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
我知道如何将存储的纬度和经度额外发送给另一个activity,例如
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String latLng = dataSnapshot.child("latLong").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("LatLng",latLng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
但是我如何自动使用该 Lat 和 Long 值来自动让 PlacePicker 在 MapActivity 的地图中显示该位置?
谢谢!
首先,像这样更改架构
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"lat": "-6.190593300000001",
"lng": "106.8061219",
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
将它们视为两个单独的值,或者如果您希望将它们视为一个值,您可以像这样
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"coords": {
"lat": "-6.190593300000001",
"lng": "106.8061219",
}
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
查询:
对于架构的第一个版本:
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String lat = dataSnapshot.child("lat").getValue().toString();
final String lng = dataSnapshot.child("lng").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("lat",lat);
mapIntent.putExtra("lng",lng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
对于架构的第二个版本:
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String lat = dataSnapshot.child("coords").child("lat").getValue().toString();
final String lng = dataSnapshot.child("coords").child("lng").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("lat",lat);
mapIntent.putExtra("lng",lng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
您可以实施适合您的方案,但我建议根据组织偏好实施第二个方案。
要在下一个 activity 中显示它们,假设您在应用程序中设置了 Google 地图,请使用此代码:
@Override
public void onMapReady(GoogleMap map) {
map.addMarker(new MarkerOptions()
//get this LatLng values from the Intent
.position(new LatLng(<yourLat>, <yourLng>))
.title("Hello world"));
}
也尝试阅读此内容:https://developers.google.com/maps/documentation/android-api/marker
我正在使用 Android PlacePicker 通过 place.getLatLng();
方法在我的 Firebase 数据库中存储位置的纬度和经度。
我还使用 place.getName();
方法存储了位置名称。
位置名称在用户 post 中可见,但纬度和经度不可见。我的意图是,如果任何用户单击查看器中的地点名称,他们将被带到 activity,PlacePicker 将在地图中显示该位置。
这里有一个 Firebase 的例子JSON
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"latLong" : "lat/lng: (-6.190593300000001,106.8061219)",
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
我知道如何将存储的纬度和经度额外发送给另一个activity,例如
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String latLng = dataSnapshot.child("latLong").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("LatLng",latLng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
但是我如何自动使用该 Lat 和 Long 值来自动让 PlacePicker 在 MapActivity 的地图中显示该位置?
谢谢!
首先,像这样更改架构
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"lat": "-6.190593300000001",
"lng": "106.8061219",
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
将它们视为两个单独的值,或者如果您希望将它们视为一个值,您可以像这样
{
"dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d",
"image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b",
"coords": {
"lat": "-6.190593300000001",
"lng": "106.8061219",
}
"summary" : "yo",
"place" : "the biggest mall in Asia",
"uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2",
"username" : "Rambo"
}
查询:
对于架构的第一个版本:
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String lat = dataSnapshot.child("lat").getValue().toString();
final String lng = dataSnapshot.child("lng").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("lat",lat);
mapIntent.putExtra("lng",lng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
对于架构的第二个版本:
postRef = FirebaseDatabase.getInstance().getReference().child("posts");
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postRef.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String lat = dataSnapshot.child("coords").child("lat").getValue().toString();
final String lng = dataSnapshot.child("coords").child("lng").getValue().toString();
Intent mapIntent = new Intent(MainActivity.this, MapActivity.class);
mapIntent.putExtra("lat",lat);
mapIntent.putExtra("lng",lng);
startActivity(mapIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
您可以实施适合您的方案,但我建议根据组织偏好实施第二个方案。
要在下一个 activity 中显示它们,假设您在应用程序中设置了 Google 地图,请使用此代码:
@Override
public void onMapReady(GoogleMap map) {
map.addMarker(new MarkerOptions()
//get this LatLng values from the Intent
.position(new LatLng(<yourLat>, <yourLng>))
.title("Hello world"));
}
也尝试阅读此内容:https://developers.google.com/maps/documentation/android-api/marker