获取偏移量以从起始 GPS 坐标计算 x 米半径内的所有 GPS 坐标
Get offset for calculating all GPS coordinates in an x meter radius from starting GPS coordinate
我正在构建一个基于地图的 xamarin 应用程序。我有一个保存在数据库中的坐标列表。我想查询从给定起始坐标起 x 米范围内的所有坐标。我只是想知道如何获得纬度和经度所需的偏移量来制定我的查询。我知道如何获得坐标之间的距离,但我得到的大多数其他搜索都返回了相同的公式。任何帮助,将不胜感激。非常感谢!
我已经检查了以下 post 是我在制作此 post 时提出的建议:
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
Whosebug 中弹出了一个看起来很有希望的新建议here
如果你们有 better/more 准确的答案,我欢迎他们。谢谢!
对于可能遇到此问题的任何人,我正在寻找的答案来自 here
答案给出了这个计算经纬度KM/degree的公式
纬度 = 10000/90 公里
经度 = 10000/90 公里 * 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;
}
我正在构建一个基于地图的 xamarin 应用程序。我有一个保存在数据库中的坐标列表。我想查询从给定起始坐标起 x 米范围内的所有坐标。我只是想知道如何获得纬度和经度所需的偏移量来制定我的查询。我知道如何获得坐标之间的距离,但我得到的大多数其他搜索都返回了相同的公式。任何帮助,将不胜感激。非常感谢!
我已经检查了以下 post 是我在制作此 post 时提出的建议:
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
Whosebug 中弹出了一个看起来很有希望的新建议here
如果你们有 better/more 准确的答案,我欢迎他们。谢谢!
对于可能遇到此问题的任何人,我正在寻找的答案来自 here
答案给出了这个计算经纬度KM/degree的公式
纬度 = 10000/90 公里 经度 = 10000/90 公里 * 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;
}