使用由两个远点定义的半径绘制的 MKCircle 渲染不正确

Posted

技术标签:

【中文标题】使用由两个远点定义的半径绘制的 MKCircle 渲染不正确【英文标题】:MKCircle drawn with a radius defined by two far points renders incorrect 【发布时间】:2013-08-29 02:02:44 【问题描述】:

我创建了一个绘制 2 个点的地图显示,并希望创建一个以其中一个点为中心并让圆的边缘穿过另一个点的 MKCircle。这应该像创建一个半径等于两个点之间距离的圆并将圆围绕其中一个点居中一样简单。这似乎在较小的距离上工作得很好,但是在一定距离之后,圆的半径不再与第二点匹配。 (在我的测试中,我在 LA 和 NY 上绘制了一个点)。

我的半径以米为单位使用:

CLLocationDistance dist = [loc1 distanceFromLocation:loc2];
NSLog(@"dist: %f", dist);

我正在使用以下方法绘制圆圈:

MKCircle *circle = [MKCircle circleWithCenterCoordinate:coord1 radius:dist];
[circle setTitle:@"background"];
[mMapView addOverlay: circle];
MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:coord2 radius:dist];
[circleLine setTitle:@"line"];
[mMapView addOverlay: circleLine];

我在这里缺少什么吗?让圆圈关闭但稍微偏离一点是非常令人沮丧的。在较小的距离上,我可以放大最大数量并让大头针准确地接触我的圆圈的外线。

【问题讨论】:

【参考方案1】:

问题可能是因为纽约和洛杉矶位于不同的纬度,并且在地图上以赤道为中心的半径为 X 米的圆比靠近两极且半径相同的另一个圆要小。需要图片的看本页第二张图http://www.gpsvisualizer.com/examples/range_rings.html

那么如何获得正确的半径呢?如果您知道要显示的缩放级别,可以试试这个(完全未经测试的)算法:

1. Convert the two geo-points to map points
2. Workout the distance in map points
3. use that distance to create a new map point at the same y coordinate offset from the center point (full left or full right won't matter)
4. convert this point to a geo-point
5. workout the distance between it at the center geo-point
6. use that as your radius.

【讨论】:

以上是关于使用由两个远点定义的半径绘制的 MKCircle 渲染不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用 UISlider 在 MKMapView 上将半径更改为 MKCircle

获取多边形的中心和最远点以在mysql中按半径扩展区域

iOS - 添加和删除 MKCircle 覆盖到 MapView 导致故障

MK 圆 - 笔画宽度相当于米

消防 直径性质

使用 SceneKit 在两点之间绘制一条线