地理POI归一化处理库,采用投影转换+各向同性缩放方案
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geo_poi_normalizer-0.1.0.tar.gz.
File metadata
- Download URL: geo_poi_normalizer-0.1.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69e4fee2c5b4b75c2905003d7facc195bb78420799523fa4508fce49ad40602b
|
|
| MD5 |
1341dcd80ebc1c87ee30ac7bbd6b71bf
|
|
| BLAKE2b-256 |
133e135f472270f88ffa7f104c30f677556e2804ec28c07b276487a4b994eabf
|
File details
Details for the file geo_poi_normalizer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: geo_poi_normalizer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13ea6f154f10e7f814ced2c8371f5599e923686631d1c2e03843d98eabbeecbd
|
|
| MD5 |
6f2bdef3eb0dcfb8dfd38df83fcfd722
|
|
| BLAKE2b-256 |
9e923210a8f80d2c09cf821c71eaad555b205b34df9e946781b8146995a9dad6
|