C# 距离Lat和Long最近的空间位置

C# 距离Lat和Long最近的空间位置,c#,database,gps,gis,geospatial,C#,Database,Gps,Gis,Geospatial,我有一个应用程序,它使用DotSpatial框架连接到笔记本电脑上的usb GPS。我基本上是在开车到现场时使用它来知道我在哪里 该应用程序还包括一个ShapeFile地图作为背景,以便我知道我在哪里 我得到的是: 我有一个数据库,每一条道路被划分成5米的增量,带有一个横向长度的位置和道路名称。(因此第1列=唯一ID,第2列=位置距离,单位为m(即0、5、10…),第3列=道路名称,第4列=纬度,第5列=长) 数据库是SQLite,我在Access中也创建了一个 完整的空间框架 我需要做的是

我有一个应用程序,它使用DotSpatial框架连接到笔记本电脑上的usb GPS。我基本上是在开车到现场时使用它来知道我在哪里

该应用程序还包括一个ShapeFile地图作为背景,以便我知道我在哪里

我得到的是:

  • 我有一个数据库,每一条道路被划分成5米的增量,带有一个横向长度的位置和道路名称。(因此第1列=唯一ID,第2列=位置距离,单位为m(即0、5、10…),第3列=道路名称,第4列=纬度,第5列=长)
  • 数据库是SQLite,我在Access中也创建了一个
  • 完整的空间框架
我需要做的是:

  • 根据我当前的lat/long(从GPS接收器和软件的GPS.NET部分获取)计算出距离数据库中lat/long位置最近的位置距离(单位:m)
如果有任何其他建议,请让我知道


p.S该应用程序需要可移植,因此不想与SQL Server或posGIS的PostgrSQL等混为一谈。

由于您希望获得与当前lat/long最近的距离(以米为单位),您需要做的第一件事是执行坐标变换

大多数GPS接收器在WGS84中工作,假设如此,您可以使用库(如())将当前位置和道路位置转换为米(投影坐标;可以转换为WGS84投影坐标,也可以转换为基于您地理位置的本地坐标系。UTM分区可以很好地工作,如果您位于英国,则转换为OSGB)

你可以找到一个最适合你需要的投影(然而,当我写这篇文章时,它现在已经被删除了…因此我现在缺少有用的链接。当它再次被访问时,我将进行编辑)

如果你需要更多的地理信息系统的帮助,考虑访问< /P> 一旦以米为单位确定了位置,就可以得到它们之间的距离:

double distanceX = currentXmetres - roadXmetres;
double distanceY = currentYmetres - roadYmetres;

double Distance = Math.Abs( Math.Sqrt( (distanceX * distanceX) + (distanceY * distanceY) ) );
现在,您可以使用距离值查询数据库,并找到最近的位置:

SELECT * FROM table
ORDER BY ABS(Distance - Col 2)
LIMIT 1

注意:我不知道表或列的实际名称,因此相应地替换“table”和“Col 2”。

您需要表中距离(毕达哥拉斯)最近的元素

select top 1 * from mytable
order by ( (table.lon - lon) * (table.lon - lon) + (table.lat - lat) * (table.lat - lat) )

朗和拉特:你所处的位置。跳过sqrt也会大大加快速度。

我想您需要将道路计算在内?你不是真的问这个,你知道……虽然我理解你的问题,但这不是一个问题,这是一个要求有人为你做工作的请求。谢谢,在等待的时候,我把所有的零件都整理好了,但不确定如何做最近的位置。现在只需从小到大地订购就很有意义了。这样,我就可以选择一定距离内的任何位置,并显示多个最近的记录。