Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在美国求给定中心点和半径的总体的算法_Ruby On Rails_Algorithm - Fatal编程技术网

Ruby on rails 在美国求给定中心点和半径的总体的算法

Ruby on rails 在美国求给定中心点和半径的总体的算法,ruby-on-rails,algorithm,Ruby On Rails,Algorithm,这是我的 美国人口普查局提供的按邮政编码汇总的人口数据 以下是我现在正在做的事情: 对中心点进行反向地理编码,以查找中心的邮政编码 重点 将lat-long与每个邮政编码关联(我知道是通过反向地理编码) 这很容易出错) 使用查找圆圈内的lat Long(邮政编码) Geokit Rails插件 查找这些邮政编码的数据总和(邮政编码=中心点的邮政编码或距离(邮政编码和中心点之间的长度)

这是我的

  • 美国人口普查局提供的按邮政编码汇总的人口数据
  • 以下是我现在正在做的事情:

  • 对中心点进行反向地理编码,以查找中心的邮政编码 重点
  • 将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。。但根据我的数据,我无法做到这一点,因为我不知道邮政编码的地理位置。因此,我在寻找更好的选择。我不是在寻找优化我的查询或响应时间。我只是在寻找更好的选择。