Skip to main content
 首页 » 编程设计

python之将 UTM 与 geodjango 一起使用

2025年05月04日34leader

我正在考虑使用 UTM与 geodjango 的坐标系。 而且我不知道如何正确获取数据。

我一直在浏览文档,似乎“GEOSGeometry(geo_input, srid=None)”或“OGRGeometry”可以与 EWKT 一起使用,但我不知道如何格式化数据。

它看起来像 UTM SRID是:2029

来自wikipedia article格式是这样写的:

[UTMZone][N 或 S] [东移] [北移]

17N 630084 4833438

所以我尝试了以下但没有成功:

>>> from django.contrib.gis.geos import * 
>>> pnt = GEOSGeometry('SRID=2029;POINT(17N 630084 4833438)') 
GEOS_ERROR: ParseException: Expected number but encountered word: '17N' 
>>> 
>>> from django.contrib.gis.gdal import OGRGeometry 
>>> pnt = OGRGeometry('SRID=2029;POINT(17N 630084 4833438)') 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "C:\Python26\lib\site-packages\django\contrib\gis\gdal\geometries.py", line 106, in __init__ 
    ogr_t = OGRGeomType(geom_input) 
  File "C:\Python26\lib\site-packages\django\contrib\gis\gdal\geomtype.py", line 31, in __init__ 
    raise OGRException('Invalid OGR String Type "%s"' % type_input) 
django.contrib.gis.gdal.error.OGRException: Invalid OGR String Type "srid=2029;point(17n 630084 4833438)" 

是否有任何示例可以说明这是如何完成的?

也许我应该在 UTM 中做任何必要的计算并转换为十进制度数?
在这种情况下,GEOS 或 geodjango 中的其他工具是否提供转换实用程序?

请您参考如下方法:

UTM 带 (17N) 已由空间引用系统指定 -- SRID 2029 ,因此您无需将其包含在传递给 GEOSGeometry 构造函数的 WKT 中。

>>> from django.contrib.gis.geos import * 
>>> pnt = GEOSGeometry('SRID=2029;POINT(630084 4833438)') 
>>> (pnt.x, pnt.y) 
(630084.0, 4833438.0) 
>>> pnt.srid 
2029 

然后,例如:

>>> pnt.transform(4326)   # Transform to WGS84 
>>> (pnt.x, pnt.y) 
(-79.387137066054038, 43.644504290860461) 
>>> pnt.srid 
4326