0

我为我的应用程序位置的所有用户存储 YQL WOEID(地球上的 ID)。我现在需要一种方法来搜索给定 WOEID x 英里内的所有用户,这可能使用 YQL 吗?

或者,我想我可以更改应用程序以存储纬度和经度,但我需要尽可能快地计算距离,因为可能有成千上万的用户。

编辑:我想我真正想要的是类似 Stackoverflow Careers 上的员工搜索,您可以在其中输入一个地方,然后告诉它您想要包含在搜索结果中的该空间周围的距离

4

1 回答 1

2

据我所知,这不是 YQL 支持的东西。您可能找到的最接近的是返回给定 WOEID 的邻居的方法。

在给定 WOEID 的 x 英里范围内找到用户的问题在于 WOEID 可以是任意大小,具有不同的中心和边界框。尽管它更复杂,但存储纬度和经度将使您获得所需的结果。至少有两种方法可以解决这个问题。

第一种是通过计算到起点的Haversine距离直接查询经纬度。这可能非常慢,尤其是在处理数千行时。无论如何,您应该查看您的数据库是否支持地理空间数据。MySQLPostgreSQL都有地理空间扩展。

第二种流行的方法是使用geohash。这会生成一组字符串,您可以使用它们来查询附近的点。例如,以Lat: 40.7571397, Lon: -73.9891705纽约洛克菲勒中心的坐标为例。这些坐标的 geohash(用于 Google AppEngine)的一种实现产生以下结果:

  • 9
  • 9a
  • 9ac
  • 9ac7
  • 9ac7b
  • 9ac7be
  • 9ac7be2
  • 9ac7be2e
  • 9ac7be2e4
  • 9ac7be2e4e
  • 9ac7be2e4ed
  • 9ac7be2e4ed4
  • 9ac7be2e4ed4e

所以如果你想找到非常接近的点,你可以找到其他匹配的点9ac7be2e4ed4e;如果您想要一般区域,您可以尝试9ac7be2e4e等等。一旦有了点的子集,就可以在更小的数据集上进行距离计算。

于 2010-02-13T21:28:43.477 回答