【问题标题】:Finding if a given position (lat, lon) is within the BoundingBox of two coordinates (route-me)查找给定位置 (lat, lon) 是否在两个坐标 (route-me) 的 BoundingBox 内
【发布时间】:2011-07-12 12:21:41
【问题描述】:

我正在使用 Route-Me 项目开发 iPhone 应用程序。 我正在使用一种名为“latitudeLongitudeBoundingBoxForScreen”的方法,它返回一组两个坐标。以纬度/经度定义屏幕的东北角和西南角。这似乎工作正常。

我的问题是如何确定给定点(纬度/经度)是否在这两个坐标(东北、西南)的边界内?

非常感谢您的帮助。

【问题讨论】:

    标签: iphone geolocation latitude-longitude route-me


    【解决方案1】:

    对于多边形中的一般点,Point Inclusion Test 似乎在假设一个微不足道的 Equirectanglular 投影(x = lon,y = lat)的情况下工作。

    由于您知道东北角和西南角,因此您可以计算西北角和东南角。另外,请记住,您的边界多边形(框)必须遵循绕线约定(您不能在点包含测试中抛出点)。

    如果边界框越过 180 lon 线,这将中断。简单的解决方法是,如果越过 180 lon 线的框将 360 添加到负经度。这不是一个有效的导航点,但它使数学工作。

    这也不适用于两极。

    【讨论】:

    • 要处理两极,您只需要检查纬度是否超过 MAX_LAT 或 MIN_LAT。
    • 两极周围的问题在于球面投影。想象一个围绕地球上极点的正方形。现在想象一下投影到平面地图上的边界框。对于两极,我会改变以两极为中心的投影。
    • 我明白你在说什么。如果数据靠近这些区域,这只是您必须处理的一种特殊情况。在计算方面绝对需要小心,因为 cos(lat) 在两极处为 0,您希望远离 div/0。
    【解决方案2】:

    我知道已经过去了很长时间,但也许有人仍然感兴趣。

        Double lat_A, lat_B,lng_A, lng_B, curr_lat,curr_lng;
        LatLng nw_corner, sw_corner;
        Boolean lat_OK,lng_OK,all_OK;
        int t_segs, points;
        t_segs = segments.size()-1;
        curr_lat = curr_LatLng.latitude;
        curr_lng = curr_LatLng.longitude;
        lat_A = list_segm_points.get(0).latitude;
        lng_A = list_segm_points.get(0).longitude;
        lat_B = list_segm_points.get(t_segs).latitude;
        lng_B = list_segm_points.get(t_segs).longitude;
    
        if (lat_A > lat_B ) {
            lat_OK = curr_lat < lat_A && curr_lat > lat_B;
        } else {
            lat_OK = curr_lat > lat_A && curr_lat < lat_B;
        }
        if (lng_A > lng_B ) {
            lng_OK = curr_lng < lng_A && curr_lng > lng_B;
        } else {
            lng_OK = curr_lng > lng_A && curr_lng < lng_B;
        }
        all_OK = lat_OK && lng_OK;
        return all_OK;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2016-02-20
      • 2011-03-31
      相关资源
      最近更新 更多