【问题标题】:How do you know what SRID to use for a shp file?你怎么知道 shp 文件使用什么 SRID?
【发布时间】:2009-10-09 00:00:25
【问题描述】:

我正在尝试将 SHP 文件放入我的 PostGIS 数据库中,但数据有点偏差。我认为这是因为我使用了错误的 SRID。 PRJ文件内容如下:

GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]

这与什么 SRID 相关?更一般地说,如何根据 PRJ 文件中的信息查找 SRID?是否有一个查找表列出了所有 SRID 及其“geogcs”等价物?

使用srid=4269 和4326 导入的数据是完全相同的结果。

这是否意味着我使用了错误的 SRID,或者这只是预期的误差范围?

shp 文件来自here

【问题讨论】:

    标签: gis postgis geodjango srid


    【解决方案1】:

    为了详细说明synecdoche 的答案,SRID 有时被称为“EPSG”代码。 SRID/EPSG 代码实际上是投影的知名文本表示的简写。

    您可以在 SRID 表上进行快速搜索,看看是否可以找到完全匹配或相似匹配:
    SELECT srid, srtext, proj4text FROM spatial_ref_sys WHERE srtext ILIKE '%BLAH%'

    上面是在http://www.bostongis.com/?content_name=postgis_tut01找到的。

    您也可以在 spatialreference.org 上搜索此类内容。搜索工具是原始的,因此您可能必须使用 Google 搜索并指定站点,但任何结果都会向您显示 ESRI PRJ 内容、PostGIS SQL INSERT 和一堆其他表示形式。

    我认为您的 PRJ 位于:http://spatialreference.org/ref/sr-org/15/

    【讨论】:

      【解决方案2】:

      Prj2EPSG是一个专门针对这个问题的小网站;粘贴 PRJ 内容,它会尽力找到匹配的 EPSG。他们还有一个web service API。这不是一门精确的科学。他们似乎使用 Lucene 和 EPSG 数据库对匹配项进行文本搜索。

      【讨论】:

      • 感谢分享。我正在做一个项目,我必须从美国多个州导入大量 GIS 文件,并且使用他们的 API 正确获取 EPSG 非常有帮助。
      • 由于某种原因,我在阅读此答案后仍然感到困惑,我有一个prj文件并将其上传到prj2epsg.org/search,得到26918,它看起来不像SRID代码......
      • 遗憾的是,该网站此时已关闭数月。似乎不太可能会回来。哦,我多么希望它现在还在。
      • 哦,得知该网站已消失,我很难过。这里有一些关于替代方案的讨论,尽管没有一个是简单的:gis.stackexchange.com/questions/372381/…
      【解决方案3】:

      数据似乎是 NAD83,其 SRID 为 4269。您的 PostGIS 数据库有一个 spatial_ref_sys 表,它是 SRID 查找表。

      如果 SRID 为 4269 (NAD83) 和 4326 (WGS84) 的数据看起来相同,则说明有问题。

      【讨论】:

        【解决方案4】:

        去下载GDAL utilities,ogrinfo(它会吐出投影信息)和ogr2ogr实用程序非常宝贵。

        James 已经给出了spatialreference.org 的链接。这有助于查找空间参考信息...我假设您在 prepared your postgis instance 时确实加载了 spatial_ref_sys.sql

        老实说,我不认为问题出在 PostGIS 方面。

        我通常将数据保存在 PostGIS 数据库中的不同 SRID 中。但是,我总是需要投射到输出 SRS。您正在展示 OpenStreetMap 预渲染的图块,我敢打赌它们是使用 SRID 900913 绘制的(the Google Map's modified mercator projection 现在每个人都使用它来渲染)。

        我给你的建议是:

        1- 在 OpenLayers 代码中设置与您正在读取的任何图块匹配的正确投影。

        2.- 将数据库中的数据保存在您想要的任何 SRID 中(当然只要它是正确的)。

        3.- 确保您用于从数据中生成图像的服务器(ArcGIS Server、Mapserver、GeoServer 或其他)正在重新投影到同一个 SRS。

        一切都会匹配。

        干杯

        【讨论】:

          【解决方案5】:

          使用GDAL的OSR Python模块确定代码:

          from osgeo import osr
          
          srsWkt = '''GEOGCS["GCS_North_American_1983",
          DATUM["D_North_American_1983",
          SPHEROID["GRS_1980",6378137.0,298.257222101]],
          PRIMEM["Greenwich",0.0],
          UNIT["Degree",0.0174532925199433]]'''
          
          # Load in the projection WKT
          sr = osr.SpatialReference(srsWkt)
          
          # Try to determine the EPSG/SRID code
          res = sr.AutoIdentifyEPSG()
          if res == 0: # success
              print('SRID=' + sr.GetAuthorityCode(None))
              # SRID=4269
          else:
              print('Could not determine SRID')
          

          【讨论】:

            【解决方案6】:

            一定要看看:http://www.epsg-registry.org/

            使用按过滤器查询选项并输入:North American Datum 1983。

            这会产生 -> EPSG:6269。

            希望这对你有用。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-08-18
              • 2017-02-10
              • 1970-01-01
              • 2011-08-08
              • 2011-05-01
              • 1970-01-01
              • 2020-02-08
              相关资源
              最近更新 更多