单击时获取存储的 LatLng 以在地图上显示位置
Posted
技术标签:
【中文标题】单击时获取存储的 LatLng 以在地图上显示位置【英文标题】:get stored LatLng to show location on map when clicked 【发布时间】:2017-04-07 01:50:09 【问题描述】:我正在使用 android PlacePicker 使用 place.getLatLng();
方法将位置的纬度和经度存储在我的 Firebase 数据库中。
我还使用place.getName();
方法存储了位置的名称。
该位置的名称在用户的帖子中可见,但纬度和经度不可见。我的意图是,如果任何用户在查看器中单击地点的名称,他们将被带到 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"
我知道如何将存储的 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)
);
);
但是我如何自动使用该 Lat 和 Long 值让 PlacePicker 在 MapActivity 的地图中自动显示该位置?
谢谢!
【问题讨论】:
在生产应用程序中使用此代码之前,请务必仔细阅读Places API policies。据我了解,您不能将数据存储超过 30 天。 【参考方案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
【讨论】:
嗨库尔特...感谢您的回答,但这是为了获取下一个活动的信息...我的问题是关于如何使用该信息在地图上显示放置图钉地点。但 1 票赞成伟大的推荐!如何区分经纬度条目?好像只能找到getLatLng();
方法
我误解了这个问题。对不起。
要设置它们,您可以使用 getLatLng().latitude 和 getLatLng().longitude。有关更多信息,请参阅:developers.google.com/android/reference/com/google/android/gms/…
没关系伙计...我现在也想出了如何分离坐标嘿嘿...只需要了解如何使用经纬度信息在地图中显示位置下一个活动。
甜...要试试这个。谢谢库尔特以上是关于单击时获取存储的 LatLng 以在地图上显示位置的主要内容,如果未能解决你的问题,请参考以下文章