MKMapView 如何将经度纬度转换回厘米?

Posted

技术标签:

【中文标题】MKMapView 如何将经度纬度转换回厘米?【英文标题】:MKMapView How-to convert from longitude latitude back to cm? 【发布时间】:2014-01-13 13:58:23 【问题描述】:

1) 我正在使用 MKMapView 在 MKOverlayView 中显示自定义图像(例如宽度 = 350 厘米,高度 = 230 厘米)。

2) 图像的中心现在位于经度=0 纬度=0,覆盖整个世界

4) 我将 MKPointAnnotation 放置在经度 = 60.749995 和纬度 =56.091651

现在我想将此点(经度,纬度)转换回 x,y,单位为厘米。 这样我就可以在服务器上创建一个带有图像顶部注释的 JPG。

那么如何计算 x,y 值?

感谢克雷格

类似:

CLLocationCoordinate2D coordinateOrigin = CLLocationCoordinate2DMake(90, -180);
CLLocationCoordinate2D coordinateMax = CLLocationCoordinate2DMake(-90, 180);


MKMapPoint maxMap=MKMapPointForCoordinate(coordinateMax);
MKMapPoint minMap=MKMapPointForCoordinate(coordinateOrigin);

double width = maxMap.x-minMap.x;
double height = maxMap.y-minMap.y;

MKMapPoint p =  MKMapPointForCoordinate(wanted_coord);//wanted_coord is the one needed
double pixel_x=p.x/width;
double pixel_y=p.y/height;

【问题讨论】:

【参考方案1】:

1) 你不是在处理厘米,而是在处理像素。图像在每个方向上都有一定数量的像素,厘米的物理测量值取决于您的屏幕/打印机的像素有多大。

2) 使用 MKMapPoints 通过 MKMapPointForCoordinate 函数将经纬度转换为像素。这将为您提供 x/y 坐标,您需要缩放这些值以适合您的自定义图像,因此您需要计算出它涵盖的 MKMapPoints。例如,如果您的图像覆盖了整个世界,您可以通过使用带有 (-180,-90) 的 MKCoordinateForMapPoint 和带有 (180,90) 的最大值来找到 MKMapPoint 的最小值。现在您将获得 MKMapPoint 的 x 和 y 的最大/最小值,您知道图像的最大/最小值,因此从一个缩放到另一个是微不足道的。

【讨论】:

差不多。最后两行应该是pixel_x = (p.x/width) * image_width)。此外,您还需要确保您的图像确实从坐标原点延伸到坐标最大值。此外,如果它们具有不同的原点(例如,0,0 位于地图中间但图像的左下角),您需要将像素偏移一半的宽度或高度。 你的权利!我一直在查看您在堆栈溢出时的其他答案!他们提供了很多帮助

以上是关于MKMapView 如何将经度纬度转换回厘米?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CLLocationCoordinate2D 纬度和经度转换为双倍?

如何将纬度和经度转换为莫顿码(z 阶曲线)

如何将纬度/经度对转换为 PostGIS 地理类型?

如何将极地系统转换为纬度和经度

如何使用 cartopy 将显示坐标转换为地理坐标(纬度、经度)?

将纬度/经度转换为地址 [重复]