从起始GPS坐标

时间:2018-03-19 14:22:23

标签: c# xamarin.forms gps maps

我正在构建一个基于地图的xamarin应用。我有一个我保存在数据库中的坐标列表。我想查询距离给定起始坐标x米范围内的所有坐标。我只是想知道如何获得我需要的纬度和经度来制定我的查询。我知道如何获得坐标之间的距离,但我得到的大多数其他搜索都返回了相同的公式。任何帮助,将不胜感激。非常感谢你!

我已经查看了以下帖子,这些帖子是我在发布此帖子时建议的:

how to check radius of 10 meter from x,y position - from GPS

Calculating gps coordinate radius

修改

进一步指明要求

我希望能够以2个数字范围结束,我可以用于这样的查询

" SELECT * FROM tbl_Coordinates WHERE Lat> = {MIN_LAT_OFFSET} AND Lat< = {MAX_LAT_OFFSET} AND Lng> = {MIN_LNG_OFFSET} AND Lng< = {MIN_LNG_OFFSET}"

我想避免查询数据库中的所有坐标并检查所有坐标的距离,看它们是否在半径范围内。

编辑2

在stackoverflow中弹出了一个新建议,似乎很有希望here

如果你们有更好/更准确的答案,我可以向他们敞开心扉。谢谢!

1 个答案:

答案 0 :(得分:0)

对于任何可能遇到此问题的人,我所寻求的答案来自here

答案给出了计算纬度和经度中KM /度数的公式

纬度= 10000/90公里 经度= 10000/90 km * cos(纬度)

我最终得到了这个代码,其中iLat和iLng是中心坐标

//This is in meters
        double iDistanceDegreeConverter = 10000.0 / 90.0 * 1000;
        double iLatOffset = iRadius / iDistanceDegreeConverter;
        double iLngOffset = iRadius / (Math.Cos(iLat) * iDistanceDegreeConverter);
        double iMaxLat = Math.Abs(iLat) + iLatOffset;
        double iMinLat = Math.Abs(iLat) - iLatOffset;
        double iMaxLng = Math.Abs(iLng) + iLngOffset;
        double iMinLng = Math.Abs(iLng) - iLngOffset;
        if (iLat < 0)
        {
            iMaxLat *= -1;
            iMinLat *= -1;
        }
        if (iLng < 0)
        {
            iMaxLng *= -1;
            iMinLng *= -1;
        }
        if (iMaxLat > 90)
        {
            double iOverflow = iMaxLat - 90;
            iMaxLat = 90 - iOverflow;
        }
        if (iMinLat < -90)
        {
            double iOverflow = -90 + iMinLat;
            iMinLat = -90 + iOverflow;
        }
        if (iMaxLng > 180)
        {
            double iOverflow = iMaxLng - 180;
            iMaxLng = 180 - iOverflow;
        }
        if (iMinLng < -180)
        {
            double iOverflow = -180 + iMinLng;
            iMinLng = -180 + iOverflow;
        }