麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「开源GIS」public-ip-address:又一开源IP定位库

在之前的文章《「GIS教程」再谈使用IP地址定位用户位置(ip2region)》和《「GIS技巧」使用IP地址定位用户位置的方法小结 》中介绍过不少关于IP定位的使用方法及工具,比如:GeoIP、ipip、ip2region还有高德、百度等等一大堆三方服务商,它们中有在线的也有离线的,有的付费也有的免费。前几天小编又找到了一个比较好玩的开源IP定位库:public-ip-address。

关于 public-ip-address

public-ip-address 是一个轻量级、简单易用的 Rust 库。它的主要功能不仅仅是获取你当前的公网IP,更重要的是,它提供了一个统一的接口,能够从十几个不同的服务商那里获取 IP地址对应的地理位置信息。它不依赖单一来源的数据,而是对多家IP定位数据服务商做了一层代理,并加入缓存等机制,让IP定位的速度更快、更准也更稳定。

项目地址:https://github.com/ghztomash/public-ip-address

核心亮点

首先是多源聚合,集成了约20 + 服务商,覆盖不同速率限制及使用场景,可以使用 IfConfig、IpApiCom等无 API 密钥要求的服务商进行免费调用;也可以使用 IpInfo、Ip2Location等支持 API 密钥的高配额服务商进行高并发场景调用;甚至一些只要低精度的情况,可以使用MyIpCom、Ipify 等服务商提供无限制查询。

其次是智能缓存 + 加密,兼顾性能与隐私,GIS 项目中频繁 IP 查询容易触发服务商限流,同时地理信息属于敏感数据,这款库的缓存机制恰好解决。重复查询同一 IP 时直接返回缓存结果,减少 API 调用次数,提升解析效率;通过encryption特性 flag 启用缓存文件加密,避免地理信息泄露,符合数据隐私规范。

最后其支持 异步 + 同步调用方式,完美适配各种GIS架构,无需额外封装。并且其返回的数据格式可以覆盖 GIS 常见应用场景,基础字段:IP 地址、国家 / 地区代码、省份 / 州、城市、邮政编码、经纬度、时区,甚至包含ISP 运营商、ASN 编号等信息。

快速开始

如果你已经熟悉RUST开发,那么其调用方式非常简单。极简调用示例(本机 IP 地理信息查询):

use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // 一行代码,自动寻找最快的服务商
    let result = public_ip_address::perform_lookup(None).await?;

    // 打印结果
    println!("IP地址: {}", result.ip);
    println!("国家: {}", result.country.unwrap_or_default());
    println!("城市: {}", result.city.unwrap_or_default());
    println!("坐标: ({}, {})", 
        result.latitude.unwrap_or(0.0), 
        result.longitude.unwrap_or(0.0)
    );

    Ok(())
}

使用同步模式调用

use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
    let result = public_ip_address::perform_lookup(None)?;
    println!("IP地理信息: {}", result);
    Ok(())
}

更多高级用法(如指定服务商、配置 API 密钥、批量查询)可参考库中examples目录,直接复用适配 GIS 项目。

服务商列表

目前支持的服务商如下表:

大家也可以根据源码自行添加国内的服务商。

总结

虽然 Python 是 GIS 届的老大,但 Rust 凭借其内存安全和惊人的运行速度,正在 GIS 底层算法和高性能Web服务中崭露头角(看看 Martin服务器、Polars库 就知道了), public-ip-address 解决了 Rust GIS 开发中IP定位能力。如果你也是一名喜欢折腾新技术的 GISer,不妨尝试一下。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子
没有下文

留言板(小编看到第一时间回复)