Android - Google maps V2 - 计算当前不在视野中的标记是屏幕的北、东、南还是西

Posted

技术标签:

【中文标题】Android - Google maps V2 - 计算当前不在视野中的标记是屏幕的北、东、南还是西【英文标题】:Android - Google maps V2 - Calculate whether a marker currently not in view is North, East, South or West of screen 【发布时间】:2015-12-29 12:14:35 【问题描述】:

我希望能够计算出我的地图视图上当前不在屏幕视图中的标记是否位于屏幕的上方、右侧、下方或左侧。我已经写了一些返回哪些标记当前在屏幕的当前边界内外的代码,但我有点不知道下一步该做什么,我想知道是否有任何方法可以做到这一点,或者是否有人做过这个之前?检查标记在视图中:

//-----check markers in view
public void checkMarkersInView() 

    //get current screen bounds
    LatLngBounds currentScreen = mapView.getProjection().getVisibleRegion().latLngBounds;

    //loop through each marker
    for(Marker mMarker : marker) 

        if(currentScreen.contains(mMarker.getPosition())) 
            // marker inside visible region

         else 
            // marker outside visible region

        
    

谢谢

【问题讨论】:

【参考方案1】:

您需要使用以下值计算方位。

private double angleFromLatLng(double lat1, double long1, double lat2, double long2) 

    double dLon = (long2 - long1);

    double y = Math.sin(dLon) * Math.cos(lat2);
    double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
            * Math.cos(lat2) * Math.cos(dLon);

    double brng = Math.atan2(y, x);

    brng = Math.toDegrees(brng);
    brng = (brng + 360) % 360;
    brng = 360 - brng;

    return brng;

注意: 向北 0 度,顺时针方向增加,即向东 90 度,继续前进

另外,如果您有存储纬度和经度值的 Location 对象(例如 locfirst 和 locsecond),您可以使用 Location 类中的以下函数。

float bearing = locfirst.bearingTo(locsecond);

参见参考here.

【讨论】:

我每次都通过相同的两点,但我似乎总是返回不同的轴承值:/

以上是关于Android - Google maps V2 - 计算当前不在视野中的标记是屏幕的北、东、南还是西的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Android API V2 检查 Google Maps 应用程序是不是被禁用

android google maps v2 在服务中

在 Google Maps Android SDK (v2) 中更改建筑物颜色

捕获 Google Map Android API V2 的屏幕截图

Google Maps Android v2 中的集群标记

如何在 Google Map Api V2 Android 中搜索?