Skip to main content

地理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?

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

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

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

  1. 距离比例保持:各个方向的距离比例关系保持一致
  2. 形状保持:区域的几何形状基本保持不变
  3. 高精度:在300km范围内提供高精度的距离计算

许可证

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geo_poi_normalizer-0.1.0.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geo_poi_normalizer-0.1.0-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

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

Hashes for geo_poi_normalizer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 69e4fee2c5b4b75c2905003d7facc195bb78420799523fa4508fce49ad40602b
MD5 1341dcd80ebc1c87ee30ac7bbd6b71bf
BLAKE2b-256 133e135f472270f88ffa7f104c30f677556e2804ec28c07b276487a4b994eabf

See more details on using hashes here.

File details

Details for the file geo_poi_normalizer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for geo_poi_normalizer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 13ea6f154f10e7f814ced2c8371f5599e923686631d1c2e03843d98eabbeecbd
MD5 6f2bdef3eb0dcfb8dfd38df83fcfd722
BLAKE2b-256 9e923210a8f80d2c09cf821c71eaad555b205b34df9e946781b8146995a9dad6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page