【问题标题】:get notification when user comes near to a marker - osmdroid当用户靠近标记时收到通知 - osmdroid
【发布时间】:2018-10-03 22:30:03
【问题描述】:

我目前正在尝试构建一个应用程序,当用户靠近标记时,用户会收到通知,或者在我的情况下,我正在使用 Osmdroid 的 ItemizedOverlay,我想知道是否有办法做到这一点数百个标记,而无需在几分钟内清空电池。 我看到了一些方法,但是当你只有几个标记时,所有这些方法都只是针对这种情况。 如果有人可以帮助我,我会很高兴。

【问题讨论】:

  • 您需要多久检查一次“标记”在哪里,或者这是一个静态列表?您对“.. is near to a marker..”有什么标准?
  • @Barns 标记的位置不会改变,只会改变我自己的位置变化,靠近标记应该意味着 10-20 米

标签: android gps location osmdroid


【解决方案1】:

补充@Barns 的回答,2 条评论:

  • 使用osmdroid时,你没有LatLng,你有GeoPoint,
  • 而且您不需要编写自己的 getDistanceMeters,因为 GeoPoint 已经有了 这个方法:

    GeoPoint.distanceToAsDouble(最终 IGeoPoint 其他)

【讨论】:

    【解决方案2】:

    如果标记具有静态位置,则无需重复加载。

    如果您只想计算地球上两点之间的距离,并且拥有经纬度坐标,则无需任何 Google API 的地图或其他库。这只需要额外的开销和维护。只需像这样创建一个静态方法:

    public static double getDistanceMeters(LatLng pt1, LatLng pt2){
        double distance = 0d;
        try{
            double theta = pt1.longitude - pt2.longitude;
            double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
                    + Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude)) * Math.cos(Math.toRadians(theta));
    
            dist = Math.acos(dist);
            dist = Math.toDegrees(dist);
            distance = dist * 60 * 1853.1596;
        }
        catch (Exception ex){
            System.out.println(ex.getMessage());
        }
        return distance;
    } 
    

    那么你可以这样做:

    public static boolean checkDistanceIsClose(LatLng pt1, LatLng pt2, double distance){
        boolean isInDistance = false;
        try{
            double calcDistance = getDistanceMeters(pt1, pt2)
    
            if(distance <= calcDistance){
                isInDistance = true;
            }
        }
        catch (Exception ex){
            System.out.println(ex.getMessage());
        }
        return isInDistance;
    } 
    

    相同的算法适用于任何平台。只需将其翻译成适当的程序语言即可。

    【讨论】:

    • 问题是,我必须每隔几秒计算一次到所有标记的距离,而这样的效率不会那么高。
    • @huhn3k :: 你似乎有点困惑。每隔几秒对几百个 GPS 坐标执行上述计算所需的功率实际上非常小。另一方面,使用 GPS 传感器(这是获得 10-20 m 精度所需要的)每隔几秒获取一次 GPS 坐标是真正的耗电——这就是为什么 Google 试图阻止开发人员依赖严重依赖 GPS 传感器。在很短的时间间隔内获得精确的位置数据是您的问题——而不是上面描述的简单几何计算。
    • 是的,我有点困惑。你说得对。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多