GeoPOINormalizer:地理POI归一化库
GeoPOINormalizer是一个专业的Python库,用于地理位置POI(兴趣点)数据的科学归一化处理。它采用投影转换+各向同性缩放方案,解决了地理数据直接归一化导致的空间关系失真问题。
核心特性
- 保持距离比例:通过UTM投影和各向同性缩放,确保归一化后的POI点保持原始空间关系
- 双向转换:支持坐标和距离的归一化与反归一化,确保数据可逆性
- 灵活输出:支持[0,1]和[-1,1]两种标准化输出范围
- GIS集成:直接从Shapefile读取地理数据
- 详细报告:生成归一化过程的详细分析报告
安装
pip install geo-poi-normalizer
依赖项
- Python >= 3.6
- numpy >= 1.18.0
- pyproj >= 2.6.0
- pyshp >= 2.1.0
基本用法
from geo_poi_normalizer import GeoPOINormalizer
# 创建归一化器,输出范围设为[-1, 1]
normalizer = GeoPOINormalizer(output_range=(-1, 1))
# 添加POI点
points = [
(116.4074, 39.9042), # 北京
(121.4737, 31.2304), # 上海
(113.2644, 23.1291), # 广州
(114.0579, 22.5431) # 深圳
]
normalizer.add_points(points)
# 计算归一化参数
normalizer.compute_projection()
normalizer.compute_normalization_params()
# 归一化所有点
normalized_points = normalizer.normalize_points()
print("归一化后的点:")
for point in normalized_points:
print(f"({point[0]:.4f}, {point[1]:.4f})")
# 反归一化示例
original_point = normalizer.denormalize_point(normalized_points[0][0], normalized_points[0][1])
print("\n反归一化第一个点:", original_point)
# 打印报告
normalizer.print_report()
高级功能
从Shapefile加载数据
# 创建归一化器,输出范围设为[0, 1]
normalizer = GeoPOINormalizer(output_range=(0, 1))
# 从shapefile加载POI
normalizer.load_from_shapefile("poi_data.shp", lat_field="latitude", lon_field="longitude")
# 计算并应用归一化
normalizer.compute_projection()
normalized_points = normalizer.normalize_points()
距离归一化
# 归一化距离
distance_km = 100 # 100公里
normalized_dist = normalizer.normalize_distance(distance_km * 1000)
print(f"100公里归一化距离: {normalized_dist:.6f}")
# 反归一化距离
original_dist = normalizer.denormalize_distance(normalized_dist) / 1000
print(f"反归一化距离: {original_dist:.2f}公里")
API参考
GeoPOINormalizer类
GeoPOINormalizer(output_range=(0, 1))
参数:
output_range: 输出范围,支持(0,1)或(-1,1)
主要方法:
add_point(lon, lat, *attributes): 添加单个POI点add_points(points): 批量添加POI点load_from_shapefile(shp_path, lat_field=None, lon_field=None): 从shapefile加载POI点compute_projection(ref_lon=None, ref_lat=None): 计算最优投影参数compute_normalization_params(): 计算归一化参数normalize_points(): 归一化所有点normalize_point(lon, lat): 归一化单个点denormalize_point(x_norm, y_norm): 反归一化单个点normalize_distance(distance_meters): 归一化距离(米)denormalize_distance(norm_distance): 反归一化距离get_normalization_report(): 获取归一化报告print_report(): 打印归一化报告
技术原理
1. 投影转换
使用UTM投影将经纬度$(λ, φ)$转换为平面坐标$(x, y)$: $$(x, y) = \text{UTM}(λ, φ)$$
2. 各向同性归一化
计算缩放因子: $$s = \max(x_{\max} - x_{\min}, y_{\max} - y_{\min})$$
归一化坐标: $$x_{\text{norm}} = \frac{x - x_{\min}}{s}$$ $$y_{\text{norm}} = \frac{y - y_{\min}}{s}$$
3. 输出范围调整
对于[-1, 1]范围: $$x_{\text{final}} = 2x_{\text{norm}} - 1$$ $$y_{\text{final}} = 2y_{\text{norm}} - 1$$
应用场景
- 强化学习环境:为地理位置状态表示提供标准化输入
- 空间数据分析:保持空间关系的数据预处理
- 地理特征工程:为机器学习模型准备地理特征
- 位置敏感的AI模型:提供空间感知的标准化输入
为什么需要GeoPOINormalizer?
直接将经纬度归一化会导致以下问题:
- 距离失真:经纬度直接归一化会导致不同方向的距离比例失真
- 形状扭曲:长宽比例失衡的区域会被严重扭曲
- 精度不均:不同纬度的经度精度不同
GeoPOINormalizer通过UTM投影和各向同性缩放解决了这些问题,确保:
- 距离比例保持:各个方向的距离比例关系保持一致
- 形状保持:区域的几何形状基本保持不变
- 高精度:在300km范围内提供高精度的距离计算
许可证
MIT
Metadata
Release files for geo-poi-normalizer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| geo_poi_normalizer-0.1.0.tar.gz | 16.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geo_poi_normalizer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.6 kB
Release files / geo_poi_normalizer-0.1.0.tar.gz
| Download URL | geo_poi_normalizer-0.1.0.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69e4fee2c5b4b75c2905003d7facc195bb78420799523fa4508fce49ad40602b
|
|
BLAKE2b-256 checksum How to use checksums |
133e135f472270f88ffa7f104c30f677556e2804ec28c07b276487a4b994eabf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|
Release files / geo_poi_normalizer-0.1.0-py3-none-any.whl
| Download URL | geo_poi_normalizer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
13ea6f154f10e7f814ced2c8371f5599e923686631d1c2e03843d98eabbeecbd
|
|
BLAKE2b-256 checksum How to use checksums |
9e923210a8f80d2c09cf821c71eaad555b205b34df9e946781b8146995a9dad6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|
Security for geo-poi-normalizer 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.