首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKCoordinateSpan (米)?

MKCoordinateSpan (米)?
EN

Stack Overflow用户
提问于 2011-09-11 22:41:37
回答 3查看 18.1K关注 0票数 28

我需要创建一个大约500米的MKCoordinateSpan

如何计算要传递给MKCoordinateSpan构造函数的值?

任何编程(Obj,.Net)语言的答案都很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-12 02:49:56

另一种选择是使用MapKit的MKCoordinateRegionMakeWithDistance函数:

代码语言:javascript
复制
MKCoordinateRegion rgn = MKCoordinateRegionMakeWithDistance(
    CLLocationCoordinate2DMake(someLatitude, someLongitude), 500, 500);

MKCoordinateSpan将在rgn.span

票数 103
EN

Stack Overflow用户

发布于 2011-09-11 23:34:39

除非你需要很高的精度,否则你可以用近似使它变得容易得多。第一个问题是找出代表500米的纬度的分数。很容易,因为纬度在任何地方都是一个常数,大约111公里。所以500米是.0045度纬度。

然后它变得更加困难,因为经度的长度取决于你所处的位置。它可以用

其中α是地球的赤道半径,6,378,137公里,b/a为0.99664719 (所有全球定位系统设备使用的WGC84球体模型的常数)和

其中phi是纬度的程度。

想象一下,你很幸运地来到了墨尔本,经度为37.783度。无论是北纬还是南纬,这里都不重要。贝塔的计算值为37.6899,其馀部分则解决了给出一个长度为88公里的纵向度。所以500米是一个度的.0057。

墨尔本- MKCoordinateSpan melbourne500MeterSpan = MKCoordinateSpanMake(.0045, .0057);的结果

您可以检查您的答案和代码用这个在线计算器

关于经度的wiki文章有更多的细节(这里是图像的来源)。

代码:

代码语言:javascript
复制
#define EARTH_EQUATORIAL_RADIUS (6378137.0)
#define WGS84_CONSTANT (0.99664719)

#define degreesToRadians(x) (M_PI * (x) / 180.0)

// accepts decimal degrees. Convert from HMS first if that's what you have
double spanOfMetersAtDegreeLongitude(double degrees, double meters) {

    double tanDegrees = tanf(degreesToRadians(degrees));
    double beta =  tanDegrees * WGS84_CONSTANT;
    double lengthOfDegree = cos(atan(beta)) * EARTH_EQUATORIAL_RADIUS * M_PI / 180.0;
    double measuresInDegreeLength = lengthOfDegree / meters;
    return 1.0 / measuresInDegreeLength;
}
票数 40
EN

Stack Overflow用户

发布于 2011-09-13 18:14:24

在MonoTouch中,然后使用此解决方案,您可以使用以下帮助方法:

代码语言:javascript
复制
    public static void ZoomToCoordinateAndCenter (MKMapView mapView, CLLocationCoordinate2D coordinate, double meters, bool showUserLocationToo, bool animate)
    {
        if (!coordinate.IsValid ())
            return;

        mapView.SetCenterCoordinate (coordinate, animate);
        mapView.SetRegion (MKCoordinateRegion.FromDistance (coordinate, meters, meters), animate);      
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7381783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档