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

如何从google maps v2 android中的marker获取屏幕坐标

仲孙凡
2023-03-14

我有一个小的android问题(谷歌地图v2 api)

这是我的代码

GoogleMaps mMap;
Marker marker =  mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));

我试图找到一种方法来获取此标记对象的当前屏幕坐标(x,y)。

也许有人有一个想法?我尝试了getProject,但它看不见工作。谢谢!:)

共有2个答案

穆单鹗
2023-03-14

toScreenLocation似乎已被fromLatLngToPoint gmaps api doc for projection所取代:https://developers.google.com/maps/documentation/javascript/reference/image-overlay#Projection

黄查猛
2023-03-14

是的,使用投影类。更具体地说:

>

  • 获取地图的投影:

    Projection projection = map.getProjection();
    

    获取标记的位置:

    LatLng markerLocation = marker.getPosition();
    

    将位置传递给Projection.toScreenSet()方法:

    Point screenPosition = projection.toScreenLocation(markerLocation);
    

    仅此而已。现在屏幕位置将包含标记相对于整个Map容器左上角的位置:)

    请记住,投影对象只会在映射通过布局过程后返回有效值(即它具有有效的宽度高度设置)。您可能会得到(0,0),因为您试图太快访问标记的位置,就像在这种情况下:

    1. 通过膨胀从布局XML文件创建地图
    2. 初始化地图
    3. 向地图添加标记
    4. 在屏幕上查询地图的投影以获取标记位置

    这不是一个好主意,因为地图没有有效的宽度和高度设置。您应该等到这些值有效。解决方案之一是将OnGlobalLayoutListener附加到地图视图并等待布局过程解决。在膨胀布局并初始化地图后执行此操作-例如在onCreate()中:

    // map is the GoogleMap object
    // marker is Marker object
    // ! here, map.getProjection().toScreenLocation(marker.getPosition()) will return (0, 0)
    // R.id.map is the ID of the MapFragment in the layout XML file
    View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView();
    if (mapView.getViewTreeObserver().isAlive()) {
        mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                // remove the listener
                // ! before Jelly Bean:
                mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                // ! for Jelly Bean and later:
                //mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                // set map viewport
                // CENTER is LatLng object with the center of the map
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(CENTER, 15));
                // ! you can query Projection object here
                Point markerScreenPosition = map.getProjection().toScreenLocation(marker.getPosition());
                // ! example output in my test code: (356, 483)
                System.out.println(markerScreenPosition);
            }
        });
    }
    

    请通读评论以了解更多信息。

  •  类似资料:
    • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

    • 问题内容: 我正在开发一个需要屏幕DPI的应用程序。我检查了几个论坛,并获得了一个代码段,内容如下: 但是无论我的屏幕分辨率值是多少,该值都保持不变,为96。代码有什么问题? 对于同一件事,我得到了另一个代码,如下所示: 但是再一次,无论我的屏幕分辨率如何,返回的值都是相同的96。怎么了?我的代码是错误的还是我以错误的方式解释了它? 问题答案: 问题是没有人知道操作系统的确切物理尺寸,甚至连操作系

    • 本文向大家介绍java获取鼠标在屏幕上坐标的方法,包括了java获取鼠标在屏幕上坐标的方法的使用技巧和注意事项,需要的朋友参考一下 介绍 java作为目前最为流行的计算机开发语言之一,学习java是高薪就业的好选择,本文介绍的这个小工具主要是使用MouseInfo类实时获取鼠标的信息,然后再JDialog上显示出来。希望下面的内容介绍,能够让大家对于如何获取鼠标在屏幕上的坐标更加了解,一起来学习下

    • 问题内容: 我想知道是否可以使用tkinter计算屏幕尺寸。 我想要这样做,这样可以使程序在屏幕中央打开。 问题答案:

    • 问题内容: 我尝试从点击触摸屏的位置获取坐标,以在此时放置特定的UIImage。 我怎样才能做到这一点? 问题答案: 在子类中,例如: 这将返回一个视图坐标。 使用Swift 3语法更新 使用Swift 4语法更新

    • 在Android系统中如何获得屏幕的可用高度?我需要的高度减去状态栏/菜单栏或任何其他可能在屏幕上的装饰,我需要它为所有设备工作。另外,我需要在onCreate函数中了解这一点。我知道这个问题以前有人问过,但我已经尝试过他们的解决方案,但没有一个奏效。以下是我尝试过的一些事情: 我已经在API7-17上测试了这段代码。不幸的是,在API 13的底部水平和垂直都有额外的空间,而在API 10、8和7