Rails:Geokit错误地将IPv4地址转换为纬度和经度

时间:2015-04-05 17:18:40

标签: ruby-on-rails ipv4 geokit

我想将两个IPv4地址转换为纬度和经度,然后计算它们之间的地理距离。

Geokit说它可以做到这一点。

西雅图:

a = Geokit::Geocoders::GoogleGeocoder.geocode("207.244.147.34")

a.lat => 37.0483944,a.lng => 37.3421261(应为47.5839,-122.2995)

编辑:以下是英国不是SF的IP地址,但仍然是英国而不是土耳其。

旧金山:

b = Geokit::Geocoders::GoogleGeocoder.geocode("5.68.123.155")

a.lat => 14.6478672,a.lng => 120.9880659(应为37.7691,-122.4449)

a.distance_to(b)返回5273.737623217472。

显然西雅图到圣弗朗西斯科有点超过5000英里,而且我的机票很多。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您使用的

abSeattleSan Franscisco不对应:

> a.city
 => "Gaziantep" 
> a.country
 => "Turkey" 
> b.city
 => "Caloocan" 
> b.country
 => "Philippines"

尝试:

> Geocoder.configure(ip_lookup: :freegeoip)
> a = Geocoder.search("74.200.247.59").first
 =>  #<Geocoder::Result::Freegeoip:0x007fc6df3cf930 @data={"ip"=>"207.244.147.34", "country_code"=>"US", "country_name"=>"United States", "region_code"=>"WA", "region_name"=>"Washington", "city"=>"Seattle", "zip_code"=>"98103", "time_zone"=>"America/Los_Angeles", "latitude"=>47.674, "longitude"=>-122.342, "metro_code"=>819}, @cache_hit=nil>
 > b = ...

有关用法示例,请参阅https://github.com/alexreisner/geocoder/blob/091032059e6b47285e2be5ef82ad8b016f362069/test/unit/lookups/freegeoip_test.rb