将km转换为gps坐标
我必须看看是否有一些GPS坐标在我创建的圆中。当我说我正在创建那个圆时,我指的是:我有lat1,long1, 我的实际位置,我想测试是否有任何数据围绕这个位置,但将km转换为gps坐标,gps,Gps,我必须看看是否有一些GPS坐标在我创建的圆中。当我说我正在创建那个圆时,我指的是:我有lat1,long1, 我的实际位置,我想测试是否有任何数据围绕这个位置,但 不远一公里。我试着用圆不等式:(x2-a2)2+(y2-b2)2纬度/Lng坐标不适用于Phytagoras公式,因为地球是一个球体,而不是平面 请参阅本手册: 你需要一个距离方程,看看你的纬度/lng和圆心的纬度/lng之间的距离是否小于R。这并不是那么简单。通常不能使用欧几里德距离。我认为你可以这样做: 正确的方法 正确的方法是
不远一公里。我试着用圆不等式:
(x2-a2)2+(y2-b2)2纬度/Lng坐标不适用于Phytagoras公式,因为地球是一个球体,而不是平面
请参阅本手册:
你需要一个距离方程,看看你的纬度/lng和圆心的纬度/lng之间的距离是否小于R。这并不是那么简单。通常不能使用欧几里德距离。我认为你可以这样做:
正确的方法
正确的方法是计算大圆距离(地面上最短的步行距离),我从来没有真正理解过这一点,但是谷歌搜索很容易(adamk已经给了你一个链接)
懒惰的方式
假设你的点不是太靠近极点,而是彼此靠近。然后你可以使用纬度和经度,就像它们是欧几里德坐标一样。(这基本上是一些)。1度纬度将是(地球周长/360)长,1度经度将是(cos(纬度)*地球周长/360)长
完整的代码如下所示:
double distance_lazy(double lat1, double lon1, double lat2, double lon2){
double xDist = (lat2 - lat1) * EARTH_CIRCUMFERENCE / 360.0;
double yDist = cos(lat1) * (lon2 - lon1) * EARTH_CIRCUMFERENCE / 360.0;
return sqrt(xDist^2 + yDist^2);
}
如果你们之间的距离只有几公里,这对整个欧洲来说应该很好。。。差不多吧
“奇怪的定义”方式
你可以说的另一件事是,“距离”是两个点之间的直线长度,即使它穿过地球。然后计算点的三维坐标,然后计算它们的欧几里德距离
double distance_straight_line(double lat1, double lon1, double lat2, double lon2){
double x1 = cos(lat1) * cos(lon1) * EARTH_RADIUS;
double y1 = sin(lat1) * cos(lon1) * EARTH_RADIUS;
double z1 = sin(lon1) * EARTH_RADIUS;
double x2 = cos(lat2) * cos(lon2) * EARTH_RADIUS;
double y2 = sin(lat2) * cos(lon2) * EARTH_RADIUS;
double z2 = sin(lon2) * EARTH_RADIUS;
return sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2);
}
同样,这将像预期的那样对彼此接近的点起作用,这一次它们可以在世界任何地方。如果你给它的分数彼此相差很远,输出将是正确的,但毫无用处(除非你非常擅长挖掘)
希望有帮助。我正在尝试使用圆不等式:(x2-a2)2+(y2-b2)2