Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何显示附近的用户标记?_Android_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Android-如何显示附近的用户标记?

Android-如何显示附近的用户标记?,android,google-maps,google-maps-api-3,google-maps-markers,Android,Google Maps,Google Maps Api 3,Google Maps Markers,我有一个android应用程序,用户可以在其中注册,当他们登录时,地图上的标记可以看到他们的位置,如图所示。但我只想显示100米范围内附近的标记 请帮我完成准确的编码部分和所有的对象初始化 以下是我从数据库获取所有用户标记(lat、lng)的代码: private void getNearbyMarkers(){ geoFireRef.addValueEventListener(new ValueEventListener() { @Override

我有一个android应用程序,用户可以在其中注册,当他们登录时,地图上的标记可以看到他们的位置,如图所示。但我只想显示100米范围内附近的标记

请帮我完成准确的编码部分和所有的对象初始化

以下是我从数据库获取所有用户标记(lat、lng)的代码:

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) {

        }
    });

}

非常感谢您在这件事上花费的时间和帮助。

简短回答
位置。距离(另一个位置)

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!
        }
    }
}
@覆盖
公共void onMyLocationChange(位置){
位置目标=新位置(“目标”);
for(LatLng点:新LatLng[]{POINTA、POINTB、POINTC、POINTD}){
目标设置纬度(点纬度);
设置经度(点经度);
if(位置距离(目标)<100米){
//宾果!
}
}
}
不要忘记执行GoogleMap.OnMyLocationChangeListener的活动


希望这能解决你的问题。要进一步了解如何使用,请查看此

,您可以尝试
SphereCalutil.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);
}
markerOptions.visible(false);//我们不需要显示,如果它小于100米,我们可以显示,否则我们将只是创造,我们将使其可见或不迟
locationMarker=mMap.addMarker(markerOptions);
LatLng yourLatLang=新LatLng([你的lat],[你的lang]);
if(SphereCalutil.ComputedDistanceBeween(yourLatLang,locationMarker.getPosition())<100){
locationMarker.setVisible(真);
}

我只需要
更改locationMarker=mMap.addMarker(markerOptions.visible(false))
这是一个完美的答案,非常感谢^ ^地图怎么知道用户在哪里?难道不应该有一些云功能吗?@Tamim你的应用程序如何检索用户位置?必须有一些云功能,对吗?地图如何知道用户在哪里?难道不应该有一些云功能吗?是的,我们必须使用firebase上的实时数据库才能有这样的功能。我正在研究这个问题,你有什么解决办法吗?谢谢