【发布时间】:2018-06-26 08:14:59
【问题描述】:
大家好,我一直在尝试添加 shapefile,但我遇到了一些困难,因为我的国家的坐标系不是 gdal 库的一部分。如何创建新的 SRID。我已经创建了 srs 并在 postgis 中定义了空间参考系统。
【问题讨论】:
标签: django python-3.x geodjango
大家好,我一直在尝试添加 shapefile,但我遇到了一些困难,因为我的国家的坐标系不是 gdal 库的一部分。如何创建新的 SRID。我已经创建了 srs 并在 postgis 中定义了空间参考系统。
【问题讨论】:
标签: django python-3.x geodjango
PostGIS 将空间参考系统存储在名为spatial_ref_sys 的表中。 Django 有一个模型可以访问该表中的数据,名为SpatialRefSys,但没有记录。
同样没有记录的是实用函数add_srs_entry(),它将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)
或者,您可以使用数据库管理工具添加条目
【讨论】:
AUTHORITY["EPSG", "7392"] 字段,则在调用srs.validate() 时会得到SRSException: Unsupported SRS.。不确定这里发生了什么,但显然该定义无效。
GDAL_ERROR 6: b'EPSG PCS/GCS code 99221 not found in EPSG support files. Is this a valid EPSG coordinate system?'你能指导我如何在库中添加 srs 吗?
如果 GDAL 不支持您的国家/地区 SRID - 或 如果您想添加自己的参考系统 - 我可以通过在 public.spatial_ref_sys 中手动添加条目来使用 postGIS 实现此目的:
INSERT INTO public.spatial_ref_sys (srid, proj4text) VALUES
($srid, $proj);
或者使用 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,因为它使用了 GDAL(不读取 spatial_ref_sys)。而是使用database function,如下所示:
model.objects.annotate(position_wgs84=Transform('position', 4326))
【讨论】: