希望有人可以帮助我:)
我正在尝试将地图(纬度,经度)中的点缩放到图像(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屏幕上)的公式
感谢!!!
答案 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)
如果您对其引入的扭曲感到满意,您可以单独处理x
(latitude
)和y
(longitude
)坐标。
如果您认为自己不会对这种扭曲感到满意,那么您对latitude
和longitude
中不相称的尺度有何建议?你问题中的纬度1°lat != 1°long
。
如果您需要帮助从一个长度的行缩放到另一个长度的行,请更新您的问题。
OP发表评论后编辑。
好的,所以你想要在纬度上将3°的间隔映射到Y中300像素(我猜)的间隔,以及经度为6°的间隔到X中500像素的间隔。
我还不完全确定你是否担心引入进一步的扭曲;如果你不是,那很容易。我猜你的屏幕区域的左下角是像素(1,1),那就是你要映射(40°,56°)的地方。对于该点以东的每一分钟经度,向右移动(500/360)
像素。对于角落以北纬度的每一分钟,向上移动(300/180)
像素。
这种粗略且准备好的投影不会保留2D形状的外观(例如,正方形将投影到矩形),但是有许多广泛使用的地图投影不保留形状。