【问题标题】:Most efficient way to pull items from database based on their x,y location in a grid根据网格中的 x,y 位置从数据库中提取项目的最有效方法
【发布时间】:2013-09-17 15:48:01
【问题描述】:

我正在开发一款 iOS 游戏,玩家的村庄会显示在大型王国地图上。每个村庄在该地图上都有一个 x,y 位置,每个村庄都作为一个对象存储在服务器 (Parse.com) 上的数据库中。

我想做的就是把当前玩家村庄周围的所有村庄都拉下来。通常这很简单,因为您只使用最短距离算法,但要使用它,我需要下载数据库中的所有村庄,然后对每个村庄运行算法,然后根据与玩家的距离对它们进行排序,这并不是一种快速/有效的方式。那么有没有人知道一种更精致/更有效的方式来完成上述操作?能够在对数据库的查询中实际上拉下当前玩家周围的村庄,可以说用一块石头杀死 2 只鸟,但我看不到任何方法,这将是很棒的。我怀疑答案可能在于在数据库中存储有关村庄位置的更多信息,因此查询可以拉下最近的那些,而无需运行算法来实现它。

有什么想法吗?

我会留下这个问题,因为我仍然对如何用基本数学来做这件事感兴趣,曼哈顿距离方法应该没问题,但对于使用 Parse.com 的任何人来说,也许可以使用 geoPoints 吗?这是一个疯狂的想法,但我会尝试一下。

【问题讨论】:

  • 肯定 x 和 y 值在数据库中,因此您可以查询它们(并在查询中使用 > 和
  • 你可以做一个查询,看看一个数字是大于还是小于另一个数字,也许可以对 x 和 y int 进行一次查询,但这只是给你一个绝对值,这不是点之间的距离。

标签: ios objective-c database-design position parse-platform


【解决方案1】:

您可以通过查询与约束 X - D

如果您愿意,您可以在客户端上根据Euclidean distance 进行进一步过滤。

【讨论】:

  • 谢谢,有没有机会将它放入一些伪代码中?理想的 obj-c :)
  • @Phil:您遇到困难的任何特定领域? IMO,我给出的描述很清楚,应该很容易实现。
  • 谢谢,我将尝试使用 Parse.com 的 geoPoints 看看是否可行。
  • 尝试使用 whereKey:nearGeoPoint 类型的查询约束 - 你会得到你想要的。
  • @Phil 请注意,GeoPoints 是正确的纬度/经度值。将数字表示为 (lat,long)。 (0,0) 和 (0,+1) 之间的距离为 111.312 公里(沿赤道从东到西)。 (+90,0) 和 (+90,+1) 之间的距离为 0 公里(北极)。如果你的村庄是基于现实世界的地球坐标,这很好,如果你的村庄是基于一个普通的“网格”,你会遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2014-07-11
  • 2013-05-08
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多