Ruby on rails 在美国求给定中心点和半径的总体的算法
这是我的Ruby on rails 在美国求给定中心点和半径的总体的算法,ruby-on-rails,algorithm,Ruby On Rails,Algorithm,这是我的 美国人口普查局提供的按邮政编码汇总的人口数据 以下是我现在正在做的事情: 对中心点进行反向地理编码,以查找中心的邮政编码 重点 将lat-long与每个邮政编码关联(我知道是通过反向地理编码) 这很容易出错) 使用查找圆圈内的lat Long(邮政编码) Geokit Rails插件 查找这些邮政编码的数据总和(邮政编码=中心点的邮政编码或距离(邮政编码和中心点之间的长度)
我使用geokit rails插件进行反向地理编码,并在圆圈内查找邮政编码(以及相关的lat-long) 不完全是一个解决方案,但我认为部分问题在于算法本身的概念 您试图获取数据无法准确提供的信息,因为其粒度(规模)不适合。在本例中,您使用的质心点代表一个区域,但肯定不是人口空间分布的精确表示。这就像用一把只有厘米标记的尺子测量毫米
你可以做一件事来接近流行音乐。是创建一个点的常规网格,该网格以更精细的粒度插值人口数据(网格的每个点将获得其ZIP区域人口的份额)。这是一个完全不同的、与地理信息系统相关的问题,因此我建议您向社区寻求帮助。听起来您走的是正确的道路。您是否觉得有什么明显的地方需要优化,或者您是否特别希望有任何改进?除了自己编写SQL查询之外,我无法想象有更快的方法从数据库中获取数据,并且您可能最终会编写与geokit相同的查询。听起来您对初始zipcode的查找非常简单。我不知道有什么更好的数据源。我建议使用谷歌地图api来获取每个邮政编码的lat&long值,而不是计算出来。这里有一个ruby脚本,我用来计算5个最接近的lat和long值。它基本上是为了链接我们列表中每个城市的5个最近的城市:gist.github.com/1321520。这里的前两种方法应该对您有所帮助。它以公里为单位返回距离。因此,将其转换为英里数以检查是否低于100。这里有一篇文章解释了这个公式:@agmcleod..我使用geokit rails插件来获取每个邮政编码的lat长度..我相信geokit rails插件在内部使用google map API(但google maps API对用户每天的转换次数有一些限制,因此在google map API不可用的情况下,它也会使用其他数据源)…我已经建立了一个数据库,其中包含所有邮政编码以及从geokit rails插件中找到的相应lat long。这是我的初始设置。所以,我没有计算出来,它已经在数据库中了。@muffinista。这个设置的问题是Zipcode不能用lat-long表示,它是一个区域。所以,我不确定Google Map API给出的lat-long对是否位于邮政编码的中心或类似的位置。此外,对于半径为0到几乎2.4英里的半径,人口与此设置保持相同。也就是说,即使半径为0.1英里,它也将显示邮政编码的全部人口。我正在寻找一种近似方法。@muffinista。。但根据我的数据,我无法做到这一点,因为我不知道邮政编码的地理位置。因此,我在寻找更好的选择。我不是在寻找优化我的查询或响应时间。我只是在寻找更好的选择。