美国邮政编码之间的距离计算

时间:2018-05-25 11:55:36

标签: ruby-on-rails rubygems distance

我将Zipcode,City和State存储为每个用户的变量。我需要计算并显示数据库和当前用户的所有用户之间的距离(英里)。

我遇到了Geo-magic和Geo-distance ruby​​ gems,但他们使用lat和lon进行计算。

想要实现这样的事情 https://www.freemaptools.com/distance-between-usa-zip-codes.htm https://www.mapdevelopers.com/distance_from_to.php

希望以最有效的方式帮助在rails中实现此功能。 TIA。

2 个答案:

答案 0 :(得分:0)

看一下Geokit gem。这个宝石可以根据邮政编码或地址为您提供地点之间的距离。但是这个宝石将使用谷歌Gmaps / Bing地图。

示例:

a=Geokit::Geocoders::GoogleGeocoder.geocode '140 Market St, San Francisco, CA'

b=Geokit::Geocoders::GoogleGeocoder.geocode '789 Geary St, San Francisco, CA'

a.distance_to(b) # Get the distance between 'a' and 'b' 

查看gem主页以获取更多用途。

答案 1 :(得分:0)

Geocoder宝石也是不错的选择。

但是,正如其他海报所示,在某些时候您需要将您的位置数据转换为纬度/经度。您可以找到可以将邮政编码转换为纬度/经度的数据库such as this one from SoftwareTools,但是没有太多的精确度。邮政编码有点欺骗性;它们在大小方面差异很大,它们的界限会有一定的变化。

例如,邮政编码89049涵盖an area of 10,000 square miles,因此您的距离计算可能超过一百英里,具体取决于用户所在邮政编码的位置。

您最好使用地理定位工具将每个用户的街道地址转换为纬度/经度,并将其用于距离计算。 Haversine gem可以提供帮助,或者如果您使用PostgreSQL,则可以使用earthdistance module

(除了作为满意的客户之外,我与SoftwareTools没有关系。)

相关问题