我在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,则上述算法会失败,因为我基本上清除了整个列表并再次填充它。
答案 0 :(得分:1)
更多指针而不是答案。目前还不清楚你在谈论多少项目。
但你真正描述的是空间哈希问题。
这是游戏引擎,物理,编程的基础。
这是一个很大的话题,但你可以谷歌开始,
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
很好地解释了四叉树和地理分析。