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

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

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

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

enter image description here

这是我从数据库中获取所有用户标记(经纬度)的代码:

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

        }
    });

}

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

最佳答案

你可以尝试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 - 如何显示附近的用户标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45747796/

相关文章:

android - 我应该将我的 freetype 字体加载器指向哪里?

javascript - Oracle Apex 中的反向地理编码(来自可拖动标记)

javascript - 访问时 map 不显示

javascript - ....未捕获的类型错误 : Cannot read property '__e3_' of null

android - SQLite 数据库查询非常慢(SQLite Asset Helper)

android - 如何在 editText 处于焦点时隐藏键盘

java - Oreo 中我自己的 URI 上的 ContentProvider.notifyChange 的安全异常

css - 选择 ElementA 内不在 Element 内的每个元素,其中 Element 在 ElementS 内

javascript - 切换 Google map 标记

javascript - 有没有办法动态地在谷歌地图 V3 中放置不同的标记?