好的,所以我还是新问一下Stack Overflow上的问题,所以请你好一点:)
我有一个问题,我一直试图解决一个月,结果一次又一次失败。我发现了与此类似的各种问题,但没有任何事情让我感到震惊。
到目前为止,我发现的最接近的是: Convert GPS coordinates to coordinate plane
简而言之,我需要知道的是GPS坐标是在椭圆上还是在椭圆内。
的已知,:
UNKNOWNS / NEEDS:
请帮忙,因为某些原因,我无法将我的大脑包围在这个数学中。
<小时/>
更新: 要添加更多信息,这些值在宏观方案中都非常小。
举个例子: 如果用户想知道另一个用户是否已进入某个公园/场/地理围栏区域或某些其他类型的物理区域。在这种情况下,物理区域设计为椭圆形。
另外,这是用Objective-C编写的。下面,你会看到一个随机的“+90”度,这就是当我希望它是单位圆“正常”时,潜在的机制看到0度为北(导航)。
相关守则与讨论:
- (BOOL)isLocation:(CLLocation *)location withinEllipse:(Ellipse *)ellipse
{
BOOL locationIsWithinEllipse = NO;
double ellipseWidth = ellipse.width;
double ellipseHeight = ellipse.height;
CLLocationDegrees locationAngleDegrees = 360 - ((int)([self headingBetweenCoordinate1:location.coordinate coordinate2:ellipse.locationCenter.coordinate] + 90) % 360);//Invert Direction
double xOffsetInMeters = (ellipseWidth/2) * COS(DEGREES_TO_RADIANS(locationAngleDegrees));
double yOffsetInMeters = (ellipseHeight/2) * SIN(DEGREES_TO_RADIANS(locationAngleDegrees));
// The logic below will currently grab the Top-Right point as if it were a box, not the point on the Ellipse,
// This is where things are broken. I need this to be the GPS Coordinate of the Point on the Ellipse with angle (locationAngleDegrees)
// Grab the Coordinate on the Ellipse in the heading of the Test Point
CLLocationDegrees pointLat = [ellipse.locationCenter addToLocationDistanceInMeters:yOffsetInMeters withBearingInDegrees:0].coordinate.latitude;
CLLocationDegrees pointLong = [ellipse.locationCenter addToLocationDistanceInMeters:xOffsetInMeters withBearingInDegrees:90].coordinate.longitude;
CLLocation * testPointOnEllipseLocation = [[CLLocation alloc] initWithLatitude:pointLat longitude:pointLong];
// Just check if the Test Point is closer than the Distance of the Ellipse Point
if(ABS([location distanceFromLocation:ellipse.locationCenter]) <= ABS([testPointOnEllipseLocation distanceFromLocation:ellipse.locationCenter]))
{
locationIsWithinEllipse = YES;
}
return locationIsWithinEllipse;
}
<小时/>
更新:
我仍然试图让这个数学正确。我理解如何使用“学校数学”完成它,但是如何将其应用于示例中的代码?此外,我认真地不理解所有这些旋转的东西,因为我已经编写了所有代码,不知道任何旋转。我相信这一切都是在Apple的低级位置处理的。
有人可以帮忙吗?
答案 0 :(得分:0)
解决此类任务的一种方法始终有效:
1)将lat,lon转换为基于仪表的笛卡尔坐标系(4-5)代码行。
在您的情况下,我将椭圆中心用作转换代码中的“中心”(例如,圆柱等距投影需要中心纬度)
所有人都认为椭圆与瞄准器平行。如果没有更新您的问题。
答案 1 :(得分:0)
我通过使用谷歌的一些数学计算和(非常有用的)以下问题的指导来解决这个问题: How to determine if a latitude & longitude is within an ellipse
我还将这个参考用于焦点计算:http://www.mathopenref.com/ellipsefoci.html
引用来自Cody的链接,主要逻辑: “我的椭圆相对较小,所以我认为它是一个真正的(平面)椭圆。我能够找到椭圆焦点的纬度,然后如果从感兴趣点到每个焦点的距离之和小于2a(长轴半径),然后它在椭圆内。“
我很欣赏所提出的建议!谢谢!