Rails:Geokit错误地将IPv4地址转换为经度和纬度
我想将两个IPv4地址转换为经度和纬度,然后计算它们之间的地理距离。Rails:Geokit错误地将IPv4地址转换为经度和纬度
Geokit说它可以做到这一点。
西雅图:
a = Geokit::Geocoders::GoogleGeocoder.geocode("207.244.147.34")
a.lat => 37.0483944,a.lng => 37.3421261(应为47.5839,-122.2995)
编辑:下面好的是IP地址英国不是SF,但它仍然是英国而不是土耳其。
旧金山:
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英里,我得到很多机票。
我错过了什么?
a
和b
如您使用的是不符合Seattle
和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 = ...
你是否建议我使用gem'geocoder'?查看该文档以确定可以运行的距离:a = Geocoder.coordinates(“207.244.147.34”); b = Geocoder.coordinates(“5.68.123.155”); distance = Geocoder :: Calculations.distance_between(a,b) – gr8scott06 2015-04-05 20:00:22
在“避免不必要的API请求”下的地理编码器文档中提到了api使用配额,但未指定数量。你知道配额还是遇到问题?谢谢 – gr8scott06 2015-04-05 20:02:46
检查更新的答案,了解如何通过ip查找位置。 – 2015-04-05 18:02:27
GeoIP永远不会完全准确,并且会出现像这样的错误。不存在每个IP地址准确映射到确切位置的数据库。 – 2015-04-06 10:00:25
@SanderSteffann谢谢你。如果这种方法本身容易出错,那么除了将twp IP转换为lat,lng和计算距离外,您是否知道检测VPN使用的最佳做法? – gr8scott06 2015-04-07 03:11:56