Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何计算两个不相似矩形之间的比例因子_Ios_Image_Map_Scale - Fatal编程技术网

Ios 如何计算两个不相似矩形之间的比例因子

Ios 如何计算两个不相似矩形之间的比例因子,ios,image,map,scale,Ios,Image,Map,Scale,希望有人能帮我:) 我正在尝试将一个点从地图(纬度、经度)缩放到图像(x、y)。 为此,我需要找到两个不相似的矩形之间的比例因子(我想) 我会澄清,比如说: 矩形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) 更新: 总体思路: 我试图在

希望有人能帮我:)

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

我会澄清,比如说:

矩形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)

更新:

总体思路:

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

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

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

我试图找到一个公式,帮助我将我的用户(Lat,Lon)位置缩放到我的图像(在我的iPhone屏幕上)


谢谢

如果您对它引入的扭曲感到满意,您可以单独处理
x
纬度
)和
y
经度
)坐标

如果你认为你不会对这种扭曲感到满意,那么你打算如何处理
纬度
经度
中的不公度尺度<代码>1°纬度!=1°长
,位于您问题中的纬度

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

编辑OP评论后的内容

好的,那么你想把纬度3°的间隔映射到Y方向300像素的间隔,把经度6°的间隔映射到X方向500像素的间隔

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


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

好吧,获得与第一个矩形相似但适合第二个矩形并不难。以下是方法:

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.
我不确定这是你想要达到的

问候,


乔治

好吧,你需要找到从rect1到rect2的比例,然后用这个比例乘以你的点。由于矩形不相似,我认为您必须找到与矩形1相似的最大矩形,它将适合矩形2。希望这有帮助。干杯谢谢乔治!不过,我知道这样一个公式是存在的,我就是找不到/记不起来。看看我的答案,得到这个公式。嘿,乔治!谢谢你的代码!我试过了。不幸的是,正如我所怀疑的,我的图像变形,缩放点关闭:(我试图在自定义图像(不是地图图像,我自己的图形)上显示用户当前位置(Lat,Lon),因此无法使用地图(MKMapKit,Google,Tom Tom)。我有用户当前位置(通过CoreLocation)和图像(800x460)。我正在绘制的区域很小,所以我不需要担心地球的曲线。几天来,我一直在试图找到一个公式,帮助我将用户(纬度、经度)的位置缩放到我的图像(在iPhone屏幕上).ooh,好的,那么你应该首先得到图像区域角点的地图坐标。然后很容易得到该矩形内的位置。对不起,我不理解firstCool的目标:)顺便说一句,我有区域(Lat,Lon)的地图坐标(4个角点),以十进制值(不是度)表示。我只是让truble将一个随机(纬度,经度)点(x,y)转换(或显示)到我的图像中。有什么想法吗?谢谢我认为与我的答案中的想法相同。rect1应该是坐标的矩形(图像的纬度、经度,以及适当的宽度和高度,表示纬度点的宽度和经度点的高度),rect2应该类似于
CGRectMake(0,0,yourImageWidth,yourImageHeight)
。此外,该点应表示用户在rect1中的位置。所以做一些类似于
point.x-=rect1.origin.x
点.y-=rect1.origin.y首先,然后做我在答案中写的事情。我认为这只是一个好的初始值的问题。有一件事…你可以用这个:
-(CGRect)convertRegion:(MKCoordinateRegion)region to recttoview:(UIView*)view
。还要确保考虑视网膜显示*例如,将给定矩形的原点和大小乘以
[UIScreen Main Screen]。缩放
谢谢您的回答!我已经按照你的要求更新了我的问题:)我想得对吗?这是正确的方法吗?哦…对不起,我指的是十进制的纬度和经度,而不是度。我非常担心扭曲,不能允许任何扭曲。出于某种原因,我认为这只是一个公式的问题……我猜我错了:)谢谢你的时间!