带有世界地图的uiimageview上的Swift绘图坐标
Posted
技术标签:
【中文标题】带有世界地图的uiimageview上的Swift绘图坐标【英文标题】:Swift plot coordinates on uiimageview with world map 【发布时间】:2017-09-04 02:46:49 【问题描述】:我正在尝试在包含世界地图的UIImage
上绘制地球上的一些坐标。 (我不想用地图)
请参阅下面的 UIImageView 示例:
如您所见,它运行良好,但坐标和 X Y 的映射不正确!
Amsterdam
的坐标是:(52.36666489, 4.883333206),Center
的坐标是 (0,0)。
我已经做了以下事情来尝试实现这一点,但不幸的是这没有奏效:
-
我首先尝试“标准化”坐标,因为纬度范围从
-90
到90
和纬度-180
到180
。这是通过在真实纬度上加上 90 和在真实经度上加上 180 来完成的,这会产生“标准化”版本:
let normalizedLat = location.coordinate.latitude + 90.0.
let normalizedLng = location.coordinate.longitude + 180.0
-
之后,我计算了
normalizedLat
和 normalizedLng
应使用的比例因子:
let heightScaleFactor = mapImageView.frame.height / 180.0
let widthScaleFActor = mapImageView.frame.width / 360.0
还有 3. 之后,我得到了比例因子,我终于可以通过以下方式计算坐标:
let x = Double(widthScaleFActor * CGFloat(normalizedLng))
let y = Double(heightScaleFactor * CGFloat(normalizedLat))
dot.frame = CGRect(x: x, y: y, width: Double(dot.frame.width), height: Double(dot.frame.height))
但出于某种奇怪的原因,阿姆斯特丹不在阿姆斯特丹现场,而中心也不在中心现场。
我很确定我的计算出错了。有什么想法吗?
【问题讨论】:
嘿,我需要像链接中的那样构建一张地图。您的解决方案可以提供帮助吗? ***.com/questions/65335361/… 很少,我认为效果很好,但是我在图像缩放等方面遇到了很多问题。如果您可以为图像设置固定大小,那么它会更容易。但否则,它会很艰难。 【参考方案1】:请记住,在 ios 中,原点位于左上角,而不是左下角。正-y 下降,而不是上升。
你需要考虑到这一点。
dot.frame = CGRect(x: x, y: mapImageView.frame.height - y, width: Double(dot.frame.width), height: Double(dot.frame.height))
另请注意,图像中的赤道不在中间。它在图像中较低,因此您需要根据图像中的赤道偏移量计算y
值时添加一个额外的偏移量。
dot.frame = CGRect(x: x, y: mapImageView.frame.height - y + equatorOffset, width: Double(dot.frame.width), height: Double(dot.frame.height))
您的地图投影也可能没有简单的线性纬度比例。 0-10 度可能是 12 像素,而 10-20 度可能是 11 像素,等等,而 80-90 只有 3 像素(或其他)。
【讨论】:
哦,你完全正确,mapImageView.frame.height - y
成功了!这张地图现在看起来已经好多了。然而,偏移量仍然有点错误。你能看看吗? imgur.com/a/EGvN8
赤道没有穿过图像的中心。它有点低。您将需要在 y
值中添加另一个软糖因子以调整赤道偏移。
我明白了!非常感谢!以上是关于带有世界地图的uiimageview上的Swift绘图坐标的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中检测 UIImageView 上的 UIImageView 更改或 KVO 炒锅
使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容
如何在swift中使用带有completionHandler的UIImageView load()函数