Skip to main content

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?

直接将经纬度归一化会导致以下问题:

  1. 距离失真:经纬度直接归一化会导致不同方向的距离比例失真
  2. 形状扭曲:长宽比例失衡的区域会被严重扭曲
  3. 精度不均:不同纬度的经度精度不同

GeoPOINormalizer通过UTM投影和各向同性缩放解决了这些问题,确保:

  1. 距离比例保持:各个方向的距离比例关系保持一致
  2. 形状保持:区域的几何形状基本保持不变
  3. 高精度:在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)

Source distribution for geo-poi-normalizer 0.1.0
File Size Uploaded Provenance
geo_poi_normalizer-0.1.0.tar.gz 16.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for geo-poi-normalizer 0.1.0
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page