0

我想将两个 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 英里,而且我在机票上得到了很多优惠。

我错过了什么?

4

1 回答 1

0

a并且b您使用的不对应于Seattleand San 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

于 2015-04-05T17:28:29.097 回答