Lat和Long最近的空间位置

时间:2011-05-17 11:34:53

标签: c# database gps gis geospatial

我有一个应用程序使用DotSpatial框架连接到我的笔记本电脑上的USB GPS。我基本上在现场开车时使用它来了解我的位置。

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

我拥有的是:

  • 我有一个数据库,每条道路分为5米增量,带有lat.long位置和道路名称。 (因此Col 1 = UniqueID,Col 2 =以m为单位的位置距离(即0,5,10 ......),Col 3 =道路名称,Col 4 = Lat,Col 5 = Long)
  • 数据库是SQLite,也有我在Access中创建的数据库。
  • 完整的DotSpatial框架

我需要做的是:

  • 根据我当前的纬度/经度(我从GPS接收器和软件的GPS.NET部分获得)计算出最近的位置距离(m)来自数据库中的纬度/经度位置。

如果还有其他建议请告诉我。

P.S应用程序需要是可移植的,所以不要乱用SQL Server或PostgrSQL与posGIS等。

2 个答案:

答案 0 :(得分:3)

由于您希望获得距离当前纬度/经度的最近距离(米),因此您需要做的第一件事就是执行坐标变换。

大多数GPS接收器在WGS84中工作,假设如此,您可以使用Proj4.NET wrapper)等库将当前位置和道路位置转换为米(投影坐标;投影到WGS84,或者根据你的地理位置设置一个本地坐标系统。如果你在英国工作,UTM区域可以很好地工作,或OSGB。

您可以找到最适合您需求的投影here(但是,当我写这篇文章时,它目前正在关闭......因此我此时缺少有用的链接。我会在可以再次访问时进行编辑)

如果您需要有关GIS方面的更多帮助,请考虑访问GIS.SE

以米为单位的位置后,获取它们之间的距离:

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

double Distance = Math.Abs( Math.Sqrt( (distanceX * distanceX) + (distanceY * distanceY) ) );

现在,您可以使用Distance值查询数据库并找到最近的位置:

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

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

答案 1 :(得分:0)

您需要表格中与您的点的距离(毕达哥拉斯)最接近的元素。

select top 1 * from mytable
order by ( (table.lon - lon) * (table.lon - lon) + (table.lat - lat) * (table.lat - lat) )
Lon& Lat:你所处的位置。跳过sqrt会加快速度。