Сохраните LatLng, чтобы показать местоположение на карте при нажатии
Я использую Android PlacePicker для хранения широты и долготы местоположения в моей базе данных Firebase, используя place.getLatLng();
метод.
Я также сохранил название места, используя place.getName();
метод.
Название местоположения отображается в сообщении пользователя, а Широта и Долгота - нет. Мое намерение состоит в том, что в случае, если любой пользователь щелкнет по названию места в окне просмотра, они будут перенаправлены в действие, где PlacePicker покажет это место на карте.
вот пример пожарной базы 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"
}
Я знаю, как отправить сохраненный Lat и Long в качестве дополнительного к другому виду деятельности, например
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) {
}
});
}
});
но как мне автоматически использовать эти значения широты и долготы, чтобы PlacePicker автоматически отображал это местоположение на карте в MapActivity?
Спасибо!
1 ответ
Во-первых, измените свою схему следующим образом
{
"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) {
}
});
}
});
Вы можете реализовать то, что будет работать для вас, но я предлагаю второй для организационных предпочтений.
Чтобы показать их в следующем упражнении, предполагая, что в вашем приложении настроены 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