【问题标题】:Closest spatial position from Lat and Long距离经纬度最近的空间位置
【发布时间】:2023-03-06 17:13:01
【问题描述】:

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

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

我拥有的是:

  • 我有一个数据库,每条道路以 5m 为增量,带有 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 等搞乱。

【问题讨论】:

  • 我想您需要计算以考虑道路?你不是真的问这个,你知道的......
  • 虽然我很欣赏您的问题,但这不是一个问题,而是要求有人为您完成工作。

标签: c# database gps gis geospatial


【解决方案1】:

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

大多数 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”。

【讨论】:

  • 谢谢,在等待的时候我把所有的零件都整理好了,但不确定如何找到最近的位置。现在从小到大订购它非常有意义。这样我也可以选择一定距离内的任何位置并显示多个最近的记录。
【解决方案2】:

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

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

Lon&Lat:您所在的位置。跳过 sqrt 也会加快速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2011-06-12
    • 2015-10-19
    • 2011-04-11
    相关资源
    最近更新 更多