【问题标题】:Android - How to show nearby user markers?Android - 如何显示附近的用户标记?
【发布时间】:2018-01-26 14:49:27
【问题描述】:

我有一个 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) {

        }
    });

}

非常感谢您在此问题上的时间和帮助。

【问题讨论】:

    标签: android google-maps google-maps-api-3 google-maps-markers


    【解决方案1】:

    你可以试试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);
    }
    

    【讨论】:

    • 我只需要change locationMarker = mMap.addMarker(markerOptions.visible(false));,这是一个完美的答案,非常感谢你^_^
    • 地图如何知道用户在哪里?不应该也有一些云功能吗?
    • @Tamim 您的应用如何检索用户位置?必须有一些云功能吧?
    【解决方案2】:

    简答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!
            }
        }
    }
    

    不要忘记您的活动到implements GoogleMap.OnMyLocationChangeListener

    希望这能解决您的问题。有关如何使用Google Maps API 的更多知识,请查看此link

    【讨论】:

    • 地图如何知道用户在哪里?不应该也有一些云功能吗?
    • 是的,我们必须在 firebase 上使用实时数据库才能拥有这样的功能。我现在正在研究这个,你有什么解决办法吗?谢谢
    猜你喜欢
    • 2020-02-24
    • 2016-01-07
    • 2020-01-24
    • 2018-03-22
    • 1970-01-01
    • 2014-09-14
    • 2016-12-13
    • 2021-10-01
    相关资源
    最近更新 更多