2

希望有人可以帮助我:)

我正在尝试将一个点从地图(纬度,经度)缩放到图像(x,y)。为此,我需要找到 2 个非相似矩形之间的比例因子(我认为)。

我会澄清一下,让我们说:

矩形 1:A(40.0, 50.0) B(40.0, 56.0) C(43.0, 56.0) D(43.0, 50.0)

(纬度三角洲 = 3,经度三角洲 = 6)。

矩形 2:E(0, 0) F(500, 0) G(500, 300) H(0, 300)

(X 增量 = 500,Y 增量 = 300)。

如何将点 P(41.5, 52.5) 从矩形 1 缩放到矩形 2 上的点 (x, y)?

更新:

大概的概念:

我正在尝试在自定义图像(不是地图图像,我自己的绘图)上显示用户当前位置(纬度,经度),因此我不能使用地图(MKMapKit,谷歌,汤姆汤姆)。

我有用户当前位置(通过 CoreLocation)和图像(800x460)。

我正在绘制的区域很小,所以我不需要担心地球的曲线。

我正在尝试找到一个公式来帮助我将我的用户(经纬度)位置缩放到我的图像中(在我的 iPhone 屏幕上)

谢谢!!!

4

2 回答 2

2

好吧,得到与第一个相似但适合第二个的矩形并不难。就是这样:

CGRect rect1, rect2; //your rectangles.
float scale = MIN(rect1.size.width / rect2.size.width , rect1.size.height / rect2.size.height);
CGRect resultedRect;
resultedRect.origin = rect2.origin;
resultedRect.size = CGSizeMake(rect2.size.width * scale, rect2.size.height * scale); 
//resultedRect is similar with rect1 but fits in rect2. You can now multiply your point with "scale" and get the new position.

我不确定这是你想要达到的目标。

问候,

乔治

于 2012-10-24T13:32:00.940 回答
1

如果您对它引入的扭曲感到满意,您可以分别处理x( latitude) 和y( longitude) 坐标。

如果你认为你不会对这种扭曲感到满意,你打算如何处理 和 中不相称的latitude尺度longitude1°lat != 1°long在你的问题的纬度。

如果您需要帮助从一种长度的线缩放到另一种长度的线,请更新您的问题。

编辑以下 OP 的评论。

好的,所以你想将纬度 3° 的间隔映射到 Y 中 300 像素的间隔(我猜),将经度 6° 的间隔映射到 X 中 500 像素的间隔。

我仍然不完全确定您是否担心引入进一步的扭曲;如果你不是这很容易。我假设屏幕区域的左下角是像素 (1,1),这就是您想要映射 (40°,56°) 的位置。对于该点以东的每分钟经度,(500/360)向右移动像素。对于角落以北的每一分钟纬度,向上移动(300/180)像素。

这种粗略的现成投影不会保留 2D 形状的外观(例如,正方形将投影为矩形),但有许多广泛使用的地图投影不保留形状。

于 2012-10-24T13:27:17.810 回答