获取位图中两点之间的像素数
本文关键字:两点 之间 像素数 位图 获取 | 更新日期: 2023-09-27 17:57:25
我是C#.NET的初学者。我正在进行一个处理进近地图的项目。该地图包含跑道的周围区域,航班可以在那里飞行以降落。这张地图是一张位图图像。它在图像的边界上包含经度和纬度!
现在,该项目的目标是根据地图边界上的给定地质坐标,获得地图上各点的地质坐标(lats/long)(当鼠标点击或悬停在该点上时)。因此,如果我们用lats/long坐标输入一个点,则可以对地图上的其他点进行插值。
假设任意两个经度之间有X个像素,任意两个纬度之间有Y个像素。如果我们设置了一个参考点,那么根据鼠标指针悬停或点击的像素的距离(分别在X和Y方向上距离参考点的像素数),我们可以在一个小窗口中获得该点的纬度/经度(可能像工具提示或弹出窗口)。
围绕插值的数学可以是:
new lat=ref lat+[ref lat(仅分钟)/Y]*(参考点和新点之间的垂直距离,以像素为单位)
new long=ref long-[ref long(仅分钟)/X]*(参考点和新点之间的水平距离,以像素为单位)。
在跑道的中心(在图的中心)有一个叫中点的点。我还需要找到中点和新点(鼠标悬停或点击的地方)与地图垂直线的连线所成的角度。
因此,任何人都请给我如何启动项目的想法,以及我需要什么(工具栏控件、方法)来构建包含gui的图片窗口和弹出窗口(包含关于该点或像素的信息)。提前感谢。
标题中提出的问题的答案如下:
double distance = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
这是平面上两点之间的距离,因此也是位图上的距离。
身体里提出的问题一点也不容易回答。如果你有一个给定的地图,定义两个坐标之间距离的函数可能不是线性的。这里有一篇关于地图投影的文章,展示了一些不同的地图类型。为了能够计算出你需要的东西,你首先需要知道你实际使用的是什么样的地图,从而相应地调整你的公式。
如果你的地图只是小尺寸的,这可能不会有多大区别。你曾经说过跑道,如果这只是一个机场,那么投影不一定是个问题。如果你计算不同机场的两条跑道之间的距离,那就另当别论了。
您的问题非常适合您的需求,并且有一些元素本身可能是问题。你可能想把它分解成几个问题,或者独立研究每个项目。例如
您需要查看WPF或Windows窗体。
你需要学习如何计算两点之间的角度。