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 纬度和经度转换为双倍?