我有以下内容:
- 一张图片(手绘 map ),面积大约为 600x400 米。该图像绘制在 Google map 图 block 之上。
- 此图像角的纬度/经度(来自 Google map )。或者换句话说,我有图像的南北纬度和东西经度。
- 来自 iPhone 的 CoreLocation 的纬度/经度坐标。
我如何在此图像上绘制一个点(如果超出范围,则什么也不画),代表来自 CoreLocation 的坐标?
额外的好处:如果坐标超出图像范围,则在 map 边缘绘制一个箭头,指向坐标。
我想在不使用像 proj 这样的库的情况下执行此操作,以便不必捆绑大型库,并了解我在做什么以及为什么。
正如您可能已经猜到的那样,我正在用 Objective-C 编写此代码。不过,您的答案不一定非要使用 Objective-C。
最佳答案
如果我理解正确的话,你需要做两件事。第一种是将您的自定义图像放入 map View 中,并让您的自定义图 block 显示在正确的坐标处,然后进行平移、缩放等操作。您需要做的第二件事是在某个经纬度的图像上画一个点。
你需要的是custom overlays ,适用于 iOS 4 及更高版本。了解自定义覆盖的最佳位置是 WWDC 2010 video称为“第 127 节课 - 使用叠加层自定义 map ”。也有可用于视频的自定义代码。在视频中,演示者创建了一个自定义 map 并将其嵌入到 MKMapView 中。他还描述了一种可以用来制作瓷砖的工具(将它们切割、将它们的形状放入墨卡托投影并正确命名)。他的 map 是从海洋 map 扫描而来,然后放置在普通 map View 之上。
您可以使用 boundingMapRect
通过将自定义 map 的边界转换为点来创建边界矩形。您可以使用 MKMapPointForCoordinate
和 MKCoordinateForMapPoint
在点和坐标之间进行转换。
至于在 map 上绘制一个点,您可以通过几种方式完成。最简单的方法是只使用自定义的 MKAnnotationView
和一个点作为它的图像。这样图像就不会在放大时变大或变小。如果你想让点变大或变小,你也应该使用自定义叠加层。您可以轻松地使用 MKCircleView
,它是 MKOverlayView
对于箭头,您可以使用普通 View 并根据出界点的方向旋转它(并将其放置在屏幕的一侧)。使用 MKMapPointForCoordinate
,然后从 View 中心计算方向。
但是您最好的来源是那个视频。他深入介绍了整个过程,并提供了一个可用应用程序的源代码,这是您自己的 map 所需资源的 90%。
关于objective-c - 在图像上绘制纬度/经度点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691979/