gpt4 book ai didi

ios - 手动将坐标转换为点到 View

转载 作者:行者123 更新时间:2023-11-30 13:36:26 25 4
gpt4 key购买 nike

不知道有没有人手动计算过将WGS84坐标映射到UIView坐标系?事实上,我将 WGS84 转换为 ENU 坐标系,该坐标系类似于笛卡尔 (x,y,z) 坐标系。

我知道 MKMapView 中有一个方法可以获取 CLLocationCooperative2D 并在预期的 UIView 中返回 CGPoint,但我想在空白 UIView 而不是 map 上绘制 CGPoint。因此我想跳过初始化 MKMapView 对象只是为了使用此方法。

必须有一种简单的方法将坐标从笛卡尔坐标系缩小到设备坐标系。我想我还需要对系统的原点进行某种形式的旋转/变换(笛卡尔 -> UIView),因为 UIView 的原点位于左上角。

最佳答案

缩小坐标应该是直接的。

假设您在一个荒谬的点(32000、192033)周围有一组坐标。这是该特定簇的中心点。

显然我们想要移动它们,使它们以原点 (0, 0) 为中心。

因此,获取每个点并使用...进行转换

newPoint = CGPointMake(oldPoint.x - 32000, oldPoint.y - 192033)

这将使它们全部相距相同的相对距离,但现在以原点为中心。

接下来,假设最小 X 值为 -9345,最大 X 值为 8455。

您希望 X 范围类似于 640(以适合屏幕上的所有内容)。

所以...

currentXRange = 8455 + 9345; // maxX - minX = 17800
requiredXRange = 640;
xScale = requiredXRange / currentXRange; // 0.0359...

现在您已经有了 x 比例,您可以通过将 x 坐标乘以 xScale 值来转换点。

您拥有的最小 X 值将为...

-9345 * xScale; // -335.4...

最大 X 值将为...

8455 * xScale; // 303.5...

编辑以使它们出现在屏幕上

要使它们全部大于 0(即它们都在屏幕上),只需从每个点中减去最小的 X 和 Y 坐标值即可。

-335.4 - (-335.4) = 0 // minimum X value
303.5 - (-335.4) = 638.9 // maximum X value

这会将它们全部纳入范围内,以便它们适合屏幕。

编辑颠倒的 Y 轴

为了确保它们以正确的方式显示,只需从 View 的高度中减去它们来创建点。

如果 View 大小为 (100, 100),则 iOS 中的点 (50, 10) 将位于 View 顶部附近的中间。

但在正常使用时它应该靠近底部。

因此使用...创建转换点

convertedPoint = CGPointMake(originalPoint.x, view.height - originalPoint.y)

这将创建点 (50, 90),将其放置在中间和距底部十个点的位置,如您所愿。

注意

只要对集合中的每个点执行相同的操作,那么它们都将处于相同的相对位置,并且数据仍然有效。

最棘手的部分是如何进行操作,但我想我已经涵盖了所有内容。

关于ios - 手动将坐标转换为点到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com