如何使用pygeoip从国家、地区代码获取纬度、经度
Posted
技术标签:
【中文标题】如何使用pygeoip从国家、地区代码获取纬度、经度【英文标题】:How to get latitude, longtitude from country, region code using pygeoip 【发布时间】:2014-05-02 11:20:06 【问题描述】:我有这样的 GeoIP 城市和地区代码:
region_code:H9
country_code:GB
我拥有的城市和地区代码是在过去某个时间通过 GeoIP 从 IP 地址获得的。但是,IP 地址并未保留。 我相信应该可以索引到 GeoLite City 数据库并使用此信息检索纬度和经度,但我在 pygeoip 包装器中看不到任何开箱即用的东西。有谁知道怎么做?
【问题讨论】:
【参考方案1】:GeoIP City 提供从 IP 地址到位置(包括坐标)的映射。例如:
>>> gi = pygeoip.GeoIP('GeoIPCity.dat')
>>> gi.record_by_addr('64.233.161.99')
'city': u'Mountain View',
'region_code': u'CA',
'area_code': 650,
'time_zone': 'America/Los_Angeles',
'dma_code': 807,
'metro_code': 'San Francisco, CA',
'country_code3': 'USA',
'latitude': 37.41919999999999,
'postal_code': u'94043',
'longitude': -122.0574,
'country_code': 'US',
'country_name': 'United States',
'continent': 'NA'
>>> gi.time_zone_by_addr('64.233.161.99')
'America/Los_Angeles'
但是,它不提供从区域代码到坐标的映射。为此,我建议使用GeoNames。
【讨论】:
抱歉,如果我的问题不清楚:我所拥有的城市名称和地区代码是过去某个时候通过 IP 地址从 IP 地址获得的。但是,IP 地址并未保留。因此,我试图以另一种方式返回。数据必须在数据库中;但正如你所说,也许这并不简单。我认为我无法轻松使用 GeoNames,因为我拥有的国家/地区代码特定于 GeoIP 地区代码和国家代码不具体。国家代码是 ISO,地区代码是除美国和加拿大以外的所有地方的 FIPS 代码,它们是 ISO。 GeoNames 支持 FIPS 和 ISO。在他们的高级数据集中,他们有从 FIPS 和 ISO 到区域的映射,但您也可以使用他们的免费数据重建它。 This CSV 也可能有用。 所以国家和地区代码的组合不是唯一的??当然,“美国”中只有一个“CA”??如果没有其他人弹出使用 GeoIP 数据库中已有数据的方法,则提供的信息很有用(已对您的答案表示赞同)将接受您的答案!或者你说的是没有与美国加利福尼亚州相关的纬度/经度信息。 对不起,我的意思是说国家和地区代码不是 MaxMind 特定的。他们使用 ISO 和 FIPS 标准(有几个例外,例如 A1 用于代理)。另一种可能对您有用的方法是使用 MaxMind 提供的 GeoIP City CSV 来获取此信息。如果您是客户,您应该可以访问付费版本。否则,有GeoLite CSV。以上是关于如何使用pygeoip从国家、地区代码获取纬度、经度的主要内容,如果未能解决你的问题,请参考以下文章