首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >距离拉特和朗最近的空间位置

距离拉特和朗最近的空间位置
EN

Stack Overflow用户
提问于 2011-05-17 11:34:53
回答 2查看 1.4K关注 0票数 1

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

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

我拥有的是:

  • 我有一个数据库,每条路都被划分为500万个增量,其中有一个lat.long位置和一个道路名称。( Col 1= UniqueID,Col 2=m(I. 0,5,10 .),Col 3=路名,Col 4= Lat,Col 5= Long)
  • 数据库是SQLite,我在Access中也创建了一个数据库。
  • 完整的DotSpatial框架

我需要做的是:

  • 根据我当前的lat/long (我从全球定位系统接收器和软件的GPS.NET部分得到的)计算出m中最接近的位置距离是来自数据库中的lat/long位置。

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

P.S应用程序需要可移植性,所以不想使用Server或PostgrSQL和posGIS等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-17 12:25:28

因为您希望从当前的lat/long中获得以米为单位的最近距离,所以首先需要执行坐标转换。

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

您可以找到一个最适合您的需要的投影这里 (然而,在我写这篇文章时,它现在正在下降.因此,我在这个时候缺乏有用的链接。当它再次被访问时,我将编辑)。

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

一旦你有了你的位置(以米为单位),得到它们之间的距离:

代码语言:javascript
复制
double distanceX = currentXmetres - roadXmetres;
double distanceY = currentYmetres - roadYmetres;

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

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

代码语言:javascript
复制
SELECT * FROM table
ORDER BY ABS(Distance - Col 2)
LIMIT 1

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-17 13:44:54

您需要表中与点的距离(pythagoras)最近的元素。

代码语言:javascript
复制
select top 1 * from mytable
order by ( (table.lon - lon) * (table.lon - lon) + (table.lat - lat) * (table.lat - lat) )

Lon&Lat:你现在的位置。跳过sqrt也会大大加快速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6030166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档