0

好的,所以我对在 Stack Overflow 上提问还是很陌生,所以请客气 :)

我有一个问题,我已经尝试解决了一个月,结果一次又一次地失败。我发现了各种与此有些相似的问题,但没有什么让我印象深刻的答案。

到目前为止,我发现的最接近的是: 将 GPS 坐标转换为坐标平面

简而言之,我需要知道的是 GPS 坐标是在椭圆上还是在椭圆内。

知道:

  • 椭圆的宽度(以米为单位)
  • 椭圆的高度(以米为单位)
  • 椭圆中心的 GPS 坐标(可能是坐标系上的 [0,0])
  • 测试点GPS坐标
  • 测试点角度
  • 到测试点的距离

未知/需求:

  • 椭圆上点的 GPS 坐标与测试点角度
  • 到椭圆上的点与测试点角度的距离

出于某种原因,请提供帮助,我只是无法围绕这个数学思考。


更新: 为了添加更多信息,在宏伟的计划中,这些值都非常小。

例如:如果用户想知道另一个用户是否进入了某个公园/场地/地理围栏区域或某些其他类型的物理区域。在这种情况下,物理区域被设计为椭圆。

另外,这是用 Objective-C 编写的。下面,您将看到一个随机的“+90”度,这是因为当我希望它是 Unit-Circle "Normal" 时,底层机制将 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 的低级定位中得到了处理。

有人可以帮忙吗?

4

2 回答 2

0

I have solved this by using some mathematical calculations from Google and guidance from the (very helpful) following question: How to determine if a latitude & longitude is within an ellipse

I also used this reference for the Foci calculations: http://www.mathopenref.com/ellipsefoci.html

To quote, from Cody in the link, the primary logic: "My ellipse is relatively small so I assumed it was a true (flat) ellipse. I was able to locate the lat lon of the foci of the ellipse then if the sum of the distances from the point of interest to each focus is less than 2a (the major axis radius), then it is within the ellipse."

I do appreciate the suggestions presented! Thank You!

于 2013-04-24T00:02:21.060 回答
0

解决此类任务的一种方法始终有效:
1) 将 lat,lon 转换为基于米的笛卡尔坐标系 (4-5) 行代码。
在您的情况下,我会在转换代码中使用椭圆中心作为“中心”(例如,圆柱等距投影需要中心纬度)

2)然后使用学校数学,解决任务:使用椭圆方程。

这一切都假设椭圆轴平行于赤道。如果不更新您的问题。

于 2013-04-15T09:18:35.257 回答