您如何知道 shp 文件使用什么 SRID?

问题描述 投票:0回答:7

我正在尝试将 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 文件来自这里

gis postgis geodjango srid
7个回答
25
投票

为了详细说明 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/


22
投票

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


12
投票

数据似乎是NAD83,其SRID为4269。您的PostGIS数据库有一个

spatial_ref_sys
表,它是SRID查找表。

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


9
投票

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

James 已经给出了 spatialreference.org 的链接。这有助于查找空间参考信息...我假设您在

准备好 postgis 实例
时确实加载了 spatial_ref_sys.sql

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

我通常将数据保存在 PostGIS 数据库的不同 SRID 中。然而,我总是需要投影到输出SRS。您正在显示 OpenStreetMap 预渲染的图块,我敢打赌它们是使用 SRID 900913 绘制的(Google 地图的修改墨卡托投影,现在每个人都使用渲染)。

我给你的建议是:

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

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

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

一切都会匹配。

干杯


7
投票

使用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')

2
投票

请务必查看:http://www.epsg-registry.org/

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

这产生 -> EPSG:6269。

希望这对您有用。


0
投票

其他答案更权威,所以我什至犹豫是否要添加这个,但对于一个在使用前应验证的简单建议,可以简单地将“SRID”加上文本粘贴到搜索引擎中,即:

SRID GEOGCS["GCS_North_American_1983", DATUM["D_North_American_1983", SPHEROID["GRS_1980",6378137.0,298.257222101]], PRIMEM["格林威治",0.0], UNIT["度",0.0174532925199433]]

当我尝试时,DuckDuckGo 在 EPSG.io 上返回了 SRID 4269 的正确页面作为最佳结果,Bing 和 Google 也几乎做到了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.