Iphone 查找给定位置(纬度、经度)是否在两个坐标(路线me)的边界框内

Iphone 查找给定位置(纬度、经度)是否在两个坐标(路线me)的边界框内,iphone,geolocation,latitude-longitude,route-me,Iphone,Geolocation,Latitude Longitude,Route Me,我正在使用Route Me项目开发iPhone应用程序。 我正在使用一个名为“LatitudeLogitudeBoundingBoxForScreen”的方法,该方法返回一组两个坐标。在屏幕的纬度/经度中定义东北角和西南角。这似乎很有效 我的问题是如何确定给定点(纬度/经度)是否在这两个坐标(东北、西南)的边界内 非常感谢您的帮助。对于多边形中的一般点,假设一个简单的等角投影(x=lon,y=lat)似乎是可行的 由于您知道东北角和西南角,因此可以计算西北角和东南角。此外,请记住,边界多边形(长

我正在使用Route Me项目开发iPhone应用程序。 我正在使用一个名为“LatitudeLogitudeBoundingBoxForScreen”的方法,该方法返回一组两个坐标。在屏幕的纬度/经度中定义东北角和西南角。这似乎很有效

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


非常感谢您的帮助。

对于多边形中的一般点,假设一个简单的等角投影(x=lon,y=lat)似乎是可行的

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

如果边界框穿过180 lon线,则此选项将中断。简单的解决方法是,如果穿过180经度线的长方体在负经度上增加360度。这不是一个有效的导航点,但它使数学工作


这在两极也行不通。

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

    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;
双板条A、板条B、液化天然气A、液化天然气B、电流板条、电流lng;
车床西北角、西南角;
布尔值lat_OK,lng_OK,all_OK;
int t_分段,点;
t_segs=segments.size()-1;
当前纬度=当前纬度;
curr_lng=curr_LatLng.longitude;
lat_A=列出segm_点。获取(0)。纬度;
lng_A=列出segm_点。获取(0)。经度;
lat_B=列出segm_点。获取(t_segs)。纬度;
lng_B=列出所有点。获取(t_segs)。经度;
如果(纬度A>纬度B){
lat_OK=curr_latlat_B;
}否则{
lat_OK=curr_lat>lat_A&&curr_lat液化天然气B){
液化天然气正常=当前液化天然气<液化天然气A和当前液化天然气>液化天然气B;
}否则{
液化天然气正常=当前液化天然气>液化天然气A和当前液化天然气<液化天然气B;
}
全部正常=水平正常和液化天然气正常;
返回所有_OK;

要处理电杆,只需检查lat是否超过MAX\U lat或MIN\U lat。电杆周围的问题在于等矩形投影。想象一下地球上围绕着一根杆子的正方形。现在想象一下投影到平面地图上的边界框。对于极点,我会改变投影,以极点为中心。我明白你的意思。如果数据靠近这些区域,这只是一个特殊情况,你必须处理。在计算时一定要小心,因为cos(lat)在极点是0,并且您希望远离div/0。