2009-12-23 74 views
0

我存储了我的应用程序位置的所有用户的YQL WOEID(地址id)。我现在需要一种方法来搜索给定WOEID的x英里范围内的所有用户,这是否可以使用YQL?YQL地理距离2 WOEID的

另外我想我可以改变应用程序来存储经度和纬度,但我需要尽可能快地计算距离,因为潜在可能是用户的决定。

编辑: 我想我真正需要的是像#2职业,在那里你可以进入的地方,然后告诉它要包括在搜索结果中

周围的空间距离,人员搜索

回答

2

据我所知,这不是YQL支持的东西。您可能找到的最接近的方法是返回neighbors of a given WOEID

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

首先是通过计算Haversine distance到起点直接查询纬度和经度。这可能非常缓慢,特别是在处理数千行时。无论如何,你应该看看你的数据库是否支持地理空间数据。 MySQLPostgreSQL都具有地理空间扩展。第二种流行的方法是使用geohash。这会产生一组您可以用来查询附近点的字符串。例如,纽约洛克菲勒中心坐标为Lat: 40.7571397, Lon: -73.9891705。地理散列(为谷歌应用服务引擎),用于这些坐标的一个实施方式中产生以下:

  • 9A
  • 9AC
  • 9ac7
  • 9ac7b
  • 9ac7be
  • 9ac7be2
  • 9ac7be2e
  • 9ac7be2e4
  • 9ac7be2e4e
  • 9ac7be2e4ed
  • 9ac7be2e4ed4
  • 9ac7be2e4ed4e

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