如何计算2个非相似矩形之间的比例因子

时间:2012-10-24 12:58:27

标签: ios image map scale

希望有人可以帮助我:)

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

我会澄清,让我们说:

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

(纬度Delta = 3,经度Delta = 6)。

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

(X Delta = 500,Y Delta = 300)。

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

更新

总体思路:

我正在尝试在自定义图像(不是地图图像,我自己的图纸)上显示用户当前位置(Lat,Lon)因此我无法使用地图(MKMapKit,Google,Tom-Tom) 。

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

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

我正在尝试找到一个能够帮助我将用户(Lat,Lon)位置扩展到我的图像(在我的iPhone屏幕上)的公式

感谢!!!

2 个答案:

答案 0 :(得分: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.

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

此致

乔治

答案 1 :(得分:1)

如果您对其引入的扭曲感到满意,您可以单独处理xlatitude)和ylongitude)坐标。

如果您认为自己不会对这种扭曲感到满意,那么您对latitudelongitude中不相称的尺度有何建议?你问题中的纬度1°lat != 1°long

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

OP发表评论后

编辑

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

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

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