你怎么知道什么SRID用于一个shp文件?

时间:2009-10-09 00:00:26

标签: gis postgis geodjango srid

我正在尝试将一个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并得到了完全相同的结果):

image http://img245.imageshack.us/img245/2545/4326sand.png

黄色是我从SHP导入的数据,背景来自openlayers(来自geodjango admin)。这是否意味着我使用了错误的SRID,或者这只是预期的误差范围?

shp文件来自here

6 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:19)

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

答案 2 :(得分:11)

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

如果数据看起来相同,SRID为4269(NAD83)和4326(WGS84),那就有问题了。

答案 3 :(得分:7)

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

詹姆斯已经提供了spatialreference.org的链接。这有助于查找空间参考信息...我假设您在prepared your postgis instance时加载了spatial_ref_sys.sql

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

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

我给你的建议是:

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

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

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

一切都会匹配。

干杯

答案 4 :(得分:6)

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

答案 5 :(得分:1)

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

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

这产生 - > EPSG:6269

希望这适合你。