有效的匹配坐标方式

时间:2018-03-21 07:38:46

标签: c# dictionary coordinates

我在C#1中有两个坐标列表,其中包括驾驶员的坐标,另一个坐标是咖啡馆的坐标。我正在寻找一种有效的方法来填充静态字典,其中包含来自第一个列表的驱动程序的密钥以及500米范围内所有咖啡馆的相关值。

public void ManageList() {
  GlobalList.Clear();
  foreach (var driver in driverList)
        {
            var driverCoords = new GeoCoordinate(driver.Latitude, driver.Longitude);
            List<Cafe> matchedCafes = new List<Cafe>();

            foreach (var cafe in cafeList)
            {
                var cafeCoords = new GeoCoordinate(cafe.Latitude, cafe.Longitude);

                if (cafeCoords.GetDistanceTo(driverCoords) <= 500) {
                    matchedCafes.Add(cafeCoords);
                }
            }

            GlobalList.Add(driverCoords, matchedCafes);
        }
}

只要司机不是可移动物体,上述工作就可以了。如果我想每5秒发送一次驱动程序的坐标并更新每个驱动程序的GlobalList,则上述算法会失败,因为我基本上清除了整个列表并再次填充它。

1 个答案:

答案 0 :(得分:1)

更多指针而不是答案。目前还不清楚你在谈论多少项目。

但你真正描述的是空间哈希问题。

这是游戏引擎,物理,编程的基础。

这是一个很大的话题,但你可以谷歌开始,

https://gamedevelopment.tutsplus.com/tutorials/redesign-your-display-list-with-spatial-hashes--cms-27586

http://zufallsgenerator.github.io/2014/01/26/visually-comparing-algorithms/

https://gamedev.stackexchange.com/a/69794/86883

事实上,你可能会在gamedev上提出你的问题,因为,这正是那种问题。

我会尝试做一个非常简单的解释:

  • 假设你的系统表现完美(没有性能问题),例如20家咖啡馆。

  • 但实际上你有2000家咖啡馆。

  • 所以将地图划分为大约100个&#34;框&#34;。

  • 当你打车时,只在那个盒子里做咖啡馆

你已经立即淘汰了1980年的咖啡馆,这些咖啡馆距离很远,他们甚至不在盒子里。 (当然,我所说的是一种简化,在基本方法中需要解决大量细节。)

实际上这篇文章 -

https://dzone.com/articles/algorithm-week-spatial

很好地解释了四叉树和地理分析。