我有一个应用程序,它使用DotSpatial框架连接到我笔记本上的usb。我开车去现场的时候基本上是用它来知道我在哪
该应用程序还包括一个ShapeFile地图作为背景,以便我知道我在哪里。
我拥有的是:
我需要做的是:
如果有其他建议,请告诉我。
P.S应用程序需要可移植性,所以不想使用Server或PostgrSQL和posGIS等。
发布于 2011-05-17 12:25:28
因为您希望从当前的lat/long中获得以米为单位的最近距离,所以首先需要执行坐标转换。
大多数全球定位系统接收器都是在WGS84中工作的,假设这一点,您可以使用Proj4 (.NET包装器)等库将当前位置和道路位置转换为米(投影坐标;或者转换为WGS84投影,或者根据您的地理位置建立本地坐标系)。UTM区域可以很好地工作,或者OSGB,如果你在英国)。
您可以找到一个最适合您的需要的投影这里 (然而,在我写这篇文章时,它现在正在下降.因此,我在这个时候缺乏有用的链接。当它再次被访问时,我将编辑)。
如果您需要更多的帮助,请考虑访问GIS.SE。
一旦你有了你的位置(以米为单位),得到它们之间的距离:
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”。
发布于 2011-05-17 13:44:54
您需要表中与点的距离(pythagoras)最近的元素。
select top 1 * from mytable
order by ( (table.lon - lon) * (table.lon - lon) + (table.lat - lat) * (table.lat - lat) )Lon&Lat:你现在的位置。跳过sqrt也会大大加快速度。
https://stackoverflow.com/questions/6030166
复制相似问题