Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何获取当前位置附近1KM范围内的位置?_Ios_Sqlite_Location - Fatal编程技术网

Ios 如何获取当前位置附近1KM范围内的位置?

Ios 如何获取当前位置附近1KM范围内的位置?,ios,sqlite,location,Ios,Sqlite,Location,数据库中有一个表位置: id | latitude | longitude ---| -------- | -------- 1 | 45.0000 | 90.0000 ... 因此,我可以使用SQL查询我想要的位置: SELECT id FROM location WHERE latitude BETWEEN min_latitude AND max_latitude AND longitude BETWEEN min_longitude AND max_longitude; 其中,

数据库中有一个表位置:

id | latitude | longitude
---| -------- | --------
1  | 45.0000  | 90.0000
...
因此,我可以使用SQL查询我想要的位置:

SELECT id FROM location 
WHERE latitude BETWEEN min_latitude AND max_latitude
AND longitude BETWEEN min_longitude AND max_longitude;
其中,最小纬度、最大纬度、最小经度、最大经度表示当前位置附近1KM的4条边界

现在我想知道,如何使用当前位置获取最小纬度、最大纬度、最小经度、最大经度


我已经看到了这个问题的答案:,如果AllLocation太多,我认为这不是一个好的解决方案。

请注意,您所希望的最大和最小lat/lon方法选择的行与当前位置在一个框内,而不是如图所示在一个圆内。
挑战在于,在给定距离内,纵向增量(度)随纬度变化。这个代码将地球简化为一个完美的球体

    double centerLat = 45.0;
    double centerLon = 90.0;

    double d = 1000; // desired distance in meters

    double angle = 45 * M_PI / 180; // 45 degrees in radians
    double oneDegree = 111319.9; // distance in meters from degree to degree at the equator

    double maxLat = centerLat + (d / oneDegree) * sin(angle);
    double maxLon = centerLon + (d / (oneDegree*(cos(centerLat * M_PI / 180)))) *  cos(angle);
    double minLat = centerLat - (d / oneDegree)* sin(angle);
    double minLon = centerLon - (d / (oneDegree*(cos(centerLat * M_PI / 180)))) *  cos(angle);

看看大家好,如何得到常数
double one degree=111319.9
?我在维基百科上查到了:-)。如果你把地球的周长除以360,你就得到了。