YQL Geo 2 WOEID之间的距离

时间:2009-12-23 09:04:34

标签: c# asp.net yql

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

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

编辑: 我想我真正想要的是像Stackoverflow Careers上的员工搜索,你可以在那里输入一个地方然后告诉它你想要包含在搜索结果中的那个空间的距离

1 个答案:

答案 0 :(得分:2)

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

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

第一种是通过计算Haversine distance到起点直接查询纬度和经度。这可能非常慢,特别是在处理数千行时。无论如何,您应该看看您的数据库是否支持地理空间数据。 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,等等。获得点的子集后,可以在更小的数据集上进行距离计算。