Geodjango 创建一个新的 SRID

Geodjango create a new SRID

大家好,我一直在尝试添加 shapefile,但遇到了一些困难,因为我所在国家/地区的坐标系不是 gdal 库的一部分。我如何创建一个新的 SRID.I 已经创建了 srs 并在 postgis 中定义了空间参考系统。

PostGIS 将空间参考系统存储在名为 spatial_ref_sys 的 table 中。 Django 有一个模型可以访问此 table 中的数据,称为 SpatialRefSys,但未记录在案。

也没有记录实用函数 add_srs_entry(), which takes an SpatialReference 作为第一个参数的实例,它可以从 PROJ.4 字符串中定义。

所以像这样的东西应该可以工作:

from django.contrib.gis.utils.srs import add_srs_entry
from django.contrib.gis.gdal import SpatialReference

srs = SpatialReference('''...PROJ.4 string...''')
add_srs_entry(srs)

或者,您可以使用数据库管理工具添加条目

如果 GDAL 不支持您所在国家/地区的 SRID - 或者 如果您想添加自己的参考系统 - 我可以通过在 public.spatial_ref_sys 手动:

INSERT INTO public.spatial_ref_sys (srid, proj4text) VALUES
($srid, $proj);

或通过获取 table:

使用 django
from django.db import DEFAULT_DB_ALIAS, connections

database = DEFAULT_DB_ALIAS
SpatialRefSys = connections[database].ops.spatial_ref_sys()
SpatialRefSys.objects.create(srid=$srid, proj4text=$proj)

请记住,您将无法按如下方式转换 GeosGeometry objects as this uses GDAL (which does not read spatial_ref_sys). Instead use the database function

model.objects.annotate(position_wgs84=Transform('position', 4326))