我有一个应用程序使用DotSpatial框架连接到我的笔记本电脑上的USB GPS。我基本上在现场开车时使用它来了解我的位置。
该应用程序还包含一个ShapeFile地图作为背景,以便我知道我在哪里。
我拥有的是:
我需要做的是:
如果还有其他建议请告诉我。
P.S应用程序需要是可移植的,所以不要乱用SQL Server或PostgrSQL与posGIS等。
答案 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会加快速度。