【问题标题】:Geodjango create a new SRIDGeodjango 创建一个新的 SRID
【发布时间】:2018-06-26 08:14:59
【问题描述】:

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

【问题讨论】:

    标签: django python-3.x geodjango


    【解决方案1】:

    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)
    

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

    【讨论】:

    • GDAL_ERROR 6:在 EPSG 支持文件中找不到 b'EPSG PCS/GCS 代码 7392。这是一个有效的 EPSG 坐标系吗?'
    • 如果我使用spatialreference.org/ref/sr-org/7392/prettywkt,并添加了AUTHORITY["EPSG", "7392"] 字段,则在调用srs.validate() 时会得到SRSException: Unsupported SRS.。不确定这里发生了什么,但显然该定义无效。
    • 我解决了,我刚刚进入库共享并将我的 proj4 代码包含在 epsg 库下并且它工作正常。感谢您的帮助
    • 嗨,@GentBytyqi 我也面临同样的问题。 GDAL_ERROR 6: b'EPSG PCS/GCS code 99221 not found in EPSG support files. Is this a valid EPSG coordinate system?'你能指导我如何在库中添加 srs 吗?
    【解决方案2】:

    如果 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))
    

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 2016-11-05
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-09
      • 2014-08-22
      • 1970-01-01
      相关资源
      最近更新 更多