objective-c - 在图像上绘制纬度/经度点

标签 objective-c math map gis trigonometry

我有以下内容:

  • 一张图片(手绘 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 的边界转换为点来创建边界矩形。您可以使用 MKMapPointForCoordinateMKCoordinateForMapPoint 在点和坐标之间进行转换。

至于在 map 上绘制一个点,您可以通过几种方式完成。最简单的方法是只使用自定义的 MKAnnotationView 和一个点作为它的图像。这样图像就不会在放大时变大或变小。如果你想让点变大或变小,你也应该使用自定义叠加层。您可以轻松地使用 MKCircleView,它是 MKOverlayView

的子类

对于箭头,您可以使用普通 View 并根据出界点的方向旋转它(并将其放置在屏幕的一侧)。使用 MKMapPointForCoordinate,然后从 View 中心计算方向。

但是您最好的来源是那个视频。他深入介绍了整个过程,并提供了一个可用应用程序的源代码,这是您自己的 map 所需资源的 90%。

关于objective-c - 在图像上绘制纬度/经度点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691979/

相关文章:

iphone - 判断ivar是否为BOOL

SQL XML 或 JSON 通过 ASP.NET 返回到 Objective-C

objective-c - NSJSONSerialization 中不可变的 NSJSONReadingOptions

objective-c - 如何从 IBAction 方法获取事件

javascript - 有没有更好的方法来查询出双for循环的数据替换?

java - 使用带通配符的通用 map 的问题

c++ - 遍历 C++ map<int, list<int>>

python - Pyplot 如何绘制数学艺术图

c# - 交互式曲线图

f# - 是在 F# map 上进行迭代还是设置有序遍历?