bugfix> ruby-on-rails > 投稿

各ユーザーの変数として、郵便番号、市区町村、州を保存しています。データベースからのすべてのユーザーと現在のユーザーとの間の距離をマイルで計算して表示する必要があります。

Geo-magicとGeo-distance ruby​​ gemに出会いましたが、計算にはlatとlonを使用します。

このような何かを達成したいです
https://www.freemaptools.com/distance-between-usa-zip-codes.htm https://www.mapdevelopers.com/distance_from_to.php

これを最も効率的な方法でレールに実装するための助けが必要です。 TIA。

回答 2 件
  • Geokit gemをご覧ください。この宝石は、郵便番号または住所に基づいて場所間の距離を与えることができます。ただし、このgemではgoogle 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のホームページを確認してください。

  • Geocoder gemも良い選択肢です。

    ただし、他のポスターが示しているように、ある時点で、位置データを緯度/経度に変換する必要があります。郵便番号を緯度/経度に変換できるSoftwareToolsからこのようなデータベースを見つけることができますが、それほど正確ではありません。郵便番号はやや欺cept的です。それらはサイズの点で大きく異なり、境界はある程度の頻度で変化します。

    たとえば、郵便番号89049は10,000平方マイルの地域をカバーするため、距離の計算は、郵便番号の場所に応じて100マイル以上ずれることがあります。

    ジオロケーションツールを使用して各ユーザーの住所を緯度/経度に変換し、それを距離の計算に使用することをお勧めします。 Haversine gemはそれを支援します。PostgreSQLを使用している場合は、earthdistanceモジュールを使用できます。

    (満足した顧客として以外、SoftwareToolsとは関係ありません。)

あなたの答え