Android - 如何显示附近的用户标记?
Android - How to show nearby user markers?
我有一个 android 应用程序,用户可以在其中注册,当他们登录时,他们的位置可以通过地图上的标记看到,如图所示。但我只想显示 100 米内的附近标记。
请帮助我提供准确的编码部分和所有对象初始化。
这是我从数据库中获取所有用户标记(经纬度)的代码:
private void getNearbyMarkers(){
geoFireRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot locationSnapshot : dataSnapshot.getChildren()){
LocationData locations = locationSnapshot.getValue(LocationData.class);
final Double tempLat = Double.parseDouble(locations.getLatitude());
final Double tempLng = Double.parseDouble(locations.getLongitude());
final String uid = locations.getUid();
databaseReference3.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child(uid).child("name").getValue().toString();
String business = dataSnapshot.child(uid).child("business").getValue().toString();
LatLng allLatLang = new LatLng(tempLat,tempLng);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(allLatLang);
markerOptions.title(name);
markerOptions.snippet(business);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
locationMarker = mMap.addMarker(markerOptions);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
非常感谢您在这件事上的时间和帮助。
简答location.distanceTo(anotherLocation)
在 setupMap
中,我建议添加额外的侦听器,以简单的方式获取所有位置变化。
mMap.setMyLocationEnabled(true);
mMap.setOnMyLocationChangeListener(this);
然后在此侦听器中,您只需计算当前位置与目标之间的距离即可。以米为单位的距离。
@Override
public void onMyLocationChange(Location location) {
Location target = new Location("target");
for(LatLng point : new LatLng[]{POINTA, POINTB, POINTC, POINTD}) {
target.setLatitude(point.latitude);
target.setLongitude(point.longitude);
if(location.distanceTo(target) < METERS_100) {
// bingo!
}
}
}
不要忘记你的 activity 到 implements GoogleMap.OnMyLocationChangeListener
希望这能解决您的问题。如需进一步了解如何使用 Google Maps API look into this link
你可以试试SphericalUtil.computeDistanceBetween
,因为你需要添加依赖,
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.5+'
}
你可以在你的代码中这样尝试,
markerOptions.visible(false);// We dont need to show, if its less than 100 meter we can show, otherwise we will just create and we will make it visble or not later
locationMarker = mMap.addMarker(markerOptions);
LatLng yourLatLang = new LatLng([your lat],[your lang]);
if (SphericalUtil.computeDistanceBetween(yourLatLang, locationMarker.getPosition()) < 100) {
locationMarker.setVisible(true);
}
我有一个 android 应用程序,用户可以在其中注册,当他们登录时,他们的位置可以通过地图上的标记看到,如图所示。但我只想显示 100 米内的附近标记。
请帮助我提供准确的编码部分和所有对象初始化。
这是我从数据库中获取所有用户标记(经纬度)的代码:
private void getNearbyMarkers(){
geoFireRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot locationSnapshot : dataSnapshot.getChildren()){
LocationData locations = locationSnapshot.getValue(LocationData.class);
final Double tempLat = Double.parseDouble(locations.getLatitude());
final Double tempLng = Double.parseDouble(locations.getLongitude());
final String uid = locations.getUid();
databaseReference3.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child(uid).child("name").getValue().toString();
String business = dataSnapshot.child(uid).child("business").getValue().toString();
LatLng allLatLang = new LatLng(tempLat,tempLng);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(allLatLang);
markerOptions.title(name);
markerOptions.snippet(business);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
locationMarker = mMap.addMarker(markerOptions);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
非常感谢您在这件事上的时间和帮助。
简答location.distanceTo(anotherLocation)
在 setupMap
中,我建议添加额外的侦听器,以简单的方式获取所有位置变化。
mMap.setMyLocationEnabled(true);
mMap.setOnMyLocationChangeListener(this);
然后在此侦听器中,您只需计算当前位置与目标之间的距离即可。以米为单位的距离。
@Override
public void onMyLocationChange(Location location) {
Location target = new Location("target");
for(LatLng point : new LatLng[]{POINTA, POINTB, POINTC, POINTD}) {
target.setLatitude(point.latitude);
target.setLongitude(point.longitude);
if(location.distanceTo(target) < METERS_100) {
// bingo!
}
}
}
不要忘记你的 activity 到 implements GoogleMap.OnMyLocationChangeListener
希望这能解决您的问题。如需进一步了解如何使用 Google Maps API look into this link
你可以试试SphericalUtil.computeDistanceBetween
,因为你需要添加依赖,
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.5+'
}
你可以在你的代码中这样尝试,
markerOptions.visible(false);// We dont need to show, if its less than 100 meter we can show, otherwise we will just create and we will make it visble or not later
locationMarker = mMap.addMarker(markerOptions);
LatLng yourLatLang = new LatLng([your lat],[your lang]);
if (SphericalUtil.computeDistanceBetween(yourLatLang, locationMarker.getPosition()) < 100) {
locationMarker.setVisible(true);
}