在GeoDjango中使用UTM

1 投票
1 回答
1995 浏览
提问于 2025-04-15 13:52

我正在研究如何在geodjango中使用UTM坐标系统,但我不知道怎么正确地输入数据。

我查阅了相关文档,发现可以使用GEOSGeometry(geo_input, srid=None)或者OGRGeometry来处理EWKT格式的数据,但我还是搞不清楚该怎么格式化这些数据。

根据维基百科,UTM的SRID是:2029。

维基百科文章中,数据格式是这样的:

[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中的其他工具是否提供转换的功能?

1 个回答

7

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

撰写回答