当前位置: 首页 > 知识库问答 >
问题:

谷歌地图从Firebase数据库绘制多个标记

于正志
2023-03-14

在地图上绘制标记时遇到麻烦,我能够从Firebase获取我的用户的纬度和经度并将其存储到我的数组列表中,我的问题是我如何能够全局设置我的数组列表?这是我的代码。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private GoogleMap googleMap;
    private MarkerOptions options = new MarkerOptions();
    private ArrayList<LatLng> latlngs = new ArrayList<>();
    private ArrayList<String> Names = new ArrayList<>();
    String Lat ,Lon,Names1;
    double latitude , longitude;







    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);





        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("Positions");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot chidSnap : dataSnapshot.getChildren()) {

                    Lat = String.valueOf(chidSnap.child("Latitude").getValue());
                    Lon = String.valueOf(chidSnap.child("Longitude").getValue());
                    Names1 = String.valueOf(chidSnap.getKey());

                    latitude= Double.parseDouble(Lat);
                    longitude= Double.parseDouble(Lon);


                    latlngs.add(new LatLng(latitude, longitude));
                    Names.add(Names1);




                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });


       // System.out.println(Names);


    }









    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {



        mMap = googleMap;
        for (LatLng point : latlngs) {
            options.position(point);
            options.title("Users");
            options.snippet("someDesc");
            googleMap.addMarker(options);
        }


    }
}

我不知道这东西有什么问题,不知何故,我的地图没有显示标记,我的列表“latlngs”显示“0.0,0.0”我不知道如何全局设置我的latlngs,因为它在从Firebase获取数据的代码中。

共有1个答案

隆宏爽
2023-03-14

对Firebase的查询是一个异步过程。因此,您的数据更改可能是在onMapReady之后执行的。请尝试以下操作:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {

    for (DataSnapshot chidSnap : dataSnapshot.getChildren()) {

        ....
    }

    if(mMap != null) {
        for (LatLng point : latlngs) {
            options.position(point);
            options.title("Users");
            options.snippet("someDesc");
            mMap.addMarker(options);
        }
    }
} 

或者调用mapFragment.getMapAsync(MapsActivity.this);从内部onDataChange

 类似资料:
  • 我有代码允许我输入带有纬度和经度的位置名称,然后地图用标记显示位置。 我遇到的问题是,我希望地图显示所有位置,每个位置都有自己的标记。 下面是我用来获取地图上显示的一个位置的代码 非常感谢您的帮助 我没有错误只是显示了一个位置,我已添加到Firebasedatabase

  • 我正在寻找一个javascript库,支持通过邮政编码或城市作为参数的能力,并获得一个列表的x, y坐标绘制一个多边形使用谷歌地图? 这是否存在?谷歌地图API支持这样的查询吗?我正在寻找一个类似于谷歌用来在谷歌查询中绘制地图的坐标数组:

  • 我有一个JSON,它是: 我正在使用钩子来提取数据。 和已成功提取。 但当我修改时,将其代码为 我得到这个错误: “weather”未定义为no-undef 如何绘制?

  • 我有这样一段代码,它从数据库中获取详细信息,并将其放入php数组中,然后将该数组传递给javascript以生成Google地图: 我的问题是为什么地图上没有标记?没有返回错误,但也没有标记。我必须在php循环中移动javascript代码吗?如果我通知locations.length,我得到1作为locations.length。为什么js将位置数组计算为1个位置?提前谢谢!

  • 当在谷歌地图数据层上绘制多边形时,我想处理用户绘制第一个点、第二个点和随后的点时发生的事件,以便用户界面可以给出不同的用户指导,例如: 没有画点:点击画第一个点 绘制第一个点:点击绘制下一个点 画第二个点:点击添加另一个点或点击第一个点结束 使用数据库在数据层上绘制闭合点时,会发生“addfeature”事件。使用图形库绘制终点时,会出现不同的事件,例如polygoncomplete。 为了查看第

  • 问题内容: 我想在Google Maps android上显示带有多个标记的位置,问题是当我运行我的应用程序时,它只显示一个位置/标记,这是我的代码: 我不知道我的错在哪里,希望有人能帮助我解决我的问题,非常感谢你 问题答案: 用这个: 或者,您也可以使用以下命令: 其中 纬度 和 经度 是存储在数组列表中的具有不同名称的字符串.....